|
вопросы по IAR, В поисках идеального компилятора |
|
|
|
Oct 27 2005, 08:58
|
Местный
  
Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064

|
Перехожу на С, в связи с этим пересмотрел ICC CV и наконец добрался до IAR Для начала пересмотрел все что уже было сказано, много пока туманно надо будет осмысливать. Первый вопрос, хотя я вроде как с ответом утвердился, это возможно ли в IAR представить число в виде 0bxxxxxxxx. Лазая по настройкам пришел к выводу что нет такой возможности, да и в ANSI C это не предусмотрено. Или я чего-то не знаю ? Второй: вот в этой ветке http://forum.electronix.ru/index.php?showtopic=8829встретил описание макроса как Код #define _DDR_(a) DDR##a #define _DDR(a) _DDR##_(a) #define SETDDR(x) (_DDR(x##p)|=BIT(x##b)) //PORT A ********************************** #define OUT0p A #define OUT0b 4 SETDDR(OUT0); макрос который ставит 4 бит в DDRA В инклудах описаны только представления PORTA, DDRA, PINA, остальные как-то формируются ?? но как так и не понял.  В help на IAR по поводу ## нашел вот это: Rule 98 (required) There shall be at most one occurrence of the # or ## preprocessor operator in a single macro definition. How the rule is checked The compiler will generate an error, indicating a violation of this rule, if more than one of # or ## is used in combination. For example, the occurrence of # and ## in the same macro definition will trigger an error. Example of rule violations #define FOO(x) BAR(#x) ## _var Examples of correct code #define FOO(x) #x #define FOO(x) my_ ## x И опять ничего не понял  что за ## что он делает ? В книгах по С ничего такого не нашел... Кстати этот макрос работает на IAR и ICC, CV ругается. Может кто обьяснить что это за ## и как они работают ....
|
|
|
|
|
 |
Ответов
|
Nov 2 2005, 12:01
|
Местный
  
Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064

|
2 TMX Цитата компилятор вообще-то компилирует каждый файл по отдельности, ничего не зная о том,какие макросы уже определены в других файлах. Поэтому и ругается. В файле main.c (и только в нем) должно быть определение до включения файла globals.h Да - да - да, я как раз вчера вечером это выяснил методом проб и ошибок. Цитата Насчет файла globals.h в учебниках пишут прямо противоположное, я в своем стандарте оформления кода требую его использовать в виде, описанном выше.
#ifndef пишется, чтобы не было переопределения макросов в случае вложения заголовочных файлов. вот теперь начинаю понимать, а то как-то смысл #ifndef терялся. 2 Old1 Цитата и должно заработать  Да спасибо, заработало. Осталось понять в чем мой просчет. Попробую 2 варианта и тогда уже определюсь. 2 All Извиняйте если кто пытался тоже обьяснить, но дошло только счас... Вот перевожу свои библиотеки с AB, и возникли еще вопросы: Первый. В С нет сдвига через перенос. Как быть? Я вижу 3 возможных варианта 1 например нужно сделать <a<< и проверить Carry делаем так: b = a; a = a << 1; и проверяем if (a>b) то переноса не было else перенос был. 2. второй вариант преобразовать её в int и проверять как Carry 8 бит 3. Вставка на асме. 1 и 2 варианты не очень нравятся за счет использования дополнительного регистра а 3 как то не хочется так как будет потеря совместимости. Да и описание по совместимости какое-то туманное.. Что -то сказали, о чем-то умолчали.... Макросы типа __xxx вроде ненашел... как быть в данном случае. ?? 2 Вопрос. У меня есть несколько Case() в некоторых из них код повторяется. В асме это выглядело через rjmp в С вроде токага безобразия лучьше не делать Тогда опять же как лучьше. Вижу 2 варианта 1 макросом 2 функцией в первом случае большой код во втором лишние call и ret, да еще сохранение в стек. Сохранение стек можно отключить __task (наверное) но call и ret ... или может inline rfr-nj поможет ??
|
|
|
|
|
Nov 2 2005, 12:35
|

инженер
   
Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701

