Der folgende Code aus einem Bootloader wird für eine 128KB ATMega 1284P
mit einer Warnung übersetzt, die ich nicht verstehe:
1 | // erase entire chip before first page is written
|
2 |
|
3 | if (erased == false)
|
4 | {
|
5 | uint8_t *erase;
|
6 |
|
7 | for (erase = NULL; erase < (uint8_t *)BOOTSTART; erase += SPM_PAGESIZE)
|
8 | {
|
9 | boot_page_erase((uint32_t)erase);
|
10 |
|
11 | boot_spm_busy_wait();
|
12 |
|
13 | boot_rww_enable();
|
14 | }
|
15 |
|
16 | erased = true;
|
17 | }
|
../main.c:458: warning: cast from pointer to integer of different size
(das ist die Zeile mit boot_page_erase((uint32_t)erase)
Wenn man den Cast testweise durch boot_page_erase((uint16_t)erase)
ersetzt (was keinen Sinn ergibt, da man in 16 bit keine Byte-Adressen in
der Gegend von 128KB spezifizieren kann), ist die Warnung weg.
Jetzt frage ich micht: Was ist hier sizeof(uint8_t *)? Kann ich mir das
vom Compiler irgendwie ausgeben lassen?