|
вопросы по 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 1 2005, 06:28
|
Местный
  
Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064

|
Всем Спасибо за ответы, но проблема bin формата для меня не столь важна, просто если бы было, хорошо, а раз нет, то и ладно. Жить можно. В любом случае на примерах посмотрел как пишут макросы. Вот снова копался в форумах и нашел такое: от haker fox Цитата(haker_fox @ Oct 21 2005, 02:26) #ifndef CONST_H //если константа не определена, то #define CONST_H //определить константу //Код хедера #endif Когда компилятор будет во-второй раз цеплять хедер, он его не подцепит, т.к. константа CONST_H уже определена (при первом проходе) Вместо CONST_H соответственно для другого файла - другое имя, например MAIN_H и от IgorKossak [quote=IgorKossak,Oct 24 2005, 10:55] Никто почему-то не расскажет ещё об одной технике обьявления/определения переменных в хедерах. Помимо охранных констант, исключающих повторное включение файла иногда бывает удобно в одном файле и определять и обьявлять переменные (экземпляры класса). Код #ifndef _xxx_DEF ... unsigned int My_Int_Var; ... #else ... extern unsigned int My_Int_Var; ... #endif Константа _xxx_DEF обьявляется только в одном файле *.c, где происходит выделение под них памяти. Все же остальные файлы включающие данный хедер, будут видеть только обьявления. При желании можно написать макрос, который сделает всё это автоматически. мне как раз понадобилась данная рекомендация и я в *.h поставил так Код #ifndef _*_h #define _*_h char a=5; #else extern char a; #endif но компилятор ругается и говорит что переменная a определяется в 2-х файлах Но вроде бы должно было быть определение как переменной a только в одном файле, а в другом где подключен *.h уже просто определение как extern. получается что "защитный код" не работает. Ложки не существует ? или я что-то не так сделал ???
|
|
|
|
|
Nov 1 2005, 09:56
|

Знающий
   
Группа: Свой
Сообщений: 697
Регистрация: 26-07-05
Из: Могилев
Пользователь №: 7 095

|
[quote=&-rey,Nov 1 2005, 09:28] [quote=IgorKossak,Oct 24 2005, 10:55] Никто почему-то не расскажет ещё об одной технике обьявления/определения переменных в хедерах. Помимо охранных констант, исключающих повторное включение файла иногда бывает удобно в одном файле и определять и обьявлять переменные (экземпляры класса). Код #ifndef _xxx_DEF ... unsigned int My_Int_Var; ... #else ... extern unsigned int My_Int_Var; ... #endif Константа _xxx_DEF обьявляется только в одном файле *.c, где происходит выделение под них памяти. Все же остальные файлы включающие данный хедер, будут видеть только обьявления. При желании можно написать макрос, который сделает всё это автоматически. мне как раз понадобилась данная рекомендация и я в *.h поставил так Код #ifndef _*_h #define _*_h char a=5; #else extern char a; #endif но компилятор ругается и говорит что переменная a определяется в 2-х файлах Но вроде бы должно было быть определение как переменной a только в одном файле, а в другом где подключен *.h уже просто определение как extern. получается что "защитный код" не работает. Ложки не существует ? или я что-то не так сделал ??? [/quote] Существует, смотри здесь, в самом конце... ЗЫ (на всякий случай подробно) в хидере нужно так сделать: Код #ifdef _*_h char a=5; #else extern char a; #endif а в модуле перед #include <хидер> вставить: Код #define _*_h .
|
|
|
|
Сообщений в этой теме
&-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 И все равно никак
Перейдем на конкретный пример
и... 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 &-rey 2 TMX
Цитатакомпилятор вообще-то компилирует кажды... Nov 2 2005, 12:01 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 Vic1 Цитата(&-rey @ Nov 2 2005, 16:01)Вот... Nov 2 2005, 12:35  &-rey Цитата(Vic1 @ Nov 2 2005, 15:35)Цитата(&... Nov 2 2005, 13:16 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
|
|
|