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

 
 
 
Reply to this topicStart new topic
> Директивы
Rash
сообщение Oct 14 2005, 12:20
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



Всем здрасте. Помогите начинающему в IAR в очеридной раз. Для чего в файлах *.h ставят:
Код
#ifndef имя_файла_H
#define имя_файла_H
..........
#endif

Какие полезные директивы есть. Кто, что применял и для чего?
Go to the top of the page
 
+Quote Post
makc
сообщение Oct 14 2005, 12:24
Сообщение #2


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



Учите язык С и, в частности, его препроцессор.

Описанные Вами директивы заголовочных файлов помогают избежать ситуации, когда один и тот же заголовочный файл будет включен дважды, что может привести к проблемам компиляции (конфликтам).


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
Rash
сообщение Oct 14 2005, 12:36
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



ну и на том спасибо
Go to the top of the page
 
+Quote Post
G}{OST
сообщение Oct 14 2005, 13:09
Сообщение #4


Участник
*

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



Цитата(Rash @ Oct 14 2005, 16:20)
Какие полезные директивы есть. Кто, что применял и для чего?
*

К примеру...
Если вставить в текст программы на С вот такой код, то в скомпилированном бинарнике появятся строки со датой, временем, и версией компиляции:
Код
const char __flash __date__[] = __DATE__;
const char __flash __time__[] = __TIME__;
const char __flash __version__[] = "v0.1";

Для С++ это выглядит так:
Код
#pragma diag_suppress=Pe177
__root __flash const char __date__[] = __DATE__;
__root __flash const char __time__[] = __TIME__;
__root __flash const char __version__[] = "v0.1";
#pragma diag_default=Pe177


--------------------
cul8r!
* #ru_embedded - эмбеддерский чат
Go to the top of the page
 
+Quote Post
G}{OST
сообщение Oct 14 2005, 13:26
Сообщение #5


Участник
*

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



Цитата(Rash @ Oct 14 2005, 16:20)
Какие полезные директивы есть. Кто, что применял и для чего?
*

А вот ещё. Чтобы не путаться, какой тип какую имеет размерность, всегда включаю такие дефайны:
Код
#define U8   unsigned char
#define U16  unsigned short
#define U32  unsigned long
#define S8   signed char
#define S16  signed short
#define S32  signed long


Или вот. Чтобы не перепутать что куда подключено - обзываю выводы портов, чтобы потом обращаться по осмысленному имени:
Код
#define    SS                PORTB_PORTB0   // 0
#define    DIR_SS            DDRB_DDB0      // 1

// обращение напрямую к порту:
SS = 0;
DIR_SS = 1;


--------------------
cul8r!
* #ru_embedded - эмбеддерский чат
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Oct 18 2005, 06:43
Сообщение #6


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(G}{OST @ Oct 14 2005, 16:26)
А вот ещё. Чтобы не путаться, какой тип какую имеет размерность, всегда включаю такие дефайны:
Код
#define U8   unsigned char
#define U16  unsigned short
#define U32  unsigned long
#define S8   signed char
#define S16  signed short
#define S32  signed long

*


Подобные вещи лучше через typedef делать.
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Oct 18 2005, 08:48
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



#warning "xxx"
#error "xxx" - выбросит соответствующие мессаги.
Пользительно для проверки, что компилятор проходил это место в исходнике
(файл включен в проект, строка не закрыта #ifdef, итд)


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
BVU
сообщение Oct 18 2005, 09:20
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(IgorKossak @ Oct 18 2005, 10:43)
Цитата(G}{OST @ Oct 14 2005, 16:26)
А вот ещё. Чтобы не путаться, какой тип какую имеет размерность, всегда включаю такие дефайны:
Код
#define U8   unsigned char
#define U16  unsigned short
#define U32  unsigned long
#define S8   signed char
#define S16  signed short
#define S32  signed long

*


Подобные вещи лучше через typedef делать.
*


Абсолютно верно! Когда производиться определение типа в основном когда на 'C++' софт пишеться. Но по большому счету это как правило хорошего тона, т.к. в момент трансляции в любом случае идет подстановка базового варианта типа.


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 14th July 2025 - 02:25
Рейтинг@Mail.ru


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