реклама на сайте
подробности

 
 
> Конструкторы глобальных объектов
AlexBoy
сообщение Aug 28 2006, 16:43
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 19-12-05
Из: Kiev
Пользователь №: 12 394



Кто-нибудь сталкивался с траблом, что конструкторы глобальных объектов не выполняются?
Пишу в ADS 1.2. Может дело в startup файле?
Собственно тот кусок, который уходит на инициализацию такой:
IMPORT __main
ldr r0, =__main
mov lr, pc
bx r0
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Master
сообщение Sep 1 2006, 10:48
Сообщение #2


Частый гость
**

Группа: Новичок
Сообщений: 170
Регистрация: 26-05-05
Из: Москва
Пользователь №: 5 405



Цитата(AlexBoy @ Aug 28 2006, 20:43) *
Кто-нибудь сталкивался с траблом, что конструкторы глобальных объектов не выполняются?

Вообще поиск ведь существует и работает twak.gif smile.gif
Хотя по большей части ответы по IAR, но в ADS может оказаться схожее решение.
Почитайте здесь (про IAR). А если короче, то нужно в переходе сменить толи с bx main на bx ?main, то ли наоборот...
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Sep 2 2006, 11:04
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



main() – первая вызываемая функция прикладной программы. Так что глобальные конструкторы должны вызываться до main (соответственно в startup модуле перед main). В разных компиляторах это сделано по-разному. Например MSVC имеет специальную функцию void _cinit(void). Или же придется самому эту операцию инициализации прописать на ассемблере.
Go to the top of the page
 
+Quote Post
AlexBoy
сообщение Sep 4 2006, 10:24
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 19-12-05
Из: Kiev
Пользователь №: 12 394



Цитата(sergeeff @ Sep 2 2006, 14:04) *
main() – первая вызываемая функция прикладной программы. Так что глобальные конструкторы должны вызываться до main (соответственно в startup модуле перед main). В разных компиляторах это сделано по-разному. Например MSVC имеет специальную функцию void _cinit(void). Или же придется самому эту операцию инициализации прописать на ассемблере.


там стоит переход на __main, это функция инициализации библиотек, которая затем переходит на main(), я проверял пошагово. Возможно еще что-то вызвать нужно.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 21:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.01377 секунд с 7
ELECTRONIX ©2004-2016