C 如果在重置处理程序内调用main函数,那么其他中断是如何处理的?
这是Tiva C启动代码中的一个示例代码,正如您所看到的,主函数在重置处理程序中调用,据我所知,它是最高优先级的,所以我的问题是,如果我们仍然在重置处理程序中,如何处理任何其他中断C 如果在重置处理程序内调用main函数,那么其他中断是如何处理的?,c,arm,embedded,C,Arm,Embedded,这是Tiva C启动代码中的一个示例代码,正如您所看到的,主函数在重置处理程序中调用,据我所知,它是最高优先级的,所以我的问题是,如果我们仍然在重置处理程序中,如何处理任何其他中断 ``` ; Reset Handler Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT SystemInit IMPORT __main
```
; Reset Handler
Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT SystemInit
IMPORT __main
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
```
我发现ARM架构参考手册中的伪代码对于回答这类问题非常有帮助。通过“tiva c”,我假设您所说的是基于Cortex-M4的MCU的TM4C系列微控制器。这意味着,我们将要查看 “B1.5.5重置行为”部分包含我们感兴趣的伪代码。以下是一个片段(省略了与问题无关的部分):
断言重置会导致处理器放弃当前执行
声明而不保存它。在解除复位时,所有寄存器
具有定义的重置值的包含该值,并且处理器
执行TakeReset()伪代码描述的操作。
//TakeReset()
// ============
TakeReset()
CurrentMode=Mode\u线程;
PRIMASK='0';/*重置时优先级掩码被清除*/
FAULTMASK='0';/*复位时清除故障屏蔽*/
BASEPRI=零(8);/*重置时禁用基本优先级*/
// [...]
从描述中我们可以注意到:
我发现ARM架构参考手册中的伪代码对于回答这类问题非常有帮助。通过“tiva c”,我假设您所说的是基于Cortex-M4的MCU的TM4C系列微控制器。这意味着,我们将要查看 “B1.5.5重置行为”部分包含我们感兴趣的伪代码。以下是一个片段(省略了与问题无关的部分):
断言重置会导致处理器放弃当前执行
声明而不保存它。在解除复位时,所有寄存器
具有定义的重置值的包含该值,并且处理器
执行TakeReset()伪代码描述的操作。
//TakeReset()
// ============
TakeReset()
CurrentMode=Mode\u线程;
PRIMASK='0';/*重置时优先级掩码被清除*/
FAULTMASK='0';/*复位时清除故障屏蔽*/
BASEPRI=零(8);/*重置时禁用基本优先级*/
// [...]
从描述中我们可以注意到:
Asserting reset causes the processor to abandon the current execution
state without saving it. On the deassertion of reset, all registers
that have a defined reset value contain that value, and the processor
performs the actions described by the TakeReset() pseudocode.
// TakeReset()
// ============
TakeReset()
CurrentMode = Mode_Thread;
PRIMASK<0> = '0'; /* priority mask cleared at reset */
FAULTMASK<0> = '0'; /* fault mask cleared at reset */
BASEPRI<7:0> = Zeros(8); /* base priority disabled at reset */
// [...]