Отговори на тема  [ 8 мнения ] 
Малко помощ за С препроцесор? 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 8:14 am
Мнения: 4579
Местоположение: Новата земя на племето Мутум'ба
Мнение Малко помощ за С препроцесор?
Значи, това е нещо което би трябвало да имам някъде по старите кодове обаче не успявам да го намеря, а пък това дето сега го написах не минава компилацията... :?

Трябва ми някакво макро за референция към регистрите на пиковете.
Примерно, имам LED на A4 и да речем че макрото се казва REG
Ако му дам REG("TRIS", LED) препроцесорът ще генерира TRISAbits.TRISA4
Ако му дам REG("LAT", LED) ще генерира LATAbits.LATA4
... и т.н.

Някой има ли нещо готово да сподели?
Мерси

_________________
'просто' е технически синоним на 'красиво'


Чет Юли 28, 2022 11:07 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: Малко помощ за С препроцесор?
#define REG(x, y) x ## Abits.x ## y

#define LED REG(LAT, A4)
#define LED_T REG(TRIS, A4)

LED_T = 0;
LED = 1 //0;

_________________
main[-1u]={1};


Чет Юли 28, 2022 11:46 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 8:14 am
Мнения: 4579
Местоположение: Новата земя на племето Мутум'ба
Мнение Re: Малко помощ за С препроцесор?
Мерси, близо е ама не е съвсем това...

#define LED A4
#define REG(R, n) R ## Abits.R ## n

REG(TRIS, LED) = 0;

води до грешка: no member named 'TRISLED' in 'TRISAbits_t'
T.e. LED не се е заменило с A4

Също така, това важи само за порт A. Ако имам LED на D7 няма да работи заради "Abits" константата, която в такъв случай би трябвало да се формира като "Dbits"

_________________
'просто' е технически синоним на 'красиво'


Чет Юли 28, 2022 12:00 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: Малко помощ за С препроцесор?
директно не експандава define стойности
с горното може да дефинираш регистър за "периферия" LED, BTN, PINx

_________________
main[-1u]={1};


Чет Юли 28, 2022 12:04 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 8:14 am
Мнения: 4579
Местоположение: Новата земя на племето Мутум'ба
Мнение Re: Малко помощ за С препроцесор?
Абе имаше някакъв начин да се постигне това дето ми трябва...

В момента с тоя сорс имам много портове на които трябва да пипам много регистри, така че да дефинирам всеки един поотделно с всичките му регистри не е ефективно

_________________
'просто' е технически синоним на 'красиво'


Чет Юли 28, 2022 12:45 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 8:14 am
Мнения: 4579
Местоположение: Новата земя на племето Мутум'ба
Мнение Re: Малко помощ за С препроцесор?
А, намерих го... :D

// register naming macros
#define REG__(R, n) R ## n // this one is internal - do not use!
#define REG(R, n) REG__(R, n) // usage example: REG(TRIS, LED) where LED is defined as B5 --> will compile as TRISB5

_________________
'просто' е технически синоним на 'красиво'


Чет Юли 28, 2022 1:28 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 7:04 pm
Мнения: 2582
Местоположение: Велико Търново / София
Мнение Re: Малко помощ за С препроцесор?
Аз пиша примерно:
Код:

#define OUTPUT 0
#define INPUT 1
#define ON 1
#define OFF 0

#define TRIS_LED TRISAbits.TRISA4
#define LED LATAbits.LATA4

void main (void)
{
   TRIS_LED = OUTPUT;
   LED = ON;
   while(1){
       LED = !LED;
       Delay(1000);
   }
}


_________________
https://github.com/slav4ocom/


Чет Юли 28, 2022 2:53 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 8:14 am
Мнения: 4579
Местоположение: Новата земя на племето Мутум'ба
Мнение Re: Малко помощ за С препроцесор?
slav4o.com написа:
Аз пиша примерно:


То това е ясно, обаче когато имаш голямо количество портове и на всеки трябва да пипнеш я TRIS, я LAT, я WPU, я нещо друго, и хедъра ти става като роман :)

_________________
'просто' е технически синоним на 'красиво'


Чет Юли 28, 2022 4:15 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 8 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни