1.报错的现象与原因
书接上回,本人在FreeRTOS下使用了外部中断,且将调试信息打印至串口。在按键的处理过程中,我采用了长按与短按的判别,但是在调试的过程中,当我长按按键触发的时候发现串口有打印错误信息:
“Error: …\Middlewares\FreeRTOS\portable\RVDS\ARM_CM4F\port.c, 233”
如下图所示:
并且在此之后RTOS系统停止了运行,直到外部硬件复位之后恢复正常。
经过查找资料发现可以到port.c文件中查看错误原因,OK,那就去看一下。
首先,通过错误信息可以知道port.c文件所在的路径,这就方便我们查找了
然后根据后面的错误代码定位到233行:
这里就详细说明了我们产生错误的原因,虽然可能看不太明白(懒得看),但是不要慌,打开翻译软件直接ctrl cv:
虽然翻译的内容可能有一点拗口,但是大概的意思就是我们的任务函数(线程)是不能够返回的,如果需要达到返回的目的,可以通过vTaskDelete函数将该任务删除。
翻译一下:
我们在任务中不小心让任务返回了,比如在线程中使用了“break”导致跳出了线程的while()循环。
2.解决办法
知道原因就好办了,我们直接返回到线程中查看,果然,在我的内容中出现了一个不应该存在的“break”(是我在copy的时候不小心保留的)导致了线程的意外终止。
3.结果
那我们将这个“break删除就行了,再次编译下载,长按按键,查看调试信息:
发现可以正常触发长按效果,且任务系统也能够继续正常运行,解决!
4.总结
此次调试最大的收获就是可以通过串口打印的错误信息回溯到port.c文件中查看具体的报错内容,这样也就可以更快地定位错误信息,并且快速解决!
【灵感来源&感谢该博主】