|
Где бы взять исходники библиотек IAR 5.11 для ARM |
|
|
|
Jul 8 2008, 20:13
|

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

|
Цитата(aaarrr @ Jul 8 2008, 22:01)  Да и не такой уж и кривой..... Плавали  в части MSP430... Цитата Зато отучает полагаться на "0" в bss... Ну порадовали - отучает писать на "C" и приучает писать на неком подмножестве, тратить время и место на явную маниакальную инициализацию каждой переменной, не позволяет портировать нормальный сишный ранее написанный код без глюков... Цитата ... что, я считаю, правильно. Спасибо, я пешком постою
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 8 2008, 20:18
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(zltigo @ Jul 9 2008, 00:13)  Плавали  в части MSP430... MSP430 - единственный процессор, под который я писал в IAR'e  Но не по причине глючности студии, а просто так получилось. Цитата(zltigo @ Jul 9 2008, 00:13)  ...тратить время и место на явную маниакальную инициализацию каждой переменной Ну, во-первых, не каждой. А во-вторых, я уж лучше руками проинициализирую именно то, что мне нужно. И далеко не всегда нулями.
|
|
|
|
|
Jul 8 2008, 20:32
|

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

|
Цитата(aaarrr @ Jul 8 2008, 22:18)  А во-вторых, я уж лучше руками проинициализирую именно то, что мне нужно. Смысла в раздумьях, что инициализировать, что нет нет никакого, как и монотонной в ручной работе по инициализации, как и в раздумьях проскаивать на красный свет или нет.... По любому стандарт "C" придумал не TI и не ему на него плевать. Добавлять опции полного или частичного отключения инициализации, это их право, а вот тупо выбрасывать инициализацию статически выделяемой памяти - свинство. Цитата И далеко не всегда нулями. Про не нули речь не идет, но тем не менее в большинстве случаев 0 это нормальное значение, а остальные переменные просто доинициализировать через data или явно нужными зачениями при необходимости.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 8 2008, 20:51
|

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

|
Цитата(aaarrr @ Jul 8 2008, 22:42)  Возможно, но трагедии здесь не вижу... Я, например, не вижу ни малейшей трагедии в ручной инициализации динамически выделенной памяти, по тому, что знаю, что она не будет инициализирована согласно принятому стандарту языка. А вот в необходимости инициализировать память, которая должна быть согласно стандарту инициализирована, напротив, я вижу банальное свинство и не намерен пользоваться такими "продуктами".
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jul 8 2008, 22:23
|
Местный
  
Группа: Участник
Сообщений: 336
Регистрация: 7-03-07
Из: Петербург
Пользователь №: 25 961

|
Кхм... Не очень я люблю цитировать Шекспира, но - "Much ado abouth nothing" - по моему строчка вполне подходит. Ну это шутка. Цитата(zltigo @ Jul 8 2008, 23:32)  По любому стандарт "C" придумал не TI и не ему на него плевать. Добавлять опции полного или частичного отключения инициализации, это их право, а вот тупо выбрасывать инициализацию статически выделяемой памяти - свинство. По существу, разумеется стандарт ANSI C (если речь шла о нем) никто не отменял; я не уточнил, что есть опция -fill в линкере TI, которая восстанавливает "инициализационное" поведение предусмотренное ANSI C; правда инициализирующая константа может отличатся от нуля. Этакий суперсет. С другой стороны, ANSI C вовсе не застывшая и всеопределяющая формулировка - ещё есть K&R и K&R 2nd ed., и embedded C, и GNU C и вероятно еще что-нибудь, о чём я и не подозревал, и все они в чём-нибудь да отличаются от "девственого" ANSI C, который кстати тоже насчитывает пару редакций (или уже больше?). Отсюда с необходимостью следует, что любой код на С - это код на подмножестве С, и портируемость кода на С это скорее миф а реальность - это строки #ifdef (ARCH_XXXX) или ifdef (COMPILER_XXXX) - наподобие __STDC__ и __GNU_C__ и так далее. Самый лучшй способ, на мой взгляд, бороться с такими тонкостями (с позволения) - знать о них. Я, собственно, только это изначально и отметил, а вовсе не собирался затевать очередную священную войну за веру. Маленькая поправка: набор компиляторов TI генерирует машинный код для самых разных архитектур (от CISC-like С2000 до RISC ARM и multiple-issue C6000) - он совсем уже не сырой а вполне прожаренный, well-done, говоря кулинарным языком ANSI. -- AN
Сообщение отредактировал AndrewN - Jul 8 2008, 22:46
|
|
|
|
|
Aug 30 2011, 11:21
|
Частый гость
 
Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687

