背景:
我使用的是uCOS II,Keil uVision 5,以及带有TM4C123GH6PM单片机的TIVA板。我得到了一个用于uCOS II的端口和一个空白的项目文件来启动。我编写了所需的任务,程序工作正常,但现在我感兴趣的是实现中断,并试图了解它们如何与RTOS共存。这一切都是在C中完成的。
问题:
中断不起作用,它们根本不起作用。有些情况下,其他任务也不会执行。核心问题是,我并不真正理解中断如何能够与RTOS共存。我在裸金属上编写了代码(在程序集和C中),中断工作非常完美,当代码和cpu之间没有层时,我完全理解它们是如何工作的。
我试过的是:
- bsp\_int is the library that deals with the interrupts. BSP stands for Board Support Package and is intended to facilitate the interaction between the software and the code
- The library has functions to register an interrupt and enable it. The rtos uses its own table of ISR handlers mapped to the NVIC of the cpu. All handlers are filtered through a generic handler. The two useful functions from this library are:
- bsp\_intVectSet which takes the interrupt trigger ID (i.e bsp\_int\_id\_gpiof) and a pointer to the interrupt handler and registers it
- bsp\_intEn which takes the interrupt ID and enables it
接下来我该试试什么呢?有谁有与这两个部门( rtos和董事会)合作的经验吗?
我只是停留在这一点上,我一直在玩代码,移动东西,试图找到线索/导致解决这个问题。我甚至不能调试rtos,因为uVision不支持uCOS,我也不能使用分步调试,因为每个时钟滴答声都会触发中断,而PC正在不断地变化,所以IDE无法遵循它。
我知道IAR嵌入式工作台支持uCOS-II,我的笔记本上有一个应用程序,我试着设置一个项目,但我只得到了一个用于Keil的端口/启动项目,我不知道如何为IAR EW设置一个。Micrium网站上唯一的端口是TM4C129系列,我试着用它启动一个IAR项目,但我无法让它工作(库没有链接/缺少文件)。
谢谢!
发布于 2020-05-01 16:15:34
有谁有与这两个部门( rtos和董事会)合作的经验吗?
恐怕我还没有与uCos (但与其他OSes,主要是SysBios和FreeRTOS)合作,也没有与Tiva合作(但与Sitara AM335x合作)。不过,我认为下面的一些提示可能对您有帮助(尽管您正在使用不同的实现)。
接下来我该试试什么呢?
以下是我建议您考虑的步骤。你可以把它们按任何你认为最有用的顺序排列。
bsp_Int... API更重要的是,对所有软件组件的中断管理通过一个唯一的API运行,例如,bsp_Int...接口。app.c/main()的假设听起来是合理的。请确保您也知道每个访问间接中断的组件。如果在每个任务函数的顶部放置一个断点,请检查会发生什么情况。然后,您应该能够观察所有的任务开始和运行到它的断点一次。
您应该确保Tiv自觉库只以与RTOS兼容的方式使用中断。您可以通过RTM或读取源来完成此操作。
会不会是连接到中断的一个控制器引脚上的电子问题开始一直触发中断?
你试过创建一个最小可重现性示例吗?当您这样做时,您可以通过同时执行橡胶鸭调试来增强效果。
这听起来很危险。我还没有和Tiva合作过,而是使用了另一个TI芯片(AM335x)。在这种情况下,不同的库通过不同的抽象层访问同一系统资源的不同部分/重叠部分。只有当我们清理了抽象层的混乱,忽略彼此,并将一些代码移植到一个通用的抽象分层方案时,情况才开始改善。
还有一些PS:
https://stackoverflow.com/questions/61218251
复制相似问题