This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

C Preprocessor Problems (MDK Lite with STM32F1)

I was trying to create an equation that told me how many flash blocks (pages) it would take to store some data I need. This may take up exactly a certain number of Flash blocks (pages), but more likely there will be spillover and part of (well, all of) another flash block will be needed.  The C preprocessor gives wrong calculations for 2 of the three methods I have tried. All 3 methods work on Compiler Explorer and the freebie IDE that comes from the chip manufacturer.  Maybe there is something I am doing wrong, but so far it escapes me. Is this possibly a compiler bug?

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// From stm32f1xx_hal_flash_ex.h:
// #define FLASH_PAGE_SIZE 0x400U
// From my code: **Choose only one of the NUM_ITEMS**
#define ITEM_SIZE 224UL
#define NUM_ITEMS 64 // 64*224=14336 : 14 flash blocks
#define NUM_ITEMS 66 // 66*224=14784 : 14.44 --> 15 flash blocks
// ORIGINAL MACRO: DOES NOT WORK. ALWAYS GIVES 14
#define BLOCKS_FULL ((NUM_ITEMS*ITEM_SIZE)/FLASH_PAGE_SIZE)
#define REMAINDER ((NUM_ITEMS*ITEM_SIZE)%FLASH_PAGE_SIZE)
#if REMAINDER == 0
#define NUM_BLOCKS1 BLOCKS_FULL
#else
#define NUM_BLOCKS1 (BLOCKS_FULL+1) // Partial extra block
#endif
// ALTERNATE MACRO 1: OK (14 or 15)
#define NUM_BLOCKS2 (((NUM_ITEMS*ITEM_SIZE) + (FLASH_PAGE_SIZE-1)) / FLASH_PAGE_SIZE)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

0