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

|
И все равно никак  Перейдем на конкретный пример имеем в main.c Код #include "Clear.h" #include "main.h"
__task main( void ) { while(1) { a = 6; Clear(); } } В main.h Код #include <io8535.h> #include <avr_macros.h> #include <inavr.h> в Clear.c Код #include "main.h" #include "Clear.h"
void Clear(void) { a = 0; } и в Clear.h Код #ifndef _Clear_h #define _Clear_h void Clear(void); #endif
#ifdef _Clear_h char a; #else extern char a; #endif так вот ругается : Error[e27]: Entry "a" in module Clear ( C:\Clear\Debug\Obj\Clear.r90 ) redefined in module main ( C:\ Clear\Debug\Obj\main.r90 )
|
|
|
|
|
Nov 1 2005, 12:02
|

Участник

Группа: Новичок
Сообщений: 48
Регистрация: 6-05-05
Пользователь №: 4 784

|
Цитата(&-rey @ Nov 1 2005, 15:56) Error[e27]: Entry "a" in module Clear ( C:\Clear\Debug\Obj\Clear.r90 ) redefined in module main ( C:\ Clear\Debug\Obj\main.r90 ) ИМХО, переменные запихивать в хидеры - это бред.
--------------------
|
|
|
|
|
Nov 1 2005, 12:19
|
Местный
  
Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064

|
Цитата(G}{OST @ Nov 1 2005, 15:02) Цитата(&-rey @ Nov 1 2005, 15:56) Error[e27]: Entry "a" in module Clear ( C:\Clear\Debug\Obj\Clear.r90 ) redefined in module main ( C:\ Clear\Debug\Obj\main.r90 ) ИМХО, переменные запихивать в хидеры - это бред. возможно, я пока начинающий в С. перенес в Clear.c и имеем такой вариант: Error[Pe020]: identifier "a" is undefined C:\Clear\main.c 8
|
|
|
|
|
Nov 1 2005, 12:42
|
Местный
  
Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064

|
Цитата(G}{OST @ Nov 1 2005, 15:32) так в хидере пропиши как extern и включи хидер в тот модуль ну да, если отдельно то все работает, но вопрос то именно как это сделать через #ifndef Просто так намного удобнее, и не надо при использовании своих библиотек вспоминать какие переменные как определять. Все автоматом.
|
|
|
|
|
Nov 1 2005, 12:48
|

Участник

Группа: Новичок
Сообщений: 48
Регистрация: 6-05-05
Пользователь №: 4 784

|
Цитата(&-rey @ Nov 1 2005, 16:42) Цитата(G}{OST @ Nov 1 2005, 15:32) так в хидере пропиши как extern и включи хидер в тот модуль ну да, если отдельно то все работает, но вопрос то именно как это сделать через #ifndef Просто так намного удобнее, и не надо при использовании своих библиотек вспоминать какие переменные как определять. Все автоматом.  Лично я делаю проекты так, чтобы использование внешних переменных было только в исключительных случаях. Иначе глюков потом не оберёшься.
--------------------
|
|
|
|
|
Nov 1 2005, 13:13
|
Местный
  
Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064

|
Цитата(G}{OST @ Nov 1 2005, 15:48) Цитата(&-rey @ Nov 1 2005, 16:42) Цитата(G}{OST @ Nov 1 2005, 15:32) так в хидере пропиши как extern и включи хидер в тот модуль ну да, если отдельно то все работает, но вопрос то именно как это сделать через #ifndef Просто так намного удобнее, и не надо при использовании своих библиотек вспоминать какие переменные как определять. Все автоматом.  Лично я делаю проекты так, чтобы использование внешних переменных было только в исключительных случаях. Иначе глюков потом не оберёшься. Ладно, тогда такой вопрос. Обработчик клавиатуры имеет два регистра Keyb_flag и Old_Keyb_flag. Макрос сравнивает код клавиши со значением в Keyb_flag и Old_Keyb_flag для принятия решения об нажатии или отжатии. Как в таком случае должны быть объявлены Keyb_flag и Old_Keyb_flag чтобы макрос мог вызываться из любой другой подпрограммы. ? Я думаю что для этого они должны быть глобальными, хотя может и нет, как быть в этом варианте ???
|
|
|
|
|
Nov 1 2005, 13:38
|

Участник

Группа: Новичок
Сообщений: 48
Регистрация: 6-05-05
Пользователь №: 4 784

|
Цитата(&-rey @ Nov 1 2005, 17:13) Ладно, тогда такой вопрос. Обработчик клавиатуры имеет два регистра Keyb_flag и Old_Keyb_flag. Макрос сравнивает код клавиши со значением в Keyb_flag и Old_Keyb_flag для принятия решения об нажатии или отжатии. Как в таком случае должны быть объявлены Keyb_flag и Old_Keyb_flag чтобы макрос мог вызываться из любой другой подпрограммы. ? Я думаю что для этого они должны быть глобальными, хотя может и нет, как быть в этом варианте ??? Если позволяют ресурсы, лучше сделать процедуру, а не макрос. Иначе, если ресурсов в обрез, сделать внешними эти переменные. Объявить процедуру или переменные можно в хидере, который включается куда надо.
--------------------
|
|
|
|
|
Nov 1 2005, 13:46
|
Местный
  
Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064

|
Цитата(G}{OST @ Nov 1 2005, 16:38) Цитата(&-rey @ Nov 1 2005, 17:13) Ладно, тогда такой вопрос. Обработчик клавиатуры имеет два регистра Keyb_flag и Old_Keyb_flag. Макрос сравнивает код клавиши со значением в Keyb_flag и Old_Keyb_flag для принятия решения об нажатии или отжатии. Как в таком случае должны быть объявлены Keyb_flag и Old_Keyb_flag чтобы макрос мог вызываться из любой другой подпрограммы. ? Я думаю что для этого они должны быть глобальными, хотя может и нет, как быть в этом варианте ??? Если позволяют ресурсы, лучше сделать процедуру, а не макрос. Иначе, если ресурсов в обрез, сделать внешними эти переменные. Объявить процедуру или переменные можно в хидере, который включается куда надо. Да дело даже не в ресурсах. Например как параметр макроса я задаю код клавиши и указатель на функцию. В этом случае макрос - самое оно. ReleaseKey(Key,*pFunction) А обявлять отдельно можно, но я хотел бы как предлагалось IgorKossak, а то еще надо лишний файлик делать, специально для main.c.  А хочется именно как описано но вот не работает, а почему непонятно. Создается впечатление что #ifdef вообще никак компилятором не обрабатывается. что у меня не так написано ?
|
|
|
|
Сообщений в этой теме
&-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         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
|
|
|