|
Изменения в *.h в IAR EW430 5.10.6 |
|
|
|
Nov 8 2010, 18:35
|
Участник

Группа: Участник
Сообщений: 54
Регистрация: 25-09-07
Пользователь №: 30 836

|
Никто не знает, с какого бодуна ИАРовцы решили поменять структуру заголовочных файлов (io430***.h) в новой версии 5.10.6? Сегодня накатил sp6 и вдруг компилятор перестал понимать, что такое UCMST. Полез в io430x26x.h (текуший мой камень), а там выкинута куча #define, частично заменены на struct + enum, причем сделано все через ж... Тот же USMST в UCB0CTL0 переименовали в UCB0MST. а в UCB1CTL0 оставили как USMST, зачем-то ввели для UCB0CTL0 еще одно определение UCB0CTL0__SPI ... В общем, ляпов там выше крыши. Бегло сравнил размеры файлов в INC с предыдщей версией, изменений довольно много. Кто нибудь еще сталкивался с этим? Это у ИАРа идейное (типа, избавляемся от #define, переходим на enum) или просто ляп? Я бы просто откатился назад, но в этой версии появились удобные штучки типа __persistent, __ro_placement... Так что просто подставил старый .h из sp4, но оно не кошерно как-то... ЗЫ: Не знаю, куда было правильнее поместить тему - в ИАР или МСП, но все-таки ближе к МСП, по-моему.
|
|
|
|
|
Nov 8 2010, 19:14
|
Участник

Группа: Участник
Сообщений: 54
Регистрация: 25-09-07
Пользователь №: 30 836

|
Цитата(rezident @ Nov 8 2010, 21:57)  Всю жизнь с начала освоения MSP430 пользуюсь хедерами (msp430xxxx.h)
У них только один недостаток - если меняешь камень в проекте, приходится бегать по всем файлам и менять их вручную. С иаровсими хедерами проще - везде пишешь io430.h, а тип камня меняешь в настройках проекта. Хотя, наверное, стоит написать аналог io430.h для тексасовских хедеров. Только поддерживать его придется самому
|
|
|
|
|
Nov 8 2010, 19:19
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(=DS= @ Nov 9 2010, 00:14)  У них только один недостаток - если меняешь камень в проекте, приходится бегать по всем файлам и менять их вручную. Нафига?  Я пишу один хедер msp430def.h вида Код #ifndef _MSP430DEF_H_ #define _MSP430DEF_H_ #include <msp430x11x2.h> #endif который включаю во все файлы проекта.
|
|
|
|
|
Nov 8 2010, 19:28
|
Участник

Группа: Участник
Сообщений: 54
Регистрация: 25-09-07
Пользователь №: 30 836

|
Цитата(rezident @ Nov 8 2010, 22:19)  Нафига?  Я пишу один хедер msp430def.h вида Как то не додумался
|
|
|
|
|
Jan 18 2011, 19:15
|
Группа: Новичок
Сообщений: 5
Регистрация: 15-01-11
Из: Киров
Пользователь №: 62 255

