mirror of
https://github.com/logicog/RTLPlayground.git
synced 2026-10-29 17:54:14 +08:00
crc16: banked wrapper for cross-bank callers
The lookup tables live in BANK1, so the routine switches the code bank to reach them with movc and never switches it back. That is the contract the __naked declaration already implied: same bank or common segment only. The name now says it. crc16_bank1 is the routine unchanged. crc16 becomes a __banked wrapper in BANK1, so a caller from another bank has its own bank put back by __sdcc_banked_ret. The two existing call sites take the direct path and pay nothing.
This commit is contained in:
1 parent
dd09be9dd0
commit
53f12a42c5
3 files changed
+12
-6
No files matched your search
+3
-3
@@ -89,7 +89,7 @@ __xdata uint32_t last_session_use;
|
||||
|
||||
extern __xdata uint16_t crc_value;
|
||||
__xdata uint16_t crc_final;
|
||||
void crc16(__xdata uint8_t *v) __naked;
|
||||
void crc16_bank1(__xdata uint8_t *v) __naked;
|
||||
|
||||
|
||||
inline uint8_t is_separator(uint8_t c)
|
||||
@@ -518,7 +518,7 @@ uint8_t stream_upload(void)
|
||||
if (upload_settings.p[upload_settings.bptr] == boundary[bindex]) {
|
||||
if (!bindex)
|
||||
crc_final = crc_value;
|
||||
crc16(upload_settings.p + upload_settings.bptr);
|
||||
crc16_bank1(upload_settings.p + upload_settings.bptr);
|
||||
upload_settings.bptr++;
|
||||
bindex++;
|
||||
} else {
|
||||
@@ -527,7 +527,7 @@ uint8_t stream_upload(void)
|
||||
write_len += bindex;
|
||||
bindex = 0;
|
||||
}
|
||||
crc16(upload_settings.p + upload_settings.bptr);
|
||||
crc16_bank1(upload_settings.p + upload_settings.bptr);
|
||||
flash_buf[write_len++] = upload_settings.p[upload_settings.bptr++];
|
||||
if (write_len >= FLASH_PAGE_SIZE) {
|
||||
dbg_string("len: "); dbg_short(write_len); dbg_char(' ');
|
||||
|
||||
Reference in new issue
Block a user