Автор |
Съобщение |
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4616 Местоположение: Новата земя на племето Мутум'ба
|
Малко помощ за С препроцесор?
Значи, това е нещо което би трябвало да имам някъде по старите кодове обаче не успявам да го намеря, а пък това дето сега го написах не минава компилацията... Трябва ми някакво макро за референция към регистрите на пиковете. Примерно, имам LED на A4 и да речем че макрото се казва REG Ако му дам REG("TRIS", LED) препроцесорът ще генерира TRISAbits.TRISA4 Ако му дам REG("LAT", LED) ще генерира LATAbits.LATA4 ... и т.н. Някой има ли нещо готово да сподели? Мерси
_________________ 'просто' е технически синоним на 'красиво'
|
Чет Юли 28, 2022 11:07 am |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4714
|
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 |
|
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4616 Местоположение: Новата земя на племето Мутум'ба
|
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 |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4714
|
Re: Малко помощ за С препроцесор?
директно не експандава define стойности с горното може да дефинираш регистър за "периферия" LED, BTN, PINx
_________________ main[-1u]={1};
|
Чет Юли 28, 2022 12:04 pm |
|
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4616 Местоположение: Новата земя на племето Мутум'ба
|
Re: Малко помощ за С препроцесор?
Абе имаше някакъв начин да се постигне това дето ми трябва...
В момента с тоя сорс имам много портове на които трябва да пипам много регистри, така че да дефинирам всеки един поотделно с всичките му регистри не е ефективно
_________________ 'просто' е технически синоним на 'красиво'
|
Чет Юли 28, 2022 12:45 pm |
|
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4616 Местоположение: Новата земя на племето Мутум'ба
|
Re: Малко помощ за С препроцесор?
А, намерих го... // 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 |
|
|
slav4o.com
Ранг: Форумен бог
Регистриран на: Нед Яну 01, 2012 7:04 pm Мнения: 2586 Местоположение: Велико Търново / София
|
Re: Малко помощ за С препроцесор?
|
Чет Юли 28, 2022 2:53 pm |
|
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4616 Местоположение: Новата земя на племето Мутум'ба
|
Re: Малко помощ за С препроцесор?
То това е ясно, обаче когато имаш голямо количество портове и на всеки трябва да пипнеш я TRIS, я LAT, я WPU, я нещо друго, и хедъра ти става като роман
_________________ 'просто' е технически синоним на 'красиво'
|
Чет Юли 28, 2022 4:15 pm |
|
|