I use a macro to pack small variables into EEDATA
It has been great for me, saving lots of EData & Cdata space.
This example "packs" the following into 4 bytes (of EEPROM):
- variable index within RAM array (handles BYE & Word variables)
- whether Byte or Word
- displayed format: signed, leading & trailing digits
- divisor (eg Amp is stored as mA)
- unit Estr string address
- decimal place may be UNIT (string) character (eg 5V6)
- row & column (or ignore this codingl)
Eg.
Macro=
;define Macros to eliminate "gosub" text etcs. Include variable name into macro, so do NOT need FSR.
$define XmSp(X, m, S, p) $eval (((X & 0x01) << 7) + ((m & 0x03) << 5) + ((S & 0x01) << 4) + (p & 0x07)) 'Macro to COMBINE for Byte_1 28-Aug-2011
$define XmSBp(X, m, S, B, p) $eval (((X & 0x01) << 7) + ((m & 0x03) << 5) + ((S & 0x01) << 4) + ((B & 0x01) << 3) + (p & 0x07)) 'Macro to COMBINE for Byte_1 (var=BYTE)
$define rcUd(r, c, U, d) $eval ((((r - 1) & 0x01) << 7) + (((c - 1) & 0x0F) << 3) + ((U & 0x01) << 2) + (d & 0x03)) 'Macro to COMBINE for Byte_2
Usage example:
'EStr data for Unit character/s
UE2_Ah EData "Ah",0 'AmpHour
UE2_V EData "V",0 'Volt
UE2_A EData "A",0 'Amp
'lookup table for variable value (as index to input_mV array), displayed format and Unit (Estr) (suits XWIU style)
;F_example edata XmSp(1,m,S,p), rcUd(r,c,U,d), index, uea ;Flags: Sign, Unit_as_DP; m=divisor, p=digit, d=decimal, row, column, index [0..n WORD], uea=unit_Estr_addr
F_output_mV EData XmSp(1,3,0,2), rcUd(2, 5,0,1), 1, UE2_V ;calculated output voltage mV (0 .. +31767) "pp.dV"
F_PSP_mA EData XmSp(1,3,0,2), rcUd(1,12,0,0), 2, UE2_A ;mains PSP Output current mA (0 .. +63535) "ppA"
Hope these ideas may help save space.
I have not shown my universal print routines and their macros here.
Alan.
Ranox on forum


Menu
Recent Articles


Using PDS with SPI GLCD based on ST7565R Controller
Graphic LCDs based on the ST7565 are cheaper then GLCDs with other controllers. SPI requires only four pins. If the circuit