|
Цитата(&-rey @ Nov 2 2005, 16:01) Вот перевожу свои библиотеки с AB, и возникли еще вопросы: Первый. В С нет сдвига через перенос. Как быть? Я вижу 3 возможных варианта 1 например нужно сделать <a<< и проверить Carry делаем так: b = a; a = a << 1; и проверяем if (a>b) то переноса не было else перенос был. 2. второй вариант преобразовать её в int и проверять как Carry 8 бит 3. Вставка на асме. 4. if(a&0x80) то перенос будет Цитата 2 Вопрос. У меня есть несколько Case() в некоторых из них код повторяется. В асме это выглядело через rjmp в С вроде токага безобразия лучьше не делать Тогда опять же как лучьше. Можно и такую конструкцию использовать Код switch(cond) { case COND1: func1(); case COND2: func2(); case COND3: func3(); break; case COND4: func4(); } При выполнении условия (cond=COND1) выполняются функции func1, func2, func3; при выполнении (cond=COND2) - func2 и func3; для (cond=COND3) - только func3 и для (cond=COND4) - func4. Вместо функций - любые операторы Си. Согласитесь, что читабельность программы при такой конструкции значительно улучшается.
|
|
|
|
|
Nov 2 2005, 13:16
|
Местный
  
Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064

|
Цитата(Vic1 @ Nov 2 2005, 15:35) Цитата(&-rey @ Nov 2 2005, 16:01) Вот перевожу свои библиотеки с AB, и возникли еще вопросы: Первый. В С нет сдвига через перенос. Как быть? Я вижу 3 возможных варианта 1 например нужно сделать <a<< и проверить Carry делаем так: b = a; a = a << 1; и проверяем if (a>b) то переноса не было else перенос был. 2. второй вариант преобразовать её в int и проверять как Carry 8 бит 3. Вставка на асме. 4. if(a&0x80) то перенос будет Цитата 2 Вопрос. У меня есть несколько Case() в некоторых из них код повторяется. В асме это выглядело через rjmp в С вроде токага безобразия лучьше не делать Тогда опять же как лучьше. Можно и такую конструкцию использовать Код switch(cond) { case COND1: func1(); case COND2: func2(); case COND3: func3(); break; case COND4: func4(); } При выполнении условия (cond=COND1) выполняются функции func1, func2, func3; при выполнении (cond=COND2) - func2 и func3; для (cond=COND3) - только func3 и для (cond=COND4) - func4. Вместо функций - любые операторы Си. Согласитесь, что читабельность программы при такой конструкции значительно улучшается. Согласен так красивее. Да я читал про работу swich но у меня там есть набор условий в результате которых в одном и том же case нужно либо break либо часть этого общего кода. я думаю можно анализировать (a&0x80) и выставлять флаг какой - то свой. Думаю можно T флаг к этому приобщить, только проверить что С его не трогает. Когда раньше дизасемблил С коды видел у С большую к нему любовь.
|
|
|
|
Сообщений в этой теме
&-rey вопросы по IAR Oct 27 2005, 08:58 G}{OST ## в макросе с параметром обозначает, что далее сл... Oct 27 2005, 09:30 &-rey Цитата(G}{OST @ Oct 27 2005, 12:30)## в макро... Oct 27 2005, 10:16  ReAl Цитата(&-rey @ Oct 27 2005, 13:16)То... Oct 27 2005, 10:35 halfdoom Цитата(&-rey @ Oct 27 2005, 11:58)Ex... Oct 27 2005, 09:34 &-rey Цитата(halfdoom @ Oct 27 2005, 12:34)Цитата(... Oct 27 2005, 10:18 ReAl Цитата(&-rey @ Oct 27 2005, 11:58)Мо... Oct 27 2005, 09:48 &-rey Цитата(ReAl @ Oct 27 2005, 12:48)Цитата(... Oct 27 2005, 10:20 ReAl Ещё для переваривания :-)
Для неокрепших желудков ... Oct 27 2005, 10:43 &-rey Цитата(ReAl @ Oct 27 2005, 13:43)Ещё для пере... Oct 27 2005, 12:04  ReAl Цитата(&-rey @ Oct 27 2005, 15:04)Уж... Oct 28 2005, 05:33   spf Цитата(ReAl @ Oct 28 2005, 10:33)3) поискать ... Oct 28 2005, 06:12    ReAl Цитата(spf @ Oct 28 2005, 09:12)Цитата(ReAl ... Oct 28 2005, 12:11 grave Вот держите заголовочник.
Иногда даже удобней по... Oct 28 2005, 13:35 &-rey Всем Спасибо за ответы, но проблема bin формата дл... Nov 1 2005, 06:28 Old1
Существует, смотри здесь, в самом конце...
ЗЫ
(н... Nov 1 2005, 09:56 &-rey И все равно никак
Перейдем на конкретный пример
и... Nov 1 2005, 11:56 G}{OST Цитата(&-rey @ Nov 1 2005, 15:56)Err... Nov 1 2005, 12:02  &-rey Цитата(G}{OST @ Nov 1 2005, 15:02)Цитата(... Nov 1 2005, 12:19   G}{OST так в хидере пропиши как extern и включи хидер в т... Nov 1 2005, 12:32    &-rey Цитата(G}{OST @ Nov 1 2005, 15:32)так в хидер... Nov 1 2005, 12:42     G}{OST Цитата(&-rey @ Nov 1 2005, 16:42)Цит... Nov 1 2005, 12:48      &-rey Цитата(G}{OST @ Nov 1 2005, 15:48)Цитата(... Nov 1 2005, 13:13       G}{OST Цитата(&-rey @ Nov 1 2005, 17:13)Лад... Nov 1 2005, 13:38        &-rey Цитата(G}{OST @ Nov 1 2005, 16:38)Цитата(... Nov 1 2005, 13:46         G}{OST Цитата(&-rey @ Nov 1 2005, 17:46)А о... Nov 1 2005, 13:56         TMX Вообще лучше делать так:
Код/*
Module name: gl... Nov 1 2005, 13:59 Old1 Цитата(&-rey @ Nov 1 2005, 14:56)И в... Nov 1 2005, 17:55 sergeeff Ну а не проще ли в файле global.c (и только в нем)... Nov 1 2005, 16:10 TMX Цитата(sergeeff @ Nov 1 2005, 19:10)Ну а не п... Nov 1 2005, 16:58 G}{OST Цитата(&-rey @ Nov 2 2005, 16:01)В С... Nov 2 2005, 12:23  &-rey Цитата(G}{OST @ Nov 2 2005, 15:23)Цитата(... Nov 2 2005, 13:06   G}{OST Цитата(&-rey @ Nov 2 2005, 17:06)Спа... Nov 2 2005, 13:14 Old1 Цитата(&-rey @ Nov 2 2005, 15:01)В С... Nov 2 2005, 18:25  Old1 Цитата(Old1 @ Nov 2 2005, 21:25)Цитата(&... Nov 3 2005, 16:19   AVR У меня IAR EW AVR 4.11A евалуэйшн версия.
В списке... Nov 3 2005, 22:24    IgorKossak Цитата(AVR @ Nov 4 2005, 01:24)У меня IAR EW ... Nov 4 2005, 07:37     m16 Цитата(IgorKossak @ Nov 4 2005, 11:37)В настр... Nov 4 2005, 08:08      IgorKossak Цитата(m16 @ Nov 4 2005, 11:08)Прошерстил сай... Nov 4 2005, 08:15     AVR Цитата(IgorKossak @ Nov 4 2005, 11:37)Цитата(... Nov 4 2005, 14:38      m16 Цитата(AVR @ Nov 4 2005, 18:38)Спасибо за под... Nov 4 2005, 14:49       AVR Цитата(m16 @ Nov 4 2005, 18:49) я тоже по... Nov 11 2005, 22:14        IgorKossak Цитата(AVR @ Nov 12 2005, 00:14) У меня з... Nov 15 2005, 08:18 Vic1 2 &-rey
ЦитатаДа я читал про работу swich но у... Nov 2 2005, 13:23 Vic1 2 &-rey, далее..
Цитатая думаю можно анализиро... Nov 2 2005, 13:36 &-rey да Вы правы, только сначала лучьше написать, а пот... Nov 2 2005, 14:03 forever failure Ага: а под версию 3.20D есть такая заплатка ?
а то... Nov 16 2005, 13:55 IgorKossak Цитата(forever failure @ Nov 16 2005, 15... Nov 16 2005, 16:46 forever failure че не так ?
// main.cpp:
#include <complex... Nov 16 2005, 18:27 Old1 Цитата(forever failure @ Nov 16 2005, 21... Nov 16 2005, 18:48  forever failure Цитата(Old1 @ Nov 16 2005, 23:48) В чем п... Nov 16 2005, 18:56   vet Цитата(forever failure @ Nov 16 2005, 21... Nov 17 2005, 07:02   Old1 Цитата(forever failure @ Nov 16 2005, 21... Nov 17 2005, 07:33 forever failure Проблема ещё раз :
#include <complex>
int ... Nov 17 2005, 14:46 Old1 Цитатапри компиляции получаю сообщения о 25 ошибка... Nov 17 2005, 21:01  forever failure с 64 bit double помогло. Однако Большой Бубен, одн... Nov 18 2005, 14:10   dxp Цитата(forever failure @ Nov 18 2005, 20... Nov 18 2005, 14:40 vet forever failure
IAR 4.10B. Создал С++ проект, вста... Nov 18 2005, 12:39
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|