From 8324edc5f7cd00f6abadebaf5ca58caca62e25a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20van=20Dorst?= Date: Sat, 18 Apr 2026 20:43:40 +0200 Subject: [PATCH] cmd_parser: Improve atoi_byte() and atoi_short(). Because no memory type is specified to the reference location, sdcc is using a helper function to access the location. But sdcc is using a register to tell the helper function which memory-type is used. This registers must also be preseved until all access to that location is done. --- cmd_parser.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/cmd_parser.c b/cmd_parser.c index c56105e..08f9659 100644 --- a/cmd_parser.c +++ b/cmd_parser.c @@ -169,30 +169,33 @@ uint8_t atoi_hex(uint8_t idx) } -uint8_t atoi_byte(register uint8_t *out, register uint8_t idx) +uint8_t atoi_byte(uint8_t __xdata *out, uint8_t idx) { - __xdata uint8_t err = 1; - *out = 0; + uint8_t err = 1; + uint8_t num = 0; while (isnumber(cmd_buffer[idx])) { err = 0; - *out = (*out * 10) + cmd_buffer[idx] - '0'; + num = (num * 10) + cmd_buffer[idx] - '0'; idx++; } + + *out = num; return err; } -uint8_t atoi_short(register uint16_t *vlan, register uint8_t idx) +uint8_t atoi_short(uint16_t __xdata *vlan, uint8_t idx) { - __xdata uint8_t err = 1; - *vlan = 0; + uint8_t err = 1; while (isnumber(cmd_buffer[idx])) { err = 0; - *vlan = (*vlan * 10) + cmd_buffer[idx] - '0'; + uint8_t val = cmd_buffer[idx] - '0'; + *vlan = (*vlan * 10) + val; idx++; } + return err; }