STM32
直播中

李晶

7年用户 937经验值
私信 关注
[问答]

STM32F105可以移植UC/OS-III吗?对于中断嵌套怎么处理?

最近刚移植了UC/OS-III到STM32F105上面,只是单纯的点亮LED灯还有串口通信,都是正常的,若是使用外部中断,且不停的使用,让其进行嵌套之后,程序就会跑飞,觉得我哪里是移植错了,但很难找出,想请教一下,在移植过程中对于
void  OS_CPU_SystickHandler (void)
{
    CPU_SR_ALLOC();
   
    time32_incr += 10;

    CPU_CRITICAL_ENTER();
    OSIntNestingCtr++;                                      /* Tell uC/OS-III that we are starting an ISR             */
    CPU_CRITICAL_EXIT();

    OSTimeTick();                                           /* Call uC/OS-III's OSTimeTick()                          */

    OSIntExit();                                            /* Tell uC/OS-III that we are leaving the ISR             */
}
这个函数怎么处理的?


回帖(1)

李鸿洋

2024-5-6 16:48:00
STM32F105可以移植UC/OS-III。在移植过程中,确保你遵循了正确的步骤和配置。对于中断嵌套的处理,UC/OS-III提供了一种机制来管理中断嵌套。

1. 在移植UC/OS-III时,请确保你已经正确配置了系统时钟和中断优先级。这将确保中断能够正确地嵌套。

2. 对于`OS_CPU_SysTickHandler`函数,它是一个系统滴答定时器中断处理函数。在这个函数中,`OSIntNestingCtr`用于跟踪中断嵌套的深度。当进入中断时,`OSIntNestingCtr`会增加,当退出中断时,它会减少。这有助于UC/OS-III管理中断嵌套。

3. 如果你的程序在中断嵌套时出现问题,可能是由于中断优先级配置不当或者中断服务例程(ISR)中的代码问题。请检查以下几点:

   a. 确保你已经正确设置了中断优先级,以避免优先级反转问题。
   
   b. 在ISR中,尽量避免执行过多的任务,特别是那些可能阻塞调度器的任务。如果需要执行耗时的任务,请在ISR中设置一个标志,然后在任务级别处理该任务。
   
   c. 确保你的ISR是可重入的,这意味着它们不应该依赖于任何全局或静态变量,除非这些变量是专门为中断设计的。

4. 如果问题仍然存在,你可以尝试使用调试器逐步执行代码,以找出导致程序跑飞的具体位置。

5. 另外,确保你已经阅读了UC/OS-III的官方文档,了解如何正确地使用和配置中断嵌套。

总之,STM32F105可以移植UC/OS-III,但在移植过程中需要仔细配置中断优先级和处理中断嵌套。通过检查上述建议,你应该能够找到并解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分