尊敬的 TI 员工:
我看到了一种不同的方法来擦除 TI 员工发布的校验和、如下所示。 我不明白为什么不需要考虑使用这些代码从 ARM 到 Thumb 的指令集切换。
受赠方避免此问题的一种方法是将 zero_out_integration_word 的大小从闪存复制到 RAM。
以下是实施此解决方案的步骤:
1.在 cyclone.cmd 文件中、添加如下所示的组段:
部分
{
…μ A …μ A
union:run = RAM,run_start (_ram_run_start)
{
.zero_out_integration_word_0:load = pflash、
load_start (_zero_out_integration_word_start)、
LOAD_END (_zero_out_integration_word_end)、
load_size (_zero_out_integration_word_size)
}
…μ A …μ A
}
2.在头文件或引用的源文件开头澄清这些符号
extern uint8 zero_out_integration_word_start、zero_out_integration_word_end、zero_out_integration_word_size;
extern UINT8 ram_run_start;
3.使用程序将函数分配到上面定义的段中。
#pragma CODE_SECTION (zero_out_integration_word、".zero_out_integration_word_0")
void zero_out_integration_word (void)
{
DecRegs.FLASHILOCK.ALL = 0x42DC157E;//将密钥写入编程闪存互锁寄存器
DecRegs.MFBALR1.ALL = MFBALRX_BYTE0_BLOCK_SIZE_32K;//启用程序闪存写入
program_flash_integration_word = 0;
DecRegs.MFBALR1.ALL = MFBALRX_BYTE0_BLOCK_SIZE_32K +//将程序闪存扩展为4倍实际大小
MFBALRX_BYTE0_RONLY;
while (DecRegs.PFLASHCTRL.bit.BUSY!= 0)
{
;//在进行编程时不执行任何操作
}
// interrupt_time = TimerRegs.T24CNTTAT.bit.CNT_DAT - interrupt_time;
SysRegs.SYSECR.bit.reset = 2;//现在复位处理器。
返回;
}
使用 memcpy 函数将代码从闪存复制到 RAM 中、然后直接调用函数。
案例12://清除完整性字。
{
memcpy ((void *)&ram_run_start、(void *)&zero_out_integration_word_start、(Int32)&zero_out_integration_word_size);
zero_out_integration_word ();
返回;
}
使用这种方法有多种优势、
-无需考虑从 ARM 到 Thumb 的指令集切换。
-不用担心没有将整个代码或代码本身复制到 RAM 中
期待您的回复
最恰当的考虑
黄达纳