|
Где бы взять исходники библиотек IAR 5.11 для ARM |
|
|
|
Jul 4 2008, 10:48
|
Группа: Новичок
Сообщений: 4
Регистрация: 2-11-06
Пользователь №: 21 907

|
Работаю с LPC2138 в IAR 5.11, возникла проблема: static переменным не присваивается ноль при инициализации. Хотелось бы посмотреть как работает __iar_zero_init в библитеке rt4t_al.a. У меня evaluation версия с iar.com, там исходников нет... Говорят они есть в full версии, но где ее взять?
|
|
|
|
|
Jul 4 2008, 15:34
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(VAI @ Jul 4 2008, 18:28)  есть исходники библиотек от 4.20a и 4.11a. Подойдут? Насколько я понимаю, не подойдут. Они там здорово поменяли стартап. Цитата(savram @ Jul 4 2008, 14:48)  Работаю с LPC2138 в IAR 5.11 А вы отключите штатную инициализацию сегментов. В своем ICF файле и инициализируйте сегменты сами. типа do not initialize { section .bss };
|
|
|
|
|
Jul 5 2008, 07:36
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(savram @ Jul 4 2008, 12:48)  ..возникла проблема: static переменным не присваивается ноль при инициализации. Не верю. Совсем не верю. Цитата Хотелось бы посмотреть как работает __iar_zero_init в библитеке rt4t_al.a. А там смотреть нечего - несколько команд в цикле обнуляющие заданную область памяти. Весь вопрос в том, находится-ли переменная в этой области, а к этому "библиотеки" ни сном ни духом.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 6 2008, 22:38
|
Группа: Новичок
Сообщений: 4
Регистрация: 2-11-06
Пользователь №: 21 907

|
Цитата(VAI @ Jul 4 2008, 18:28)  есть исходники библиотек от 4.20a и 4.11a. Подойдут? Подойдут! Надо узнать, что это за функция и написать ее самому. Вообще, это не единственная проблема с этой библиотекой. Изначально не работали прерывания IRQ, пришлось внести изменения cstartup.s (исходник есть) и подключить файл к проекту. Заработало. Правда полностью отключить библиотеку не могу, ругается, что нет __iar_zero_init (она как раз в библиотеке и лежит). На этом фоне не работает инициализация staticов... вот такая ерунда!
|
|
|
|
|
Jul 7 2008, 03:28
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37

|
Цитата Подойдут! http://www.rapidshare.ru/723273http://slil.ru/25962831заархивировал последним winrar-ом. Пароль на архив Без пароля. Кому не понятно, смотреть пароль под моей кошкой http://www.v572028.narod.ru/md5: 1b69d69bc383c42c1bda53a02ecb1c51 *lib.rar
--------------------
Если зайца бить, его можно и спички научить зажигать Сколько дурака не бей - умнее не будет. Зато опытнее
|
|
|
|
|
Jul 7 2008, 05:43
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
По дизассемблеру там, в частности, следующее: Код __iar_zero_init: Region$$Table$$Limit: 00000150 E3520000 CMP R2, #0x0 00000154 012FFF1E BXEQ LR 00000158 E3A01000 MOV R1, #0x0 0000015C E4801004 STR R1, [R0], #+4 00000160 E2522004 SUBS R2, R2, #0x4 00000164 1AFFFFFC BNE 0x00015C 00000168 E12FFF1E BX LR Программа такая: Код int main() { static int MyVar; return MyVar; } Оптимизация выключена, инициализация происходит как надо.
|
|
|
|
|
Jul 8 2008, 12:41
|
Группа: Новичок
Сообщений: 4
Регистрация: 2-11-06
Пользователь №: 21 907

|
icf.zip ( 706 байт )
Кол-во скачиваний: 111Цитата(zltigo @ Jul 7 2008, 10:27)  Ну что я могу сказать - после таких заявлений проблемы явно не в библиотеке, и чем Вы раньше допустите мысль, что искать нужно у себя, тем лучше. С этим-то проблем совсем ни каких нет, это первая мысль, которая возникает. Конечно, наивно винить IAR в своих бедах. Но проблема-то не исчезает... IgorKossak - спасибо, буду разбираться. Я вынужден не использовать static переменные, вместо этого инициализирую глобальные переменные в mainе. Все работает, но это не красиво как-то. Вот пример: В main.c есть такая строка static int static_variable1[10]; Потом в main делаю проверку - массив не инициализирован, содержит случайные значения. Вот что написано в *.map: Section Kind Address Size Object ------- ---- ------- ---- ------ .bss zero 0x40002468 0x28 main.o [1] Из чего делаю вывод, что переменная лежит в bss по адресу 0x40002468 (это RAM). Делаю предположение, что "zero" - директива линкеру инициализировать область нулями. Это только мое предположение, если я не прав, пожалуйста, дайте мне знать. ICF прилагаю, там тоже вроде все чисто. Буду очень признателен, если кто-нибудь даст совет где еще покопать.
|
|
|
|
|
Jul 8 2008, 13:50
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
1. static или не static по любому неинициализированвнные переменные попадают в bss 2. bss инициализируется нулями, если только специально не постараться. 3. с дуру у V5  даже проверил. 3. точка.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 8 2008, 16:38
|
Местный
  
Группа: Участник
Сообщений: 336
Регистрация: 7-03-07
Из: Петербург
Пользователь №: 25 961

|
Цитата(zltigo @ Jul 8 2008, 16:50)  2. bss инициализируется нулями, если только специально не постараться. = IAR (стр 43 (67) ODARM_1.pdf). Но не каждый транслятор так делает: \begin{excerpt:link=http://focus.ti.com/lit/ug/spnu151d/spnu151d.pdf} 5.12 Initializing Static and Global Variables in TIABI and TI ARM9 ABI Modes The ANSI/ISO C standard specifies that global (extern) and static variables without explicit initializations must be initialized to 0 before the program begins running. This task is typically done when the program is loaded. Because the loading process is heavily dependent on the specific environment of the target application system, the compiler itself makes no provision for preinitializing variables at run time. It is up to your application to fulfill this requirement. \end{excerpt} -- AN
|
|
|
|
|
Jul 8 2008, 18:12
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
Цитата(AndrewN @ Jul 8 2008, 19:38)  Но не каждый транслятор так делает: Подтверждаю, не каждый. Code Composer Studio от TI в своё время подвёл меня этим Цитата By default, the .bss section and sections defined with the .usect directive have no raw data (they are uninitialized). They occupy space in the memory map but have no actual contents. Но, повторяю, у IAR с инициализацией полный порядок.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|