Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Изменения в *.h в IAR EW430 5.10.6
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
=DS=
Никто не знает, с какого бодуна ИАРовцы решили поменять структуру заголовочных файлов (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, но оно не кошерно как-то...
ЗЫ: Не знаю, куда было правильнее поместить тему - в ИАР или МСП, но все-таки ближе к МСП, по-моему.
rezident
Всю жизнь с начала освоения MSP430 пользуюсь хедерами (msp430xxxx.h) от производителя (TI) и горя не знаю. Битовые поля мне без необходимости, т.к. работаю с битовыми масками, а другой насущной необходимости использования хедеров от IAR я не вижу.
Вообще уже давно рекомендуется хранить все используемые хедеры в папке проекта, ввиду навязчивого желания IAR все время что-то модифицировать так, что оно становится несовместимо с предыдущими версиями.
=DS=
Цитата(rezident @ Nov 8 2010, 21:57) *
Всю жизнь с начала освоения MSP430 пользуюсь хедерами (msp430xxxx.h)

У них только один недостаток - если меняешь камень в проекте, приходится бегать по всем файлам и менять их вручную. С иаровсими хедерами проще - везде пишешь io430.h, а тип камня меняешь в настройках проекта.
Хотя, наверное, стоит написать аналог io430.h для тексасовских хедеров. Только поддерживать его придется самому sad.gif
rezident
Цитата(=DS= @ Nov 9 2010, 00:14) *
У них только один недостаток - если меняешь камень в проекте, приходится бегать по всем файлам и менять их вручную.
Нафига? 07.gif Я пишу один хедер msp430def.h вида
Код
#ifndef _MSP430DEF_H_
  #define _MSP430DEF_H_
  #include  <msp430x11x2.h>
#endif

который включаю во все файлы проекта.
=DS=
Цитата(rezident @ Nov 8 2010, 22:19) *
Нафига? 07.gif Я пишу один хедер msp430def.h вида

Как то не додумался cranky.gif
kriv-73
Цитата(rezident @ Nov 8 2010, 22:19) *
Я пишу один хедер msp430def.h

А почему бы просто не написать
#include "msp430.h"
У меня работает!
Xenia
Цитата(=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, с присущей ему системой структур, поддерживающих битовые поля, пользоваться масками, получаемых сдвигом единички влево sm.gif.

Однако, как правило, IAR не искореняет такие дефайны на корню, а создает структуры параллельно старым децинициям, в которых имя бита отождествляется с его номером в байте порта. Поэтому можно писать и так и эдак, если присоединить нужный хидер.

А вот изменение имен битов в портах - это действительно очень болезненно. Старые проекты перестают при этом компилироваться, а переименование имен битов, порой весьма трудоемко и запутанно. В свое время IAR переименовала несколько штук битов в области USB-регистров у AT90USB647, причем таких, назначение которых я не слишком хорошо понимала sm.gif. Из-за этого я была просто вне себя от ярости, ругая IAR на чем свет стоит. Пришлось составлять таблицу соответствия старых и новых названий. При этом оказалось, что в даташите на МК как раз использованы НОВЫЕ названия! Тут-то я и осеклась...

Я не в курсе в отношении MSP430-x, но в отношении моего МК удалось выяснить, что компилятор у IAR зачастую появляется еще загодя, когда МК не только еще не появился в продаже, но и даже тогда, когда на него нет даташита. При этом IAR частенько использует хидеры от AVR Studio, переделывая их под себя. А когда выходят на свет даташиты, то некоторые биты в них оказываются названы по-другому. А то случается и так, что такие переименования происходят при появлении даташита новой ревизии. Такая же история повторилась с AT32UC3C (это архитектура AVR32), когда появились новые регистры, а старые сдвинулись со своих мест вместе с ножками sm.gif по сравнению с UC3A. А ныне грядет внедрение USB в новые модели ATxmega128A1U и ATxmega128B1, тогда как раньше у Xmega USB не было. Надо полагать, что снова начнется чехарда и именами битов, которых у USB-интефейса видимо-невидимо.

И тем не менее, символьные имена битов - добро, а не зло, т.к. смысловую замену имен производить все-таки легче, чем искать изменение в битовых масках. Вот и компилятор сразу же просекает, что имя изменилось и начинает жаловаться. А быстро ли вы просекли бы ошибку, возникающую при изменении битовой маски, на которую ни один компилятор жалобу не подаст? А уж тем более, когда пользуются хидерами от старых версий.

При этом проще достигается масштабирование, когда МК заменяют другим, с большей памятью. В таких ситуациях нередки случаи, когда какие-то регистры переезжают на другое место. И тут было затруднительно работать с хидерами, определяющими фиксированные адреса и биты. Тогда как с символьными именами проект требует простой перекомпиляции с другим хидером.
Сергей Борщ
QUOTE (Xenia @ Jan 19 2011, 03:02) *
Замена дефайнов на структуры - прогрессивное явление. Дикий атавизм, работая на языке C, с присущей ему системой структур, поддерживающих битовые поля, пользоваться масками, получаемых сдвигом единички влево sm.gif.
Особенно когда нужно одной командой записать весь регистр начальным значением или сбросить/установить биты сразу в нескольких битовых полях volatile-переменной. Или когда надо какой-то критический кусок написать на асме - вот тут польза от замены дефайнов на структуры очевидна wink.gif
jorikdima
Цитата(Сергей Борщ @ Jan 19 2011, 12:49) *
Особенно когда нужно одной командой записать весь регистр начальным значением или сбросить/установить биты сразу в нескольких битовых полях volatile-переменной.

Компайлер должен это дело соптимизировать в одну операцию, и volatile по идее не помешает.
+1 к отказу от текстовых подстановок, макросов.
AHTOXA
Цитата(jorikdima @ Jan 19 2011, 20:46) *
Компайлер должен это дело соптимизировать в одну операцию, и volatile по идее не помешает.


Компилятор не имеет права оптимизировать две операции
Код
SFR_bit0 = 1;
SFR_bit1 = 1;

в одну
Код
SFR |= (1<<0)|(1<<1);

, если SFR - volatile.
Поэтому весь этот "синтаксический сахар" в виде структур - вещь весьма неоднозначная.
Xenia
Цитата(AHTOXA @ Jan 19 2011, 20:08) *
Компилятор не имеет права оптимизировать две операции ...
Поэтому весь этот "синтаксический сахар" в виде структур - вещь весьма неоднозначная.

Совершенно верно! Именно поэтому кажутся безосновательными претензии к IAR за то, что тот якобы изъял все дефайны, заменив их на структуры. Если бы такое случилось, то была бы потеряна возможность манипулировать в регистре более чем одним битом одновременно. А во многих случаях это требование является необходимым.
sonycman
Цитата(Xenia @ Jan 19 2011, 22:39) *
Если бы такое случилось, то была бы потеряна возможность манипулировать в регистре более чем одним битом одновременно. А во многих случаях это требование является необходимым.

То есть вы признаёте, что погорячились и были не правы по поводу "дикого атавизма" и дефайнов? sm.gif
=DS=
Цитата(Xenia @ Jan 19 2011, 22:39) *
Именно поэтому кажутся безосновательными претензии к IAR за то, что тот якобы изъял все дефайны, заменив их на структуры.

Думаете, я это сам сочинил? Мне бы такое и в страшном сне не приснилось... Хотите, пришлю конкретный хедер. Все там есть: и изьятые дефайны (причем нвполовину, часть битов в одном и том-же регистре определена, часть нет), и несоответствующие даташиту имена. Причем в предыдущих версиях это как раз был нормальный рабочий файл (как обычно, struct+define, полностью соответсвующий даташиту), а изгадили его недавно.
PS: Уже выпустили и 5.20 и 5.20.2, там все то-же.
zltigo
QUOTE (AHTOXA @ Jan 19 2011, 20:08) *
Поэтому весь этот "синтаксический сахар" в виде структур - вещь весьма неоднозначная.

Как раз очень однозначная - привязка "программистов" к конкретному компилятору. Посему всякие хидеры (про "библиотеки" с "визардами" вообще помолчу при дамах ) от производителей компиляторов (да и производителей контроллеров тоже) в их оригинальном виде, сразу "в топку". А если к этому добавить, что они решают только ЧАСТЬ проблемы работы с битами, то быстро-быстро "в топку" - ибо просто лишняя сущность.
Для тех контроллеров, с которыми собираюсь работать не разово, а долго и счастливо ВСЕГДА создаю свои хидеры. Тем более работа эта ввиду своей постепенности и по любому необходимости изучения документации, совершенно необременительна.
Dog Pawlowa
Ну, свой хедер может и перебор, но по крайней мере стоит выдирать компиляторский из среды, класть в папку проекта и включать под систему контроля версий.
jorikdima
Цитата(AHTOXA @ Jan 19 2011, 20:08) *
Компилятор не имеет права оптимизировать две операции

Вероятно я ошибался. Я думал, все же что если установка бит будет делаться последовательными командами, то он объединит их в одно чтение переменной и одну запись модифицированного значения. Видимо volatile напрочь отменяет оптимизацию. Сорри тогда.
zltigo
QUOTE (Dog Pawlowa @ Jan 20 2011, 11:58) *
Ну, свой хедер может и перебор, но по крайней мере стоит выдирать компиляторский из среды, класть в папку проекта и включать под систему контроля версий.


Не перебор, еcли работаете с несколькими компиляторами и контролерами, то не перебор, ибо однотипность подхода окупается с лихвой. Иначе в голове каша и лишний напряг как, например, сегодня писать
AAA |= (1<<BBB)|(1<<CCC);
AAA |= (BBB|CCC);
AAA_BBB = 1; AAA_CCC = 1;
AAA |= (1<<0)|(1<<1);
или
AAA |= (AAA_BBB | AAA_CCC);

Лично у меня всегда и везде последний вариант с расширениями в виде:
AAA |= (AAA_BBB | AAA_DDD(value) );

Dog Pawlowa
Цитата(zltigo @ Jan 20 2011, 13:03) *
однотипность подхода окупается с лихвой

Терпения не хватает настолько изучать даташиты, поэтому в конце концов принял AVR с нумерацией битов, хотя и дергался поначалу в попытках определить битовые маски. Но смена кристалла и готовые определения меня купили.
Но это ерунда - еще и Renesas R8/C со структурами битов появился, так что имею полный фарш sad.gif
И это все от одного поставщика компиляторов!
zltigo
QUOTE (Dog Pawlowa @ Jan 20 2011, 14:10) *
И это все от одного поставщика компиляторов!

А у меня по минимуму 5 embedded компиляторов. Вот такие дела.
QUOTE (Dog Pawlowa @ Jan 20 2011, 14:10) *
Терпения не хватает настолько изучать даташиты

А что их изучать? Специально все подряд не не надо, а так в процессе работы то, что надо ПО ЛЮБОМУ читаешь и дописываешь, тем более, что скопипастить и отредактировать-то не возбраняется sm.gif
QUOTE (Dog Pawlowa @ Jan 20 2011, 14:10) *
в конце концов принял AVR с нумерацией битов

Нафиг, нафиг держать в голове еще связку имени бита с именем регистра и не ошибаться при этом.
Desperanto
а проекты созданные в 5.1 в 4.20 все же придется подредактировать?
zltigo
QUOTE (Desperanto @ Feb 18 2011, 11:33) *
а проекты созданные в 5.1 в 4.20 все же придется подредактировать?

Это к кому вопрос?
Dog Pawlowa
Цитата(Desperanto @ Feb 18 2011, 11:33) *
а проекты созданные в 5.1 в 4.20 все же придется подредактировать?

Проще создать заново, чем разбираться с форматом файла проекта от версии к версии.
Ну и спускаться в версиях - это трусость. Только вперед! wink.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.