Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Малко помощ за С препроцесор?
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=18475
Страница 1 от 1

Автор:  Н'бабане Гт'муан'га [ Чет Юли 28, 2022 12:07 pm ]
Заглавие:  Малко помощ за С препроцесор?

Значи, това е нещо което би трябвало да имам някъде по старите кодове обаче не успявам да го намеря, а пък това дето сега го написах не минава компилацията... :?

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

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

Автор:  TheWizard [ Чет Юли 28, 2022 12:46 pm ]
Заглавие:  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;

Автор:  Н'бабане Гт'муан'га [ Чет Юли 28, 2022 1:00 pm ]
Заглавие:  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"

Автор:  TheWizard [ Чет Юли 28, 2022 1:04 pm ]
Заглавие:  Re: Малко помощ за С препроцесор?

директно не експандава define стойности
с горното може да дефинираш регистър за "периферия" LED, BTN, PINx

Автор:  Н'бабане Гт'муан'га [ Чет Юли 28, 2022 1:45 pm ]
Заглавие:  Re: Малко помощ за С препроцесор?

Абе имаше някакъв начин да се постигне това дето ми трябва...

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

Автор:  Н'бабане Гт'муан'га [ Чет Юли 28, 2022 2:28 pm ]
Заглавие:  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

Автор:  slav4o.com [ Чет Юли 28, 2022 3:53 pm ]
Заглавие:  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);
   }
}


Автор:  Н'бабане Гт'муан'га [ Чет Юли 28, 2022 5:15 pm ]
Заглавие:  Re: Малко помощ за С препроцесор?

slav4o.com написа:
Аз пиша примерно:


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

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/