jak dotąd chyba najbliżej mojego problemu jest (rezsurmar) , otóż jeszcze inaczej nazwę to tak : macro ma spowodować umieszczenie w tablicy flash gotowej mapy bitowej "okna" zbudowanej na podstawie pełnego zestawu czcionek dostępnego tylko i wyłącznie preprocesorowi !!!.
A jeszcze inaczej, ze szczegółami- uprzedzam bardzo rozwlekle , używając "nędzy, nędz wszelakich== edytor macr w AVR Studio4" takie sobie dziwaczenie, skutecznie tworzy gotową ,zainicjowaną całkiem przyzwoitą structurę ze wskaźnikami ,zmiennymi bitowymi i co tam jeszcze.. // z góry informuję iż wiem, że te makra tylko liczą, gdybym wiedział jak "sortować i wyłuskiwać" to bym tego wątku nie założył, tylko "machnął" w AVRS4, skopiował i po problemie, jednak przesiadam się właśnie na super inteligenta == C , więc chce odpowiedź na postawione pytanie jakoś uzyskać ... oto dłużyzna - za to skrajnie prosta, która powinna wyjaśnić jakiej techniki szukam.
ps. poniżej
".equ" ==> robi tyle co #define
.macro NAZWA ==> to ciało makra , też niczego nie robi , opisuje tylko mechanizm co ma zrobić preprocesor gdy napotka dyrektywę .set a po niej wymienioną nazwę NAZWA. - "ciało kończy się dyrektywą .endmacro
.set NAZWA ==> tutaj właśnie podaję "argumenty" dla maszynki o nazwie NAZWA wymienionej po .macro , to to dopiero produkuje w PC-cie jakąś nową wartość dla identyfikatora NAZWA.
.db NAZWA , .dw NAZWA ==> tutaj owa wartość z PC-ta czytaj preprocesora jest formatowana na 1,2,4 bajty itd.
aby zatem utworzyć teraz tablicę z "moją mapą bitową" niekonieczne jednoelementową zamiast wypisywać żmudnie wszystkie elementy , piszę tylko nazwę macra , po tym podaję argumenty ( w tym przykładzie ) jest to text który chcę umieścić w oknie, a preprocesor podmienia mój tekst na ciąg bitowy zależny od zadeklarowanej czcionki !!!
Tak naprawdę to nie robi nic innego niż normalnie gdy nie ma macra, wtedy domyślnie podstawia pod litery mojego tekstu kody ascii , więc jak zmusić go aby zamiast kodów ascii podstawił wzory bitowe czcionek ????????????? oczywiście dużo dłuższe niż jednobajtowy kod ascii.
uwaga ";" robi za znak komentarza - do końca linii !!!
ps. trzykroć dołączałem plik , nie łyka , zatem wprost text poniżej: ;================================================================================================ ; numery bitów kolejnych atrybutów ekranu i pola ;================================================================================================ .equ Tryb_Pr = 0 ;nakaz obsł. klawiszy trybów pracy , STOP jest zawsze obsługiwany .equ Select_On = 1 ;nakaz obsługi <> bo Soft_Key jest do 10 szt .equ Mpk_On = 2 ;ten ekran jest multiplikowany /inna obsługa .equ Ekran_On = 3 ;usunąć po aktualizacji .equ Edit_On = 4 ;bit włączonej edycji .equ Pas_I = 5 ;numer bitu hasła I -to samo w HiByte dla potwierdzenia uprawnień .equ Pas_II = 6 ;numer bitu hasła II .equ Pas_III = 7 ;numer bitu hasła III
.equ Rec_Ekr_Tab = 18 ;długość rekordu opisu jednego ekranu ;================================================================================================= ; opis drzewa ekranów 30 rekordów po 18 bajtów dla każdego ekranu ;================================================================================================= ;stałe dla przeunięcia ZH:ZL w tablicy Ekr_Tab .equ E_Nr = 0; 0-wy bajt = numer własny ekranu .equ E_Atr = 1; 1-szy bajt = Atrybuty ekranu ;.equ E_PDom = 2; 2-gi bajt = Nr Domyślnego pola .equ E_K13 = 2; 2-gi bajt = Nr domyślnego komunikatu dla tego ekranu .equ E_SKmax = 3; 3-ci bajt = Liczba Pól/ F1 do F_SKmax dla SKey /Zwykłe Ekrany do 9,a Mpk do 255 .equ E_Var_L = 4; 4-ty bajt = low(adres zmiennej) .equ E_Var_H = 5; 5-ty bajt = high(adres zmiennej) .equ E_SKey = 6; 6-ty bajt = numer Soft_Key-text dla krotności =0 .equ E_ESC = 7; 7-ty bajt = numer ekranu po naciśnięciu ESC .equ E_F1 = 8; 8-ty bajt = numer ekranu po naciśnięciu F1 .equ E_F2 = 9; 9-ty bajt = numer ekranu po naciśnięciu F2 .equ E_F3 = 10; 10-ty bajt = numer ekranu po naciśnięciu F3 .equ E_F4 = 11; 11-ty bajt = numer ekranu po naciśnięciu F4 .equ E_F5 = 12; 12-ty bajt = numer ekranu po naciśnięciu F5 .equ E_F6 = 13; 13-ty bajt = numer ekranu po naciśnięciu F6 .equ E_F7 = 14; 14-ty bajt = numer ekranu po naciśnięciu F7 .equ E_F8 = 15; 15-ty bajt = numer ekranu po naciśnięciu F8 .equ E_F9 = 16; 16-ty bajt = numer ekranu po naciśnięciu F9 .equ E_F10 = 17; 17-ty bajt = numer ekranu po naciśnięciu F10
;============================================================================================ ;numery bitów dla bajtu atrybutów Pola ;============================================================================================ .equ Pole_On = 0 ;Pole Włączone/wyłączone .equ Litery_On = 1 ;nakaz obsługi liter dla wartości pola .equ Mode_On = 2 ;Mode_On nakaz obsługi klawiszy zmieniających tryby pracy .equ Edit_Prh = 3 ;zakaz Edycji pola ;.equ Edit_On = 4 ;bit włączonej edycji ;.equ Pas_I = 5 ;numer bitu hasła I -te bity maskują uprawnienia z ekranu ;.equ Pas_II = 6 ;numer bitu hasła II -ustawione na 1 nadpisują uprwnienia ekranu ;.equ Pas_III = 7 ;numer bitu hasła III -ustawione na 0 przejmują uprawnienia ekranu
.equ Rec_Pola_Tab = 24 ;długość rekordu pola ;=================================================================================================== ; Opis Pól ekranu w 22 bajtach po 36 rekordów dla każdego ekranu= 792 bajty na ekran ;=================================================================================================== .equ P_Atr = 0; 0-wy bajt = Atrybuty Pola .equ P_Lg = 1; 1-szy bajt = ilość znaków pola/długość oraz typ pola = hasło , data , czas itp .equ P_K13 = 2; 2-gi bajt = Numer komunikatu dla linii L_13 .equ P_SK = 3; 3-ci bajt = Nr.SK_Fld do podświetlenia na linii SK_Shf (Soft_Key's) .equ P_Prv = 4; 4-ty bajt = Pole poprzednie .equ P_Nxt = 5; 5-ty bajt = Pole następne .equ P_TxL = 6; 6-ty bajt = Low(Początek_Pola) na ekranie tekstowym .equ P_TxH = 7; 7-my bajt = high(Poczatek_Pola):wskaźnik do pamięci VideoRam .equ P_GrL = 8; 8-my bajt = low początek pola na ekranie graficznym .equ P_GrH = 9; 9-ty bajt = high początek pola na ekranie graficznym .equ P_VRL = 10;10-ty bajt = LoByte adresu zmiennej związanej z tym polem .equ P_VRH = 11;11-ty bajt = HiByte adresu zmiennej w RAM .equ P_VR3 = 12;12-ty bajt = Byte3 adresu zmiennej w RAM + Ukryj_znaki <<4 .equ P_VEL = 13;13-ty bajt = Lo Byte adresu w EEPROM .equ P_VEH = 14;14-ty bajt = Hi Byte adresu w EEPROM .equ P_VLL = 15;15-ty bajt = Lo Byte minimalnej wart. Zmiennej pola .equ P_VLH = 16;16-ty bajt = Hi Byte .equ P_VL3 = 17;17-ty bajt = Byte3 .equ P_VHL = 18;18-ty bajt = Lo Byte minimalnej wart. Zmiennej pola .equ P_VHH = 19;19-ty bajt = Hi Byte .equ P_VH3 = 20;20-ty bajt = Byte3 .equ P_VTp = 21;21-ty bajt = Typ Zmiennej dla tego pola .equ P_STp = 22;22-gi bajt = Typ Pola"String" lub wyświetlanego tekstu .equ P_Rez = 23;23-i bajt = rezerwa
.dseg ;.org 2000 DummyVar: .byte 10 ; pusta nieużywana zmienna Ram .eseg Dum_VarE: .byte 4 ; pusta nieużywana zmienna EEPROM na adresie 0x00-0x03 .cseg
.if Tablice_Ekr_Single ==1
JMP Start_Test
.endif
;===================================================================================================== ;Tablica Atrybutów Ekranu - te atr. są nadrzędne nad atr. Pól ;bit 7 6 5 4 3 2 1 0 ;0b 0 0 0 0 0 0 0 0 ; | | | | | | | | ; | | | | | | | - 1= obsługuj klawisze trybu pracy (01 do 07) ,nie dot.:F1 do F5,<>, STOP ,<,> ; | | | | | | --- 1= nakaz obsługi <> bo Soft_Key jest więcej niż 5 szt ; | | | | | ------1=;ten ekran jest multiplikowany /inna obsługa ; | | | | --------1= ust. na "0" ukrywa ekran przed wyświetleniem ; | | | ----------1= bit włączonej edycji ; | | ------------1= żądaj hasła dostępu poziom I /Użytkownik ; | --------------1= żądaj hasła dostępu poziom II /Nadzór Techn. ; ----------------1= żądaj hasła dostępu poziom III /Serwis PLC
;===================================================================================================== ;===============Set_Ekran macro obliczające dane dla tabeli Ekr_Tab ================================== ;===================================================================================================== .macro Set_Ekran .set Tryb = @1 *1 .set Funkc = @2 *2 + Tryb .set Extend = @3 *4 + Funkc .set F6_On = @4 *8 + Extend .set Ed_On = @5 *16 + F6_On .set Has_I = @6 *32 + Ed_On .set Has_II = @7 *64 + Has_I .set Has_III = @8 *128 + Has_II .set Ekran = ((Has_III << 8) +@0 ) .dw Ekran ;bajt 0 NrEkranu,bajt 1= Atrybuty .set Ekran = ((@9 << 8) + @11) .dw Ekran ; bajt2 Domyślne Pole i bajt 3= W-krotność ekranu .set Ekran = (@23) .dw Ekran ;bajt 4= low(zmienna),bajt 5=high(zmienna) .set Ekran =((@12<<8) + @10) .dw Ekran ;bajt 6=nr.Soft_Key,bajt 7 = Ekr. dla ESC .set Ekran =((@14<<8) + @13) .dw Ekran ;bajt 8= Ekr dla F1 i bajt 9= Ekr dla F2 .set Ekran =((@16<<8) + @15) .dw Ekran ;bajt 10= Ekr dla F3 i bajt 11= Ekr dla F4 .set Ekran =((@18<<8) + @17) .dw Ekran ;bajt 12= Ekr dla F5 i bajt 13= Ekr dla F6 .set Ekran =((@20<<8) + @19) .dw Ekran ;bajt 14= Ekr dla F7 i bajt 15= Ekr dla F8 .set Ekran =((@22<<8) + @21) .dw Ekran ;bajt 16= Ekr dla F9 i bajt 17= Ekr dla F10 .endmacro .cseg Ekr_Tab:;Atrybuty ekranów 540 bajtów = 30 ekranów x 18 bajtów na ekran ;=========Ekran_0 do Ekran_29 =========================== ; @0-Nr.Ekranu ; | @1-Tryb_Pr obsługuj klawisze trybu pracy (01 do 07) ; | | @2-Select_on to jest końcowy ekran w drzewie menu,przyciśnięcie F1-F5 zatwierdza wybór Ekranu do pracy ; | | | @3-Mpk_On ten ekran jest multiplikowany /inna obsługa ; | | | | @4-Ekran_On ;ust. na "0" ukrywa ekran przed wyświetleniem ; | | | | | @5-Edit_On ; | | | | | | @6-Pass1 ; | | | | | | | @7-Pass2 ; | | | | | | | | @8-Pass3 ; | | | | | | | | | @9-SKmax ,ilość opcji od F1-do Fmax ; | | | | | | | | | | @10-Linia Tx_SoftKey wymagana przez ten ekran ; | | | | | | | | | | | @11-Domyślny komunikat K13 ; | | | | | | | | | | | | @12-Ekr dla ESC ; | | | | | | | | | | | | | @13-Ekr dla F1 , wpis 77 oznacza koniec wyboru ekr. i przełączenie do wyboru pola do edycji ; | | | | | | | | | | | | | | @14-Ekr dla F2 ; | | | | | | | | | | | | | | | @15-Ekr dla F3 ; | | | | | | | | | | | | | | | | @16-Ekr dla F4 ; | | | | | | | | | | | | | | | | | @17- Ekr dla F5 ; | | | | | | | | | | | | | | | | | | @18 - Ekr dla F6 ; | | | | | | | | | | | | | | | | | | | @19 -Ekr dla F7 ; | | | | | | | | | | | | | | | | | | | | @20 -Ekr dla F8 ; | | | | | | | | | | | | | | | | | | | | | @21-Ekr dla F9 ; | | | | | | | | | | | | | | | | | | | | | | @22-Ekr dla F10 ; | | | | | | | | | | | | | | | | | | | | | | | @23-zmienna ekranu\ ; | | | | | | | | | | | | | | | | | | | | | | | | ; | | | | | | | | | | | | | | | | | | | | | | | | Set_Ekran 0 ,0,1,0,1,1,0,0,0, 4, 2,17, 0, 1, 2, 3, 4, 5, 5, 5, 5, 5, 0,0x0008 ;E_00-Powitalny Systemu Set_Ekran 1 ,1,1,0,1,1,0,0,0, 1, 4,18, 0, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7,(Lst_Hasla) ;E_01-Powit.Gr.Ustawienia Główne Set_Ekran 2 ,1,1,0,1,1,0,0,0, 3, 6,18, 0, 8, 9,10,11,11,11,11,11,11,11,0x0008 ;E_02-Powit.Gr.Praca Set_Ekran 3 ,1,1,0,1,1,0,0,0, 3, 8,18, 0,12,13,14,15,15,15,15,15,15,15,0x0008 ;E_03-Powit.Gr.Maszyna Set_Ekran 4 ,1,1,0,1,1,0,0,0, 2, 10,18, 0,16,17,18,18,18,18,18,18,18,18,0x0008 ;E_04-Powit.Gr.SERWIS Set_Ekran 5 ,1,1,0,1,0,0,0,0, 4, 12,18, 0,19,20,21,22,23,23,23,23,23,23,0x0008 ;E_05-Powit.Programowanie
|