avr: more code sharing.

This commit is contained in:
Martin Preuss
2026-04-14 23:45:32 +02:00
parent d6e731b34e
commit ab7e28a9d5
6 changed files with 306 additions and 459 deletions

View File

@@ -488,14 +488,9 @@ appNetworkResetState_setRangeEnd:
; @clobbers X ; @clobbers X
appNetworkGetAddressFromEeprom: appNetworkGetAddressFromEeprom:
push r15 ldi xl, LOW(EEPROM_OFFS_COMADDR)
in r15, SREG ldi xh, HIGH(EEPROM_OFFS_COMADDR)
cli rcall Eeprom_ReadByte ; r16=addr (none)
ldi xl, LOW(EEPROM_OFFS_COMADDR)
ldi xh, HIGH(EEPROM_OFFS_COMADDR)
bigcall Utils_ReadEepromIncr ; (R16)
out SREG, r15
pop r15
ret ret
; @end ; @end

226
avr/common/random.asm Normal file
View File

@@ -0,0 +1,226 @@
; ***************************************************************************
; copyright : (C) 2026 by Martin Preuss
; email : martin@libchipcard.de
;
; ***************************************************************************
; * This file is part of the project "AqHome". *
; * Please see toplevel file COPYING of that project for license details. *
; ***************************************************************************
#ifndef AQH_AVR_DEVICES_COMMON_RANDOM_ASM
#define AQH_AVR_DEVICES_COMMON_RANDOM_ASM
; ***************************************************************************
; data
.dseg
randSeed: .byte 2
; ***************************************************************************
; code
.cseg
; ---------------------------------------------------------------------------
; @routine RAND_PseudoRandom
;
; Generate a pseudo random number.
; (see https://www.avrfreaks.net/s/topic/a5C3l000000URNfEAO/t119045?comment=P-1021038)
;
; @return R16 8 bit pseudo random number
; @clobbers R16, R17, R18, R19
RAND_PseudoRandom:
lds r16, randSeed
lds r17, randSeed+1
ldi r18, 0x9c
ldi r19, 8
RAND_PseudoRandom_step:
lsr r17
ror r16
brcc RAND_PseudoRandom_nomask
eor r17, r18
RAND_PseudoRandom_nomask:
dec r19
brne RAND_PseudoRandom_step
sts randSeed, r16
sts randSeed+1, r17
ret ; result in r16
; @end
; ---------------------------------------------------------------------------
; @routine RAND_SetupSeed @global
;
; @clobbers R16, R18, R19, R20, R21, R24, R25, X, Z
RAND_SetupSeed:
rcall RAND_ReadSeed ; R18:R19=seed (r16, X)
mov r20, r18
mov r21, r19
; default initial seed
ldi r18, 0xe1
ldi r19, 0xac
; work stored seed into it
mov r16, r20
rcall randWorkByteIntoSeed ; (none)
mov r16, r21
rcall randWorkByteIntoSeed ; (none)
; work date string into seed
ldi zl, LOW(utilsDateString*2)
ldi zh, HIGH(utilsDateString*2)
rcall randWorkProgStringIntoSeed ; (R16, Z)
; work sram content into seed
rcall randWorkSramContentIntoSeed ; (R16, R24, R25, X)
; store seed in EEPROM
rcall RAND_WriteSeed ; (R16, R17, X)
ret
; @end
; ---------------------------------------------------------------------------
; @routine RAND_ReadSeed
;
; Read seed from EEPROM.
;
; @return R18:R19 seed read
; @clobbers R16, X
RAND_ReadSeed:
ldi xl, LOW(EEPROM_OFFS_SEED)
ldi xh, HIGH(EEPROM_OFFS_SEED)
rcall Eeprom_ReadByte ; (none)
brcc RAND_ReadSeed_ret
mov r18, r16
adiw xh:xl, 1
rcall Eeprom_ReadByte ; (none)
mov r19, r16
RAND_ReadSeed_ret:
ret
; @end
; ---------------------------------------------------------------------------
; @routine RAND_WriteSeed
;
; Write seed from EEPROM.
;
; @param R18:R19 seed
; @clobbers R16, R17, X
RAND_WriteSeed:
ldi xl, LOW(EEPROM_OFFS_SEED)
ldi xh, HIGH(EEPROM_OFFS_SEED)
mov r16, r18
rcall Eeprom_WriteByteIfChanged ; (r17)
brcc RAND_WriteSeed_ret
adiw xh:xl, 1
mov r16, r19
rcall Eeprom_WriteByteIfChanged ; (r17)
RAND_WriteSeed_ret:
ret
; @end
; ---------------------------------------------------------------------------
; @routine RAND_UpdateSeedInEeprom
;
; @clobbers R18, R19, (R16, R17, X)
RAND_UpdateSeedInEeprom:
lds r18, randSeed
lds r19, randSeed+1
rcall RAND_WriteSeed ; (R16, R17, X)
ret
; @end
; ---------------------------------------------------------------------------
; @routine randWorkProgStringIntoSeed
;
; @param Z pointer to string to work into seed
; @param R18 low byte of current seed
; @param R19 high byte of current seed
; @return R18 low byte of updated seed
; @return R19 high byte of updated seed
; @clobbers R16, Z
randWorkProgStringIntoSeed:
lpm r16, Z+
tst r16
breq randWorkProgStringIntoSeed_done
rcall randWorkByteIntoSeed
rjmp randWorkProgStringIntoSeed
randWorkProgStringIntoSeed_done:
ret
; @end
; ---------------------------------------------------------------------------
; @routine randWorkSramContentIntoSeed
; IN:
; @param Z pointer to string to work into seed
; @param R18 low byte of current seed
; @param R19 high byte of current seed
; @return R18 low byte of updated seed
; @return R19 high byte of updated seed
; @clobbers R16, R24, R25, X
randWorkSramContentIntoSeed:
ldi xl, LOW(SRAM_START)
ldi xh, HIGH(SRAM_START)
ldi r24, LOW(RAMEND-SRAM_START)
ldi r25, HIGH(RAMEND-SRAM_START)
randWorkSramContentIntoSeed_loop:
ld r16, X+
rcall randWorkByteIntoSeed
sbiw r25:r24, 1
brne randWorkSramContentIntoSeed_loop
ret
; @end
; ---------------------------------------------------------------------------
; @routine randWorkByteIntoSeed
;
; @param R16 byte to work into the seed
; @param R18 low byte of current seed
; @param R19 high byte of current seed
; @return R18 low byte of updated seed
; @return R19 high byte of updated seed
randWorkByteIntoSeed:
eor r18, r16
clc
sbrc r19, 7
sec ; only executed if bit 7 is set in r19
rol r18
rol r19
ret
; @end
#endif

View File

@@ -1,5 +1,5 @@
; *************************************************************************** ; ***************************************************************************
; copyright : (C) 2023 by Martin Preuss ; copyright : (C) 2026 by Martin Preuss
; email : martin@libchipcard.de ; email : martin@libchipcard.de
; ;
; *************************************************************************** ; ***************************************************************************
@@ -7,19 +7,8 @@
; * Please see toplevel file COPYING of that project for license details. * ; * Please see toplevel file COPYING of that project for license details. *
; *************************************************************************** ; ***************************************************************************
#ifndef AQH_AVR_COMMON_UTILS_ASM
#define AQH_AVR_COMMON_UTILS_ASM
; ***************************************************************************
; data
.dseg
utilsDataBegin:
utilsSeed: .byte 2
utilsDataEnd:
@@ -37,153 +26,6 @@ utilsDateString: .db "%YEAR%-%MONTH%-%DAY%-%HOUR%:%MINUTE%", 0, 0
; ---------------------------------------------------------------------------
; Utils_Init
;
; IN:
; OUT:
; - CFLAG: set if okay, clear on error
; USED: R16, R17, R18, R19, X, (R20, R21, R24, R25, X, Z)
Utils_Init:
rcall utilsSetupSeed ; (R16, R18, R19, R20, R21, R24, R25, X, Z)
; preset SRAM data area
ldi xh, HIGH(utilsDataBegin)
ldi xl, LOW(utilsDataBegin)
clr r16
ldi r17, (utilsDataEnd-utilsDataBegin)
rcall Utils_FillSram ; (r17, x)
sts utilsSeed, r18
sts utilsSeed+1, r19
sec
ret
; ---------------------------------------------------------------------------
; setup seed
;
; IN:
; OUT:
; REGS: R16, R18, R19, R20, R21, R24, R25, X, Z
utilsSetupSeed:
rcall Utils_ReadSeed
mov r20, r18
mov r21, r19
; default initial seed
ldi r18, 0xe1
ldi r19, 0xac
; work stored seed into it
mov r16, r20
rcall utilsWorkByteIntoSeed
mov r16, r21
rcall utilsWorkByteIntoSeed
; work date string into seed
ldi zl, LOW(utilsDateString*2)
ldi zh, HIGH(utilsDateString*2)
rcall utilsWorkProgStringIntoSeed ; (R16, Z)
; work sram content into seed
rcall utilsWorkSramContentIntoSeed ; (R16, R24, R25, X)
; store seed in EEPROM
rcall Utils_WriteSeed ; (R16, R17, X)
ret
; ---------------------------------------------------------------------------
; utilsWorkProgStringIntoSeed
;
; IN:
; - Z : pointer to string to work into seed
; - R18: low byte of current seed
; - R19: high byte of current seed
; OUT:
; - R18: low byte of updated seed
; - R19: high byte of updated seed
; USED: R16, Z
utilsWorkProgStringIntoSeed:
lpm r16, Z+
tst r16
breq utilsWorkProgStringIntoSeed_done
rcall utilsWorkByteIntoSeed
rjmp utilsWorkProgStringIntoSeed
utilsWorkProgStringIntoSeed_done:
ret
; ---------------------------------------------------------------------------
; utilsWorkSramContentIntoSeed
; IN:
; - Z : pointer to string to work into seed
; - R18: low byte of current seed
; - R19: high byte of current seed
; OUT:
; - R18: low byte of updated seed
; - R19: high byte of updated seed
; USED: R16, R24, R25, X
utilsWorkSramContentIntoSeed:
ldi xl, LOW(SRAM_START)
ldi xh, HIGH(SRAM_START)
ldi r24, LOW(RAMEND-SRAM_START)
ldi r25, HIGH(RAMEND-SRAM_START)
utilsWorkSramContentIntoSeed_loop:
ld r16, X+
rcall utilsWorkByteIntoSeed
sbiw r25:r24, 1
brne utilsWorkSramContentIntoSeed_loop
ret
; ---------------------------------------------------------------------------
; utilsWorkByteIntoSeed
;
; IN:
; - R16: byte to work into the seed
; - R18: low byte of current seed
; - R19: high byte of current seed
; OUT:
; - R18: low byte of updated seed
; - R19: high byte of updated seed
; USED:
utilsWorkByteIntoSeed:
eor r18, r16
clc
sbrc r19, 7
sec ; only executed if bit 7 is set in r19
rol r18
rol r19
ret
; ---------------------------------------------------------------------------
; Utils_Fini
;
; IN:
; OUT:
; - CFLAG: set if okay, clear on error
; USED: R16, R17, R18, X, Y
Utils_Fini:
sec
ret
; --------------------------------------------------------------------------- ; ---------------------------------------------------------------------------
; @routine Utils_FillSram @global ; @routine Utils_FillSram @global
; ;
@@ -252,310 +94,92 @@ Utils_IncrementCounter16:
st x, r19 st x, r19
st -x, r18 st -x, r18
ret ret
; @end
; ---------------------------------------------------------------------------
; Utils_ReadEepromIncr
;
; Read a byte from EEPROM (see example in ATtiny24/44/84 manual p.19).
;
; IN:
; - X: EEPROM Address to read from
; OUT:
; - R16: byte read
; - X: EEPROM Address incremented
; MODIFIED REGISTERS: R16
Utils_ReadEepromIncr:
.ifdef EEPE
sbic EECR, EEPE ; wait for previous write to complete (if any)
.else
sbic EECR, EEWE ; wait for previous write to complete (if any)
.endif
rjmp Utils_ReadEepromIncr
out EEARH, xh ; set EEPROM address
out EEARL, xl
sbi EECR, EERE ; start EEPROM read by writing EERE
in r16, EEDR ; read data from data register
adiw xh:xl, 1
ret
; --------------------------------------------------------------------------- ; ---------------------------------------------------------------------------
; Utils_WriteEepromIncr ; @routine Utils_ReadUid
;
; Write a byte to EEPROM (see example in ATtiny24/44/84 manual p.18).
;
; IN:
; - R16: byte to write
; - X: EEPROM Address to write to
; OUT:
; - X: EEPROM Address incremented
; MODIFIED REGISTERS: R17
Utils_WriteEepromIncr:
.ifdef EEPE
sbic EECR, EEPE ; wait for previous write to complete (if any)
.else
sbic EECR, EEWE ; wait for previous write to complete (if any)
.endif
rjmp Utils_WriteEepromIncr
.ifdef EEPM1
ldi r17, (0<<EEPM1) | (0<<EEPM0) ; set programming mode
.endif
out EECR, r17
out EEARH, xh ; set EEPROM address
out EEARL, xl
out EEDR, r16 ; write data to data register
.ifdef EEMPE
sbi EECR, EEMPE ; write logical one to EEMPE
.else
sbi EECR, EEMWE ; write logical one to EEMWE
.endif
.ifdef EEPE
sbi EECR, EEPE ; start EEPROM write by setting EEPE
.else
sbi EECR, EEWE ; start EEPROM write by setting EEWE
.endif
adiw xh:xl, 1
ret
; ---------------------------------------------------------------------------
; Utils_PseudoRandom
;
; Generate a pseudo random number.
; (see https://www.avrfreaks.net/s/topic/a5C3l000000URNfEAO/t119045?comment=P-1021038)
;
; IN:
; OUT:
; - R16: 8 bit pseudo random number
; REGS: R16, R17, R18, R19
Utils_PseudoRandom:
lds r16, utilsSeed
lds r17, utilsSeed+1
ldi r18, 0x9c
ldi r19, 8
Utils_PseudoRandom_step:
lsr r17
ror r16
brcc Utils_PseudoRandom_nomask
eor r17, r18
Utils_PseudoRandom_nomask:
dec r19
brne Utils_PseudoRandom_step
sts utilsSeed, r16
sts utilsSeed+1, r17
ret ; result in r16
; ---------------------------------------------------------------------------
; Update seed in EEPROM.
;
; IN:
; OUT:
; REGS: R18, R19, (R16, R17, X)
Utils_UpdateSeedInEeprom:
lds r18, utilsSeed
lds r19, utilsSeed+1
rcall Utils_WriteSeed ; (R16, R17, X)
ret
; ---------------------------------------------------------------------------
; Utils_ReadUid
;
; Read UID from EEPROM. ; Read UID from EEPROM.
; ;
; IN: ; @return r21:r20:r19:r18 UID
; - nothing ; @clobbers R16, X
; OUT:
; - R18:R19:R20:R21: UID
; REGS: R16, X
Utils_ReadUid: Utils_ReadUid:
push r15 ldi xl, LOW(EEPROM_OFFS_UUID)
in r15, SREG ldi xh, HIGH(EEPROM_OFFS_UUID)
cli rcall Eeprom_ReadByte ; r16=byte read (none)
ldi xl, LOW(EEPROM_OFFS_UUID) brcc Utils_ReadUid_ret
ldi xh, HIGH(EEPROM_OFFS_UUID) mov r18, r16
rcall Utils_ReadEepromIncr ; (R16) adiw xh:xl, 1
mov r18, r16
rcall Utils_ReadEepromIncr ; (R16) rcall Eeprom_ReadByte ; r16=byte read (none)
mov r19, r16 brcc Utils_ReadUid_ret
rcall Utils_ReadEepromIncr ; (R16) mov r19, r16
mov r20, r16 adiw xh:xl, 1
rcall Utils_ReadEepromIncr ; (R16)
mov r21, r16 rcall Eeprom_ReadByte ; r16=byte read (none)
out SREG, r15 brcc Utils_ReadUid_ret
pop r15 mov r20, r16
adiw xh:xl, 1
rcall Eeprom_ReadByte ; r16=byte read (none)
brcc Utils_ReadUid_ret
mov r21, r16
Utils_ReadUid_ret:
ret ret
; @end
; --------------------------------------------------------------------------- ; ---------------------------------------------------------------------------
; Utils_SetupUid ; @routine Utils_SetupUid @global
; ;
; Reads UID from EEPROM. If not set generate a new one and store it in EEPROM. ; Reads UID from EEPROM. If not set generate a new one and store it in EEPROM.
; ;
; IN: ; @return CFLAG set if new generated, cleared if there already was one.
; OUT: ; @clobbers R16, R18, R19, R20, R21, X (R17)
; - CFLAG set if new generated, cleared if there already was one.
; REGS: R15, R16, R18, R19, R20, R21, X (R17)
Utils_SetupUid: Utils_SetupUid:
in r15, SREG rcall Utils_ReadUid ; (R16, X)
cli cp r18, r19 ; all the same?
rcall Utils_ReadUid ; (R16, X) brne Utils_SetupUid_uidOkay ; different, jmp
cp r18, r19 ; all the same?
brne Utils_SetupUid_uidOkay ; different, jmp
cp r18, r20 cp r18, r20
brne Utils_SetupUid_uidOkay ; different, jmp brne Utils_SetupUid_uidOkay ; different, jmp
cp r18, r21 cp r18, r21
brne Utils_SetupUid_uidOkay ; different, jmp brne Utils_SetupUid_uidOkay ; different, jmp
ldi xl, LOW(EEPROM_OFFS_UUID) ; all the same, generate new uid
ldi xl, LOW(EEPROM_OFFS_UUID) ; all the same, generate new uid
ldi xh, HIGH(EEPROM_OFFS_UUID) ldi xh, HIGH(EEPROM_OFFS_UUID)
rcall Utils_PseudoRandom ; byte 0 (R16, R17, R18, R19) rcall RAND_PseudoRandom ; byte 0 (R16, R17, R18, R19)
inc r16 inc r16
rcall Utils_WriteEepromIncr ; (R17) rcall Eeprom_WriteByteIfChanged ; (r17)
rcall Utils_PseudoRandom ; byte 1 brcc Utils_SetupUid_ret
rcall Utils_WriteEepromIncr ; (R17) adiw xh:xl, 1
rcall Utils_PseudoRandom ; byte 2
rcall Utils_WriteEepromIncr ; (R17) rcall RAND_PseudoRandom ; byte 1
rcall Utils_PseudoRandom ; byte 3 rcall Eeprom_WriteByteIfChanged ; (r17)
rcall Utils_WriteEepromIncr ; (R17) brcc Utils_SetupUid_ret
adiw xh:xl, 1
rcall RAND_PseudoRandom ; byte 2
rcall Eeprom_WriteByteIfChanged ; (r17)
brcc Utils_SetupUid_ret
adiw xh:xl, 1
rcall RAND_PseudoRandom ; byte 3
rcall Eeprom_WriteByteIfChanged ; (r17)
brcc Utils_SetupUid_ret
rcall Utils_UpdateSeedInEeprom ; (R16, R17, R18, R19, X) rcall RAND_UpdateSeedInEeprom ; (R16, R17, R18, R19, X)
Utils_SetupUid_uidOkay: Utils_SetupUid_uidOkay:
out SREG, r15
sec
ret
; ---------------------------------------------------------------------------
; Utils_ReadSeed
;
; Read seed from EEPROM.
;
; IN:
; OUT:
; - R18:R19: seed read
; REGS: R16, X
Utils_ReadSeed:
in r15, SREG
push r15
cli
ldi xl, LOW(EEPROM_OFFS_SEED)
ldi xh, HIGH(EEPROM_OFFS_SEED)
rcall Utils_ReadEepromIncr ; (R16)
mov r18, r16
rcall Utils_ReadEepromIncr ; (R16)
mov r19, r16
pop r15
out SREG, r15
ret
; ---------------------------------------------------------------------------
; Utils_WriteSeed
;
; Read seed from EEPROM.
;
; IN:
; - R18:R19: seed to write
; OUT:
; REGS: R16, X, (R17)
Utils_WriteSeed:
in r15, SREG
push r15
cli
ldi xl, LOW(EEPROM_OFFS_SEED)
ldi xh, HIGH(EEPROM_OFFS_SEED)
mov r16, r18
rcall Utils_WriteEepromIncr ; (R17)
mov r16, r19
rcall Utils_WriteEepromIncr ; (R17)
pop r15
out SREG, r15
ret
; ---------------------------------------------------------------------------
; Utils_TableJump
;
; Jump to a routine using a jump table.
; IN:
; - r16: position to jump to
; - r17: number of entries in table
; - Z : pointer to table
; OUT:
; - depends on called function
; REGS: depends on called function
Utils_TableJump:
cp r16, r17
brcc Utils_TableJump_ret
clr r17
add zl, r16
adc zh, r17
lsl zl ; shift z left for LPM instruction
rol zh
lpm r16, z+ ; read pointer from table
lpm r17, z
tst r16
brne Utils_TableJump_jmp
tst r17
brne Utils_TableJump_jmp
Utils_TableJump_ret:
ret
Utils_TableJump_jmp:
push r16 ; jump via stack
push r17
ret
; ---------------------------------------------------------------------------
; Find position of a given code in a table.
;
; IN:
; - r16: value to translate
; - r17: number of entries
; - Z : pointer to table
; OUT:
; - CFLAG: set if translation found, cleared otherwise
; - r16: translated value
Utils_FindBytePositionInTable:
lsl zl ; shift z left for LPM instruction
rol zh
clr r19
Utils_TranslateByTable_loop:
lpm r18, z+
cp r18, r16
breq Utils_TranslateByTable_found
inc r19
dec r17
brne Utils_TranslateByTable_loop
clc
ret
Utils_TranslateByTable_found:
mov r16, r19
sec sec
Utils_SetupUid_ret:
ret ret
; @end
@@ -564,3 +188,8 @@ Utils_TranslateByTable_found:
UTILS_END: UTILS_END:
.equ MODULE_SIZE_UTILS = UTILS_END-UTILS_BEGIN .equ MODULE_SIZE_UTILS = UTILS_END-UTILS_BEGIN
#endif

View File

@@ -20,6 +20,9 @@
.include "devices/all/data.asm" .include "devices/all/data.asm"
.include "common/utils.asm" .include "common/utils.asm"
.include "common/random.asm"
.include "common/eeprom-r.asm"
.include "common/eeprom-w.asm"
.include "common/utils_initial_wait.asm" .include "common/utils_initial_wait.asm"
.include "common/utils_wait_fixed.asm" .include "common/utils_wait_fixed.asm"
.include "common/utils_copy_from_flash.asm" .include "common/utils_copy_from_flash.asm"

View File

@@ -34,7 +34,7 @@ main:
bigcall systemSetSpeed bigcall systemSetSpeed
bigcall systemInitHardware bigcall systemInitHardware
bigcall Utils_Init bigcall RAND_SetupSeed
bigcall Utils_SetupUid bigcall Utils_SetupUid
bigcall modulesInit bigcall modulesInit
bigcall appsInit bigcall appsInit
@@ -43,16 +43,6 @@ main:
bigcall onSystemStart bigcall onSystemStart
#ifdef MODULES_LED
ldi xl, LOW(blinkPattern) ; debug: set blink pattern
ldi xh, HIGH(blinkPattern)
ldi zl, LOW(ledA3Flash)
ldi zh, HIGH(ledA3Flash)
ldi yl, LOW(ledA3Sram)
ldi yh, HIGH(ledA3Sram)
rcall Led_SetPattern
#endif
main_loop: main_loop:
bigcall systemSleep ; system-dependant bigcall systemSleep ; system-dependant

View File

@@ -28,6 +28,7 @@
#endif #endif
#ifdef MODULES_NETWORK #ifdef MODULES_NETWORK
MODULE_BEGIN_NETWORK:
.include "common/crc8.asm" .include "common/crc8.asm"
.include "common/m_fixedbuffers.asm" .include "common/m_fixedbuffers.asm"
.include "common/m_ringbuffer_y.asm" .include "common/m_ringbuffer_y.asm"
@@ -44,6 +45,9 @@
.include "modules/network/msg/value-r.asm" .include "modules/network/msg/value-r.asm"
.include "modules/network/msg/addr-r.asm" .include "modules/network/msg/addr-r.asm"
.include "modules/network/msg/addr-w.asm" .include "modules/network/msg/addr-w.asm"
MODULE_END_NETWORK:
.equ MODULE_SIZE_NETWORK = MODULE_END_NETWORK-MODULE_BEGIN_NETWORK
#endif #endif
#ifdef MODULES_UART_BITBANG #ifdef MODULES_UART_BITBANG
@@ -89,8 +93,11 @@
#endif #endif
#ifdef MODULES_COM2W #ifdef MODULES_COM2W
MODULE_BEGIN_COM2W:
.include "modules/com2w/defs.asm" .include "modules/com2w/defs.asm"
.include "modules/com2w/com2w.asm" .include "modules/com2w/com2w.asm"
MODULE_END_COM2W:
.equ MODULE_SIZE_COM2W = MODULE_END_COM2W-MODULE_BEGIN_COM2W
#endif #endif
#ifdef MODULES_COM2W0 #ifdef MODULES_COM2W0
@@ -139,9 +146,6 @@
#ifdef MODULES_LED_SIMPLE #ifdef MODULES_LED_SIMPLE
.include "modules/led_simple/main.asm" .include "modules/led_simple/main.asm"
#ifdef MODULES_NETWORK
.include "modules/led_simple/recv.asm"
#endif
#endif #endif
#ifdef MODULES_LED_SIGNAL #ifdef MODULES_LED_SIGNAL