Det är precis som Sodjan säger, det ändrar evalueringsordningen. I C är evalueringsordningen (på de inblandade operatorerna)
- Parenteser
- Unära operatorer, *[dereference] (typecast)
- Binära operatorer, +
Ett tips för att undvika det är att säkerställa att din FLASH_START alltid evalueras först där den används, så använd prenteser i FLASH_START-definitionen
Ett vanligt misstag som alla gör!
Sätt _alltid_ parenteser runt ett uttryck i en makrodefinition. Hver gang!
Nu i efterhand ser jag det tydligt i det nionde? inlägget.
Skäms lite för att jag inte läste inlägget ordentligt med en gång
Första frågan man ställer när man ser "__set_MSP(*(uint32_t*) FLASH_START);" är ju "vad innehåller FLASH_START ?" Och när man kollade definitionen av FLASH_START (vilket ju även fanns i tråden) så var resten ganska klart.
Och eftersom en parentes gjorde skillnad så kunde det inte vara ett vanligt numeriskt värde utan något slags uttryck där parentesen ändrade på uträkningen av hela uttrycket.