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

 
 
> Почему не работает #define, проект в IAR
aspID
сообщение May 22 2012, 15:10
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 343
Регистрация: 24-01-07
Из: Новосибирск
Пользователь №: 24 714



Проект из нескольких файлов. В основном стоят директивы #define, во включаемых заголовочниках проверяется через #ifndef и не видится. Помогает только явное указание в свойствах проекта.

F_CPU объявлен через свойства проекта, используется в delay.h - не вызывает ошибок

USART_BUF_SIZE объявлен через директиву #define в main.c и используется в USART.h - вызывает ошибку.


Прикрепленные файлы
Прикрепленный файл  src.7z ( 2.8 килобайт ) Кол-во скачиваний: 19
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aspID
сообщение May 22 2012, 16:57
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 343
Регистрация: 24-01-07
Из: Новосибирск
Пользователь №: 24 714



Цитата(SSerge @ May 22 2012, 23:34) *
Я Вам сейчас одну умную вещь скажу, только не обижайтесь (с)
Вроде спрашиваю не для того, чтоб обижаться beer.gif
Цитата(_Артём_ @ May 22 2012, 23:45) *
Тоже вариант: его можно менять в зависимости от надобности и включить в USART.h - будет как конфиг проекта.

Вообще, предполагалось, что USART.h - самостоятельная и отдельная вещь, навроде библиотеки, которую в дальнейшем можно будет использовать в разных проектах БЕЗ внесения в нее правок и необходимости перекомпиляции blush.gif
Цитата(_Артём_ @ May 22 2012, 23:45) *
Просто чаще встречается такая конструкция(хотя кому-то может и наоборот):
Код
#ifndef usart_tx_rx_h__
#define usart_tx_rx_h__
...
#endif

Вообще,
Код
#pragma once

имеет то же назначение. Если компилятор без косяков этом месте biggrin.gif
Хотя, бывают и особо мнительные случаи использования
Код
#pragma once
#ifndef usart_tx_rx_h__
#define usart_tx_rx_h__
...
#endif

Цитата(_Артём_ @ May 22 2012, 23:45) *
А точно ошибку, а не warning? У меня откомпилировалось.

Так ворнинг руками и выдается. Просто сделана "затычка", которая если не видит - предупреждает и переобъявляет. И в данном контексте раз не видит - значит, ошибка. [Моя ошибка имеется в виду, только пока до конца не понимаю, в чем]
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 22 2012, 17:11
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Да,
Код
#pragma once
нынче можно сказать стала обыденностью и поддерживается всеми современными компиляторами.
А по поводу организации модулей могу предложить метод.
Каждый модуль состоит из 3 файлов:
module.c
module.h
module_conf.h - он включён инклюдом в module.h.

Таким макаром файлы
module.c
module.h
лежат в библиотеке в единственном экземпляре и подключаются ко всем проектам, в которых в них есть нужда, а
module_conf.h копируется в каждый проект и модифицируется под него (например задаёт размер фифо для уара и кол-во активных уартов ну и т.д. и т.п)


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post



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

 


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


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