|
Цитата(zltigo @ Jul 5 2008, 11:36)  Цитата ..возникла проблема: static переменным не присваивается ноль при инициализации.
Не верю. Совсем не верю. Такая проблема есть. Сегодня наткнулся. Исследования показали следующее: Допустим, есть массив: static int BigArray[QuiteLargeValue] = 0; Можно "=0" и убрать, разницы никакой. В конфиге ICF имеем строку: place in RAM_region { readwrite, block CSTACK, block HEAP }; Однозначно видно, что линкер пытается разложить блоки в регионе по убыванию размера. Так вот если массив оказывается большего размера, чем CSTACK или HEAP, то видим такую картину: Код "P2", part 1 of 5: 0x3840 .bss zero 0x1000001c 0x3840 Array.r79 [1] - 0x1000385c 0x3840
"P2", part 2 of 5: 0x2480 HEAP 0x10003860 0x2000 <Block> HEAP uninit 0x10003860 0x2000 <Block tail> CSTACK 0x10005860 0x300 <Block> CSTACK uninit 0x10005860 0x300 <Block tail> .iar.dynexit 0x10005b60 0x180 <Block> .iar.dynexit uninit 0x10005b60 0xc cppinit.o [15] .iar.dynexit uninit 0x10005b6c 0x174 <Block tail> - 0x10005ce0 0x2480
"P2", part 3 of 5: 0xc P2 s0 0x10005ce0 0xc <Init block> .data inited 0x10005ce0 0x4 file1.r79 [4] .data inited 0x10005ce4 0x4 file2.r79 [9] .data inited 0x10005ce8 0x4 cppinit.o [15] - 0x10005cec 0xc
"P2", part 4 of 5: 0x217c .bss zero 0x10005cec 0x1024 mem.r79 [9]
... Наш блок Array попал в сегмент .bss, чего мы и хотели, однако, код для его инициализации не был сгенерирован линкером! Линкер начал забивать нулями область, начиная в данном случае с адреса 0x5cec. Если же уменьшить размер массива так, чтобы он оказался меньше кучи и стека, то он попадет к "остальным" членам .bss и все переменные проинициализируюутся. Конечно, уменьшать массив это не выход, поэтому есть другой вариант обхода проблемы в конфиге линкера: Код place in RAM_region { readwrite }; place in RAM_region { block CSTACK, block HEAP }; Тогда сегмент .bss не будет разорван данными с другими атрибутами и инициализация пройдет нормально.
|
|
|
|
|
Aug 31 2011, 10:27
|
Профессионал
    
Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882

|
Советую просто поставить последнюю версию IAR В 6.10 у меня тоже была проблема с инициализацией. В *.map надо смотреть на содержимое INIT TABLE Код ******************************************************************************* *** INIT TABLE ***
Address Size ------- ---- Zero (__iar_zero_init3) 2 destination ranges, total size 0x674a: 0x10000148 0x2e3a 0x2007c000 0x3910
Copy/packbits (__iar_packbits_init3) 1 source range, total size 0x33 (15% of destination): 0x00013b78 0x33 1 destination range, total size 0x144: 0x10000004 0x144 В 6.1 Создавался только один диапазон инициализации.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|