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

 
 
 
Reply to this topicStart new topic
> Задание имени процедуры.
Allregia
сообщение Apr 21 2013, 17:38
Сообщение #1


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

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Безотносительно к типу МК, тут скорее воспрос по Си:

Допустим в программе используется внешнее прерывание (с ножки).
И хочется написать более-менее универсально, тогда задаем в .h файле:

Код
#define INT_PORT GPIOA
#define INT_PIN  GPIO_Pin_0
#define INT_SOURECE EXTI_PinSource0
#define INT_LINE EXTI_Line0
#define INT_IRQ  EXTI0_IRQn;
[/code

И далее настраиваем пин, EXTI, NVIC. с этим все понятно, зазотели поменять ножку - поменяли в хидере, не трогая программу.
Но ведь надо еще прописать обработтчик прерывания:
[code]
void EXTI0_IRQHandler(void)
{


И тут кроме как править программу (например - поменять с EXTI0 на EXTI1), я уж не знаю как. Или есть способ?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 21 2013, 20:49
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



А что мешает это сделать через тот же #define?
Go to the top of the page
 
+Quote Post
Allregia
сообщение Apr 21 2013, 21:20
Сообщение #3


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

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(aaarrr @ Apr 21 2013, 22:49) *
А что мешает это сделать через тот же #define?


Хм.
Честно говоря, не думал что все так просто sm.gif, и что такой вариант сработает.
В ведь действительно - это тупая подстановка, препроцессор просто заменяет одно слово другим, и всё.
Сенькс.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 22 2013, 08:06
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Allregia @ Apr 22 2013, 00:20) *
В ведь действительно - это тупая подстановка, препроцессор просто заменяет одно слово другим, и всё.
Можно еще заставить его при помощи # делать EXTI0_IRQn и EXTI0_IRQHandler из EXTI0.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Allregia
сообщение Apr 23 2013, 14:20
Сообщение #5


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

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



А вот с # и ## я пока не очень понял.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 29 2013, 03:12
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



#define concatABC_(a, b, c) a##b##c
#define concatABC(a, b, c) concatABC_(a, b, c)

#define nEXT_dev 0 //хотим - эту ножку расскоментарим
//#define nEXT_dev 1 //.....а хотим - эту

void concatABC(EXTI, nEXT_dev, _IRQHandler)(void)
{
...

Почитайте про макросы в си.
Go to the top of the page
 
+Quote Post

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

 


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


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