|
Цитата(rezident @ Nov 8 2010, 22:19)  Я пишу один хедер msp430def.h А почему бы просто не написать #include "msp430.h" У меня работает!
|
|
|
|
|
Jan 19 2011, 01:02
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
Цитата(=DS= @ Nov 8 2010, 21:35)  Никто не знает, с какого бодуна ИАРовцы решили поменять структуру заголовочных файлов (io430***.h) в новой версии 5.10.6? Сегодня накатил sp6 и вдруг компилятор перестал понимать, что такое UCMST. Полез в io430x26x.h (текуший мой камень), а там выкинута куча #define, частично заменены на struct + enum, причем сделано все через ж... Тот же USMST в UCB0CTL0 переименовали в UCB0MST. а в UCB1CTL0 оставили как USMST, зачем-то ввели для UCB0CTL0 еще одно определение UCB0CTL0__SPI ... Замена дефайнов на структуры - прогрессивное явление. Дикий атавизм, работая на языке C, с присущей ему системой структур, поддерживающих битовые поля, пользоваться масками, получаемых сдвигом единички влево  . Однако, как правило, IAR не искореняет такие дефайны на корню, а создает структуры параллельно старым децинициям, в которых имя бита отождествляется с его номером в байте порта. Поэтому можно писать и так и эдак, если присоединить нужный хидер. А вот изменение имен битов в портах - это действительно очень болезненно. Старые проекты перестают при этом компилироваться, а переименование имен битов, порой весьма трудоемко и запутанно. В свое время IAR переименовала несколько штук битов в области USB-регистров у AT90USB647, причем таких, назначение которых я не слишком хорошо понимала  . Из-за этого я была просто вне себя от ярости, ругая IAR на чем свет стоит. Пришлось составлять таблицу соответствия старых и новых названий. При этом оказалось, что в даташите на МК как раз использованы НОВЫЕ названия! Тут-то я и осеклась... Я не в курсе в отношении MSP430-x, но в отношении моего МК удалось выяснить, что компилятор у IAR зачастую появляется еще загодя, когда МК не только еще не появился в продаже, но и даже тогда, когда на него нет даташита. При этом IAR частенько использует хидеры от AVR Studio, переделывая их под себя. А когда выходят на свет даташиты, то некоторые биты в них оказываются названы по-другому. А то случается и так, что такие переименования происходят при появлении даташита новой ревизии. Такая же история повторилась с AT32UC3C (это архитектура AVR32), когда появились новые регистры, а старые сдвинулись со своих мест вместе с ножками  по сравнению с UC3A. А ныне грядет внедрение USB в новые модели ATxmega128A1U и ATxmega128B1, тогда как раньше у Xmega USB не было. Надо полагать, что снова начнется чехарда и именами битов, которых у USB-интефейса видимо-невидимо. И тем не менее, символьные имена битов - добро, а не зло, т.к. смысловую замену имен производить все-таки легче, чем искать изменение в битовых масках. Вот и компилятор сразу же просекает, что имя изменилось и начинает жаловаться. А быстро ли вы просекли бы ошибку, возникающую при изменении битовой маски, на которую ни один компилятор жалобу не подаст? А уж тем более, когда пользуются хидерами от старых версий. При этом проще достигается масштабирование, когда МК заменяют другим, с большей памятью. В таких ситуациях нередки случаи, когда какие-то регистры переезжают на другое место. И тут было затруднительно работать с хидерами, определяющими фиксированные адреса и биты. Тогда как с символьными именами проект требует простой перекомпиляции с другим хидером.
|
|
|
|
|
Jan 19 2011, 17:08
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(jorikdima @ Jan 19 2011, 20:46)  Компайлер должен это дело соптимизировать в одну операцию, и volatile по идее не помешает. Компилятор не имеет права оптимизировать две операции Код SFR_bit0 = 1; SFR_bit1 = 1; в одну Код SFR |= (1<<0)|(1<<1); , если SFR - volatile. Поэтому весь этот "синтаксический сахар" в виде структур - вещь весьма неоднозначная.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Jan 20 2011, 01:56
|
Участник

Группа: Участник
Сообщений: 54
Регистрация: 25-09-07
Пользователь №: 30 836

|
Цитата(Xenia @ Jan 19 2011, 22:39)  Именно поэтому кажутся безосновательными претензии к IAR за то, что тот якобы изъял все дефайны, заменив их на структуры. Думаете, я это сам сочинил? Мне бы такое и в страшном сне не приснилось... Хотите, пришлю конкретный хедер. Все там есть: и изьятые дефайны (причем нвполовину, часть битов в одном и том-же регистре определена, часть нет), и несоответствующие даташиту имена. Причем в предыдущих версиях это как раз был нормальный рабочий файл (как обычно, struct+define, полностью соответсвующий даташиту), а изгадили его недавно. PS: Уже выпустили и 5.20 и 5.20.2, там все то-же.
Сообщение отредактировал =DS= - Jan 20 2011, 02:04
|
|
|
|
|
Jan 20 2011, 08:13
|

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

|
QUOTE (AHTOXA @ Jan 19 2011, 20:08)  Поэтому весь этот "синтаксический сахар" в виде структур - вещь весьма неоднозначная. Как раз очень однозначная - привязка "программистов" к конкретному компилятору. Посему всякие хидеры (про "библиотеки" с "визардами" вообще помолчу при дамах ) от производителей компиляторов (да и производителей контроллеров тоже) в их оригинальном виде, сразу "в топку". А если к этому добавить, что они решают только ЧАСТЬ проблемы работы с битами, то быстро-быстро "в топку" - ибо просто лишняя сущность. Для тех контроллеров, с которыми собираюсь работать не разово, а долго и счастливо ВСЕГДА создаю свои хидеры. Тем более работа эта ввиду своей постепенности и по любому необходимости изучения документации, совершенно необременительна.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|