logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Bascom] Deklaracje zmiennych

wicy 03 Lip 2009 12:58 3042 2
REKLAMA
  • #1 6734184
    wicy
    Poziom 22  
    Nigdy tego nie robiłem z rozrzutności, ale teraz chcę zoptymalizować troche swój program.
    Deklaruje zmienne będące flagami determinującymi różne warunki w jakiejśc tam nieskończonej pętli programu. Flagi są ustawiane przez procedury, funkcje lub przerwania.
    
    Dim flaga1 as Byte
    Dim flaga2 as Byte
    ...
    Dim flaga8 as Byte
    

    Zajmuje mi to 8 bajtów. Czy zmiana typu flag na BIT "upakuje" wszystkie flagi w jeden bajt? Czy zależy to też od miejsca deklaracji w tym sensie, że wymieszane deklaracje
    
    Dim A as Byte
    Dim Flaga1 as Bit
    Dim B as Byte
    

    zarezerwują na flagę bit, czy jednak cały bajt?
    Jeśli upakowanie ośmiu flag w jeden bajt ma sens to, czy prawidłowe będa deklaracje zmiennej i odwołań do flag?
    
    Dim Flagi as Byte
    Flaga1 As Flagi.0
    Flaga2 As Flagi.1
    Flaga3.... itd
    
  • REKLAMA
  • #2 6735518
    Jacek Rutkowski
    Poziom 28  
    Witam,
    źle zapisujesz według mnie, powinno być:
    
    Dim F1 As Bit
    Dim F2 As Bit
    Dim F3 As Bit
    Dim F4 As Bit
    Dim F5 As Bit
    Dim Flagi As Word
    Dim F6 As Bit
    Dim F7 As Bit
    Dim F8 As Bit
    Dim F9 As Bit
    Dim F10 As Bit
    Dim F11 As Bit
    Dim F12 As Bit
    

    Bascom AVR 1.11.9.0 łączy zmienne typu bit w całe bajty w pamięci lokując je w cały bajt nawet dokładając pomiędzy nie zmienne innego typu.

    F1 Bit 0101 257
    F2 Bit 0101 257
    F3 Bit 0101 257
    F4 Bit 0101 257
    F5 Bit 0101 257
    FLAGI Word 0102 258
    F6 Bit 0101 257
    F7 Bit 0101 257
    F8 Bit 0101 257
    F9 Bit 0104 260
    F10 Bit 0104 260
    F11 Bit 0104 260
    F12 Bit 0104 260
  • #3 6736819
    wicy
    Poziom 22  
    Masz rację.

    Oczywiście popełniłem wcześniej bład.
    Zamiast
    
    Dim Flagi as Byte
    Flaga1 As Flagi.0
    Flaga2 As Flagi.1
    Flaga3.... itd 
    

    chodziło mi o
    
    Dim Flagi as Byte
    Flaga1 Alias Flagi.0
    Flaga2 Alias Flagi.1
    Flaga3.... itd 
    

    by łatwiej odwoływać się do poszczególnych flag będących bitami w bajcie flagi.

    Chyba jednak nie ma to znaczenia, bo kolejne wystąpienia deklaracji Bit Bascom scala do jednego bajta. Jakaś optymalizacja jednak działa :)
    Kombinowanie więc jest bezcelowe, chociaż waro pamiętać by zmienne "flagowe" przyjmujące wartości 0/1 deklarować jako Bit.
REKLAMA