请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:CC1310 工具/软件:TI-RTOS
您好!
我正在实施引导加载程序、并制作了一个简单的项目来验证所有内容。
在这个简单的项目中、我在写入闪存之前使用了以下验证:
/*检查总体边界*/ assert_isTrue (((uint32_t) destAddr >= flash_application_ADDR、0); assert_isTrue ((((uint32_t) destAddr + nbytes)<(flash_application_ADDR + flash_application_size)、1); /*检查当 FLASH_DATA_SIZE 超过一页时是否不跨越页边界*/ assert_isTrue ((((uint32_t) destAddr - pageStartAddr + nbytes)<= flash_page_size、2); /* 确保 driverlib 中的闪存函数位于 ROM 或 SRAM 中、 但不在闪存中。 这是 TI-RTOS 中的正常情况。 * assert_isTrue (((uint32_t)&FlashProgram >(flash_base_ADDR + flash_size)、3);
现在、我希望使该引导加载程序尽可能小。 其中一项修改是删除 assert 模块。
我将这些验证替换如下:
/*检查总体边界*/ if (((uint32_t) destAddr < flash_application_ADDR) { while (1); } if ((((uint32_t) destAddr + nbytes)>(flash_application_ADDR + flash_application_size)) { while (1); } /*检查当 FLASH_DATA_SIZE 超过一页时是否不跨越页边界*/ if ((((uint32_t) destAddr - pageStartAddr + nbytes)> flash_page_size) { while (1); } /* 确保 driverlib 中的闪存函数位于 ROM 或 SRAM 中、 但不在闪存中。 这是 TI-RTOS 中的正常情况。 * if (((uint32_t)&FlashProgram <(flash_base_ADDR + flash_size)) { while (1);<=程序在此处停止! }
验证在上面标记的点失败。
"assert_isTrue ((uint32_t)&FlashProgram >(flash_base_ADDR + flash_size)、3)"和"if ((uint32_t)&FlashProgram <(flash_base_ADDR + flash_size)"之间有何区别?
此致、