реклама на сайте
подробности

 
 
> вопросы по IAR, В поисках идеального компилятора
andrvisht
сообщение Oct 27 2005, 08:58
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 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, остальные как-то формируются ?? но как так и не понял. sad.gif
В 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

И опять ничего не понял sad.gif
что за ## что он делает ? В книгах по С ничего такого не нашел...
Кстати этот макрос работает на IAR и ICC, CV ругается.

Может кто обьяснить что это за ## и как они работают ....
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
andrvisht
сообщение Nov 2 2005, 12:01
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



2 TMX
Цитата
компилятор вообще-то компилирует каждый файл по отдельности, ничего не зная о том,какие макросы уже определены в других файлах.
Поэтому и ругается.
В файле main.c (и только в нем) должно быть определение до включения файла globals.h

Да - да - да, я как раз вчера вечером это выяснил методом проб и ошибок.
Цитата
Насчет файла globals.h в учебниках пишут прямо противоположное, я в своем стандарте оформления кода требую его использовать в виде, описанном выше.

#ifndef пишется, чтобы не было переопределения макросов в случае вложения заголовочных файлов.

вот теперь начинаю понимать, а то как-то смысл #ifndef терялся.

2 Old1
Цитата
и должно заработать  rolleyes.gif

Да спасибо, заработало. Осталось понять в чем мой просчет.
Попробую 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 поможет ??
Go to the top of the page
 
+Quote Post
Виктория
сообщение Nov 2 2005, 12:35
Сообщение #3


инженер
****

Группа: Свой
Сообщений: 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. Вместо функций - любые операторы Си.

Согласитесь, что читабельность программы при такой конструкции значительно улучшается.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- &-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
||- - &-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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st June 2025 - 18:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01446 секунд с 7
ELECTRONIX ©2004-2016