日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FreeRTOS | STM32H7串口中断调用FreeRTOS API,导致程序卡死

發布時間:2025/3/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FreeRTOS | STM32H7串口中断调用FreeRTOS API,导致程序卡死 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、前言
  • 二、串口中斷調用xQueueSendFromISR
    • 2.1、串口中斷回調函數(usart.c)
    • 2.2、stm32h7xx_it.c
  • 三、調試
    • 3.1、串口中斷后,程序卡死
    • 3.2、卡死原因
  • 四、NIVC中斷優先級
    • 4.1、串口中斷優先級
    • 4.2、FreeRTOS配置文件的MAX_SYSCALL_INTERRUPT_PRIORITY

一、前言

在網絡上搜尋了相關的問題,看一下其他人有沒有碰到這個問題。實際上有較多CSDN的博主都碰到這個問題,但能把問題說清楚的博主真的很少。這篇CSDN博文解決了我的問題,只是中斷的類型跟我不一樣(我使用的是串口中斷)。

相關CSDN博文的地址:FreeRTOS死機原因

二、串口中斷調用xQueueSendFromISR

我計劃將串口中斷接收到的字節存放到FreeRTOS的消息隊列里,代替裸機系統下的ringbuffer。

2.1、串口中斷回調函數(usart.c)

在串口中斷回調函數里,需要調用xQueueSendFromISR而不是xQueueSend。

2.2、stm32h7xx_it.c

將函數放進STM32系統中斷的回調函數USART3_IRQHandler里,當串口3產生中斷時,程序就會進入這個函數里面。

三、調試

3.1、串口中斷后,程序卡死

進入MDK調試模式,找到程序卡死的位置。

3.2、卡死原因

FreeRTOS源碼的注釋里,對產生這個問題的原因進行了描述。

從上面的注釋看來,大概的問題應該比較清楚了,就是因為中斷優先級造成的

四、NIVC中斷優先級

4.1、串口中斷優先級

4.2、FreeRTOS配置文件的MAX_SYSCALL_INTERRUPT_PRIORITY

程序卡死的根本原因是串口的中斷優先級比FreeRTOS配置文件上的MAX_SYSCALL_INTERRUPT_PRIORITY要高。在明白問題的本質后,就有解決問題的解決方案:

  • 串口中斷的中斷優先級設置2(比MAX_SYSCALL_INTERRUPT_PRIORITY大一級)。
  • 在不修改中斷優先級的情況下,串口中斷回調函數里不要調用FreeRTOS的API函數。
  • 總結

    以上是生活随笔為你收集整理的FreeRTOS | STM32H7串口中断调用FreeRTOS API,导致程序卡死的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。