Dyrektywa kompilatora #IF

Pytania, kody i porady dotyczące nie tylko Bascom.
ODPOWIEDZ
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Dyrektywa kompilatora #IF

Post autor: pimowo » 28 lut 2018, 22:50

Mam prośbę o ogarnięcie dyrektywy #IF
Chodzi o to, że kiedyś wypatrzyłem na Bartka stronie tą super sztuczkę i do tej pory nie miałem z tym problemów, ale... ale wymyśliłem sobie, że chciałbym zmieniać konfigurację poprzez UART i tu pojawił się problem :(
Jak to powinno wyglądać? Coś takiego nie chce działać
  1. $regfile = "m328pdef.dat"
  2. $crystal = 8000000
  3.  
  4. Dim Cyfra As Byte : Cyfra = 1
  5.  
  6. Konfiguracja = Cyfra
  7. 'Const Konfiguracja = 1
  8.  
  9. #if Konfiguracja = 1
  10.   Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.0 , Rs = Portc.0
  11.   Config Lcd = 20x4                                         'nowy typ zapisu
  12. #endif
  13.  
  14. #if Konfiguracja = 2
  15.   Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.0 , Rs = Portb.1
  16.   Config Lcd = 16x2                                         'nowy typ zapisu
  17. #endif
  18.  
  19. #if Konfiguracja = 3
  20.   Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
  21.   Config Lcd = 16x2                                         'nowy typ zapisu
  22. #endif
  23.  
  24. Do : Loop : End
*kod jest przykładowy i pochodzi z Bartka strony, a dokładnie leży TUTAJ.
Chodzi o to jak poprawnie podstawić zmienną "Cyfra" do "Konfiguracja"?

Z góry dziękuję za pomoc.
Pozdrawiam.
Piotrek
Awatar użytkownika
Pikczu
Posty: 390
Rejestracja: 17 sie 2015, 13:46
Lokalizacja: Dublin, Ireland
Kontakt:

Re: Dyrektywa kompilatora #IF

Post autor: Pikczu » 28 lut 2018, 23:03

Pimowo to jest brane pod uwagę tylko podczas kompilacji a nie podczas działania programu wiec w locie #if nie działa
https://wiki.mcselec.com/bavr/*IF_ELSE_ELSEIF_ENDIF
Awatar użytkownika
niveasoft
Posty: 1219
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Dyrektywa kompilatora #IF

Post autor: niveasoft » 28 lut 2018, 23:15

#IF jest sprawdzane tylko przy kompilacji. Czyli jeśli dany #IF zależy od tego czy jakaś Constans ma wartość 3 a ona podczas kompilacji ma inną wartość to tego #IF`a w ogóle potem w programie nie będzie i nie można go włączyć.

W Helpie jest temat "CONFIG" (samo wyrażenie CONFIG) i tam jest tabelka które z konfiguracji są "Reusable" czyli że możesz je w kodzie umiescić wielokrotnie.
Config Lcd do takich niestety nie należy. Piny odpowiedzialne za LCD są na stałe wkompilowane w program. Widać to kiedy naciśnie się w Bascom Ctrl+W. Tam piny LCD są wśród stałych.
  1. _LCDDBRS                         1572
  2. _LCDDBRS_PIN                     7
  3. _LCDDBRSDIR                      1568
  4. _LCDDBE                          1572
  5. _LCDDBE_PIN                      6
  6. _LCDDBEDIR                       1568
  7. _LCDDB4                          1572
  8. _LCDDB4_PIN                      5
  9. _LCDDB4DIR                       1568
  10. _LCDDB5                          1572
  11. _LCDDB5_PIN                      4
  12. _LCDDB5DIR                       1568
  13. _LCDDB6                          1572
  14. _LCDDB6_PIN                      3
  15. _LCDDB6DIR                       1568
  16. _LCDDB7                          1572
  17. _LCDDB7_PIN                      2
  18. _LCDDB7DIR                       1568
Niemniej dla Baudrate taki numer jak konfiguracja przez UART lub w locie jest możliwa. Wystarczy napisać "BAUD=XXXX" i od tego momentu mieć inną prędkość. U siebie robię to teraz tak że mam Sub "Set_baud" z wewnątrz umieszczonym Select Case i wybieram BAUD=XXXX.

Czyli niektóre rzeczy da się przeskoczyć manipulujac rejestrami.

To co Ty chcesz osiągnąć wymaga :otwarcia biblioteki lcd i przepisania jej tak by przyjmowała adresy zmiennymi a nie stałymi, potem zapisania jej pod jakąś inną nazwą i zaincludowanie takiej biblioteki. To wymusi użycie Twojej biblioteki a nie domyślnej.
Wtedy taki myk, i owszem, byłby możliwy ;)
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: Dyrektywa kompilatora #IF

Post autor: pimowo » 01 mar 2018, 0:14

Dzięki Panowie za odpowiedzi.
Jakaś pomroczność jasna mnie dopadła... coś sobie ubzduralem w głowie i wyszły jakieś głupoty. Dzięki Wam mnie teraz olsniło, że głupoty gadam :D
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: Dyrektywa kompilatora #IF

Post autor: pimowo » 17 mar 2018, 5:38

Panowie, podsuńcie jakąś myśl :D
O co tak naprawdę chodzi... chodzi mi o to, że chcę używać czterech wyświetlaczy zamiennie-jeden w danej chwili.
Wyświetlacz nie musi być zmieniany w locie, a przy starcie AVR. Czyli ustawiam sobie zmienną "Wyswietlacz =1" reset AVR i ten wyświetlacz działa :)

Moje wyświetlacze działają na bibliotekach:
bl_Lcd_i2c.lib
glcdSSD1306-I2C.lib
Awatar użytkownika
niveasoft
Posty: 1219
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Dyrektywa kompilatora #IF

Post autor: niveasoft » 17 mar 2018, 9:03

Szkoda czasu. Weź kup jeden wyświetlacz więcej. Zamontuj na stałe i gotowe. Oszczędzisz sobie i innym czasu.

To się pewnie da zrobić łącząc biblioteki.
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: Dyrektywa kompilatora #IF

Post autor: pimowo » 18 mar 2018, 17:29

Krótko mówiąc nie da się tego zrobić...
Podpytuję ponieważ nic nie mogłem takiego znaleźć, a miałem cichą nadzieję, że po prostu ja nie mogę wpaść na jakiś genialny pomysł.

Buduję moduł gdzie każdy będzie mógł sobie wstawić jeden z wyświetlaczy: LCD 16x2 + PCF8574, LCD 20x4 + PCF8574, OLED 0.96" 128x64 lub OLED 0.91" 128x32
Z wyborem języka: polski, angielski, niemiecki sobie poradziłem. Bartek, chyba nie mogę czytać Twojej strony bo za dużo ciekawych rzeczy opisujesz :D
Awatar użytkownika
niveasoft
Posty: 1219
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Dyrektywa kompilatora #IF

Post autor: niveasoft » 18 mar 2018, 20:10

Możesz ludziom skompilować i udostępnić trzy wersje HEXów i każdy sobie załaduje ten który mu pasuje.
Awatar użytkownika
pimowo
Posty: 392
Rejestracja: 28 maja 2016, 10:07

Re: Dyrektywa kompilatora #IF

Post autor: pimowo » 18 mar 2018, 20:15

Tak właśnie zrobię.
Chciałem być sprytniejszy, ale nie wyszło :D
ODPOWIEDZ