工具与软件:
我们的应用程序可以自行更新、然后需要重新启动。
SysCtlReset()调用仅在从特权模式(在中断中为 f.i.)执行时起作用。 为了能够使用它、我要触发一个软件中断。 处理器的数据表在"2.3.1中显示。 处理器模式和软件执行的权限级别"一文中所述、SVC 指令可用于传输到管理员模式。
在提供的示例中、我找不到 SVC (汇编器)指令的用法。 post https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/891449/tm4c1294ncpdt-how-to-call-the-svcall-fault-in-ti-rtos-on-tm4c/3297279?tisearch=e2e-sitesearch&keymatch=svc%20tm4c#3297279的解决方案 提到了针对 IAR 编译器的这个指令。
使用的编译器是 ti-cgt-arm_20.2.7_LTS。
命令行:c:/ti/ccs1240/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/bin/armcl -mv7M4 --code_state=16 --float_support=FPv4SPD16 -me -O2 --include_path="..." ...--define=part_TM4C123FH6PM --define=ccs="ccs"--define=target_is_TM4C123_rb2 --gcc --diag_warning=225 --diag_wrap=off --display_error_number --abi=eabi --preproc_with_compile --preproc_dependency="main.d_raw"。
重新引导功能通过以下方式注册:
IntRegister (FAULT_SVCALL、my_reset_board);
my_reset_board 函数调用 SysCtrlReset 函数:
void my_reset_board()
{
SysCtlReset();
}
调用 Svc 故障中断的正确指令是什么(不是引导加载程序演示中使用的调用: (*(void (*)(void))(*(uint32_t *) 0x2C))();)?
是否存在使用此编译器的 Svc 指令的示例?
此致、
wim