주소 계산이 이상하게 됩니다 무슨 문제일까요?

chocokeki의 이미지

#define FLASH_SECTOR10_ADDR              0x140000       
#define FLASH_USER_ROM_START_ADDR        FLASH_SECTOR10_ADDR
#define FLA_DATA_BLK_SIZE                8192       
#define FLA_TMPL_PAGES                   16
 
uint32_t    addr;
 
for ( int i=1; i<FLA_TMPL_PAGES; i++ )
{
    addr = FLASH_USER_ROM_START_ADDR + ( i * FLA_DATA_BLK_SIZE );
    if ( flash_read( addr, (uint8_t*)&data, size ) == 0 ) {
        ....   

진짜 별거 없는 코드입니다
그냥 define 된 값들을 곱하고 더해서 대입하는게 땡인데요 문제가 있습니다

프로그램이 돌 때 간혹 addr 값이 가끔 덧셈 뒷 부분이 계산 안 된 상태로 0취급을 당합니다
(addr = FLASH_USER_ROM_START_ADDR + 0)

항상 발생하는 것도 아니고 도대체 왜 이러는지 이유를 모르겠습니다
강제 형변환이랑 별 상관이 없을 것 같은데 왜 이럴까요 진짜 돌아부리겠네요
(형변환을 명시해도 발생합니다)

해결 방법은 참으로 답답합니다
addr을 참조하는 코드를 아래 추가하거나 한 줄 계산식을 여러 라인으로 분리하면 해결이 됩니다..

    addr = FLASH_USER_ROM_START_ADDR;
    addr += (i * FLA_DATA_BLK_SIZE);

cache 문제일까요? 이해가 안갑니다 ㅠㅠ

arm cortex m7 입니다

라스코니의 이미지

volatile uint32_t addr;

로 선언을 해보세요.

chocokeki의 이미지

이 이슈는 종결되었습니다
define 문에 오타가 있었습니다