0
点赞
收藏
分享

微信扫一扫

1253_确认FreeRTOS QEMU例程中中断的使用

全部学习汇总: ​​GreyZhang/g_FreeRTOS: learning notes about FreeRTOS. (github.com)​​

QEMU既然是模拟了MCU的功能,而且让FreeRTOS能够运行起来。那么,至少得有一个定时器中断需要支持。接下来,找一下这部分功能的实现,同时了解一下其他的中断是否容易在QEMU中配置。

1253_确认FreeRTOS QEMU例程中中断的使用_嵌入式

我的突破点放到了tick相关的几个功能上。前面看FreeRTOSConfig中的配置信息的时候看到了hook函数的配置。Hook函数中就有一个tick hook。既然是跟tick相关的,肯定能够顺腾摸瓜找到相关的设计。正好,默认的例子这个功能是开启了的。

1253_确认FreeRTOS QEMU例程中中断的使用_单片机_02

上面的这个接口应该是tick发生需要调用的。

1253_确认FreeRTOS QEMU例程中中断的使用_嵌入式_03

进一步确认,这个应该是在main.c中定义的。相关的定义在现在的文件包里面有2个,因此这个需要根据实际的编译所用的功能确认一下。

1253_确认FreeRTOS QEMU例程中中断的使用_物联网_04

函数设计为了一个空函数,其实是没有任何有效信息的。为了方便测试,我在里面加一个计数器在其他的任务中打印一下。

1253_确认FreeRTOS QEMU例程中中断的使用_嵌入式_05

测试接口设计如上。

1253_确认FreeRTOS QEMU例程中中断的使用_FreeRTOS_06

测试接口调用。

1253_确认FreeRTOS QEMU例程中中断的使用_嵌入式_07

测试结果。看得出来,现在的tick hook是已经生效了的。

1253_确认FreeRTOS QEMU例程中中断的使用_嵌入式_08

继续向前找,这个vApplicationTickHook是在上面的接口中调用的。

1253_确认FreeRTOS QEMU例程中中断的使用_FreeRTOS_09

继续向根源寻找,这里找到的这个应该就是定时器中断的ISR了。在执行的时候,看起来还加了一个中断的临界保护。

1253_确认FreeRTOS QEMU例程中中断的使用_stm32_10

1253_确认FreeRTOS QEMU例程中中断的使用_stm32_11

而这个ISR生效的原因是填充了这个中断向量表。其中,__attribute__的属性应该是决定了这个中断的处理机制。中断向量表的填充位置,在链接文件中做了指定。从这个表的信息看,似乎现在是没有多少可配置的中断资源存在。要么就是现在没写完整。

1253_确认FreeRTOS QEMU例程中中断的使用_物联网_12

中断优先级的配置没有找到明确的修改点,但是在配置文件中找到了这部分信息。看起来QEMU模拟的功能也不是很完善,还是有没有模拟的部分。

原本想在软件中增加一部分定时器,现在看来QEMU的环境还是不是很完善。如此,接下来的尝试还是尽快选择一个合适的开发板之后进行硬件级别的调试这样会好一些。如此,对于一个嵌入式系统的了解可能会更加完善。QEMU学习自然还不能止步,即使是止步于嵌入式的学习,后面尝试虚拟化环境的时候还是的继续了解。


举报

相关推荐

0 条评论