주소 계산이 이상하게 됩니다 무슨 문제일까요?
글쓴이: chocokeki / 작성시간: 수, 2019/01/23 - 3:22오후
#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 입니다
Forums:
volatile uint32_t addr;
volatile uint32_t addr;
로 선언을 해보세요.
이 이슈는 종결되었습니다
이 이슈는 종결되었습니다
define 문에 오타가 있었습니다
댓글 달기