支持路径:/Product/Help、带器件选择/
您好!
我的 Hercules 应用需要擦除和写入闪存的某些部分。 我从 Hercules 引导加载程序项目中的代码开始、该项目包含 BL_FLASH.c、Fapi_UserDefinedFuncations.c、并且还使用 F021 API。 我还修改了 linker.cmd 文件以在 RAM 中找到 FAPI 和 BL_FLASH 代码。 通常、代码看起来工作正常、我可以写入片上闪存位置0x18000 (bank2)。
1.要使 bl_flash.c 正常工作、我必须在多个位置修改 bl_flash.c、以将"bytes"变量更改为 int。 这是因为代码执行" while (bytes >0)"检查、如果初始字节数不是4的倍数、则字节值变为负。 请注意、写入7个字节到闪存应该是有效的。
示例:
寄存器 int bytes = No_for_bytes; //was uint32、如果初始字节数不是4的倍数、则从不退出循环!
while (字节> 0)
{
if (* dst1++!=* src1++)
误差= 1;
字节-= 0x4;
}
2. 当程序运行时、我可以看到闪存写入正常。 (存储器窗口在位置0x180000处显示正确的值。) 但是、如果我重新启动调试器并重新加载程序、整个闪存将被擦除、因此我之前写入闪存的"数据"值将丢失。 如何告知调试器启动但不擦除闪存的某些区域?
3. 我正在运行 FreeRTOS,并从 FreeRTOS 任务中调用 Fapi_BlockProgram()。 您是否建议我在关键部分内调用 FAPI 函数? 否则、FreeRTOS 会取代这些闪存编程/擦除调用。 假设没有其他任务正在使用 FAPI、FAPI 是否支持占先?
谢谢、
Keith