Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Задание имени процедуры.
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Allregia
Безотносительно к типу МК, тут скорее воспрос по Си:

Допустим в программе используется внешнее прерывание (с ножки).
И хочется написать более-менее универсально, тогда задаем в .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), я уж не знаю как. Или есть способ?
aaarrr
А что мешает это сделать через тот же #define?
Allregia
Цитата(aaarrr @ Apr 21 2013, 22:49) *
А что мешает это сделать через тот же #define?


Хм.
Честно говоря, не думал что все так просто sm.gif, и что такой вариант сработает.
В ведь действительно - это тупая подстановка, препроцессор просто заменяет одно слово другим, и всё.
Сенькс.
Сергей Борщ
QUOTE (Allregia @ Apr 22 2013, 00:20) *
В ведь действительно - это тупая подстановка, препроцессор просто заменяет одно слово другим, и всё.
Можно еще заставить его при помощи # делать EXTI0_IRQn и EXTI0_IRQHandler из EXTI0.
Allregia
А вот с # и ## я пока не очень понял.
jcxz
#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)
{
...

Почитайте про макросы в си.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.