Страница 2 из 2

Добавлено: Вт окт 07, 2008 21:22:02
Simba
Может кому будет интересно, вот что я нарыл в хелпе к ImageCraft (он работает с пинами с помощью макросов, как IAR)

Some compilers support C extensions to access individual bits, such as using PORTA.2 to access bit 2 of the IO register PORTA. By definition, extensions are not portable to other standard C compilers. Also, note that the bit-twiddling operations listed here produce the best code and are entirely portable. Furthermore, using the suggested macros above may make them easier to use. Therefore, our compilers do not support this extension.

Some users also want to use structure bitfields to access IO register bits. While this would work for a pointer to structure with suitable casting of the pointer to the correct IO address, it requires an extension to the language to overlay a structure type at a specific IO register location. Furthermore, bitfield allocation order is not specified by the C language, and typically bitfields do not generate the best code. We strongly encourage you to use the bit-twiddling operators

В общем лучше всего писать в машинных кодах, можно получить самый "хороший" код, что я когда то и делал :))
Назад на дерево!

Добавлено: Вт окт 07, 2008 21:35:59
ARV
не надо на дерево

думаете, IAR генерирует ассемблерный код хуже, чем CVAVR?! или предложенный мной WinAVR-овский вариант в ассемблерном листинге окажется много хуже? очень маловероятно... просто CVAVR в очередной раз "упростил" жизнь за счет отдаления от стандарта языка, в котором нет понятия отдельный БИТ (как переменная)...
но все равно делает он что-то в том же духе, что и все прочие компиляторы...

так что если желаете быть со всеми (т.е. не на дереве) - пользуйтесь тем, что максимально близко к стандарту языка...

Добавлено: Вт окт 07, 2008 22:11:18
Simba
Строгое соответствие стандарту нужно для облегчения переносимости кода, а если переносить код не нужно, то и соблюдение стандартов не особенно греет. Та что думаю однозначный ответ что лучше дать трудно. Мне больше нравится при создании программы делать меньше телодвижений. Даже копи-пасте. Ленивый я... :)

Добавлено: Вт окт 07, 2008 22:18:31
ARV
ну да - вон на форуме сколько из-за этого телодвижений... думаю, спустя некоторое время вы поймете, что нестандартное - плохо... не зря же стандарты придумывают...

Добавлено: Вт окт 07, 2008 22:40:53
Simba
Я так и предполагал, что про форум скажете. Наверно надо бы разработчикам компиляторов для МК собраться вместе и создать расширение стандарта С (С++) с учётом специфики области, вот тогда наша жизнь стала бы легче. В общем большое спасибо за общение, предлагаю тему закрыть.

Добавлено: Ср окт 08, 2008 08:11:12
ARV
Simba писал(а):Я так и предполагал, что про форум скажете. Наверно надо бы разработчикам компиляторов для МК собраться вместе и создать расширение стандарта С (С++) с учётом специфики области, вот тогда наша жизнь стала бы легче. В общем большое спасибо за общение, предлагаю тему закрыть.
все уже давно придумано: WinAVR поддерживает расширения С++ в части "битовых полей" (bitfield)... и не только

Добавлено: Ср окт 08, 2008 09:24:15
kent.a
Как программер могу смело заявить что не соответствие стандарта это очень и очень плохо. стандарты не зря пишутся. Взять пример известного проекта Mozilla. В исходниках браузера есть одно очень интересное место. Там коммент стоит, а ниже идет индийский код что-то вроде if (x==1) {x=1} else {x=x;}
коммент гласит Не удалять этот код. потому как компилятор Visual Studio без этого кода компилит неправильный код. Вот я представляю как они отлаживали код, и матерились, когда стали смотреть asm-овский код.