国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

RT-Thread SPI鏈式傳輸非法訪問?揭秘致命陷阱!

RT-Thread官方賬號 ? 2025-06-24 19:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


前言

一、


在與RT-Thread BSP的開發者溝通中,發現SPI設備驅動在輪詢(Polling)模式下偶發出現非法訪問異常(如圖)

bf68f6ea-50ef-11f0-986f-92fbcf53809c.png

問題復現場景:

開發者僅需一次單消息傳輸,但未顯式初始化struct rt_spi_message的next指針。

由于next未賦值為RT_NULL,鏈式傳輸時觸發非法內存訪問(next指向不可控地址)。

修復方案 :將next顯式置空后,異常消失。

借此機會,本文將深入解析RT-Thread SPI驅動的鏈式傳輸機制,并探討BSP對RT-Thread SPI接口的適配特點與優勢。

RT-Thread SPI鏈式傳輸機制解析

二、


1.核心數據結構:struct rt_spi_message

RT-Thread通過struct rt_spi_message描述SPI傳輸操作,支持單條或多條消息鏈式傳輸。

關鍵成員next

1)若為NULL,表示當前為鏈式傳輸的最后一條消息。
2)若非NULL,需確保next指向的rt_spi_message已正確初始化。

3)未初始化next的后果鏈式傳輸時,驅動會嘗試訪問next指向的無效地址,導致非法訪問異常。

bf8a2018-50ef-11f0-986f-92fbcf53809c.png

在RT-Thread的官方wiki示例可以看到,在定義一個spi message時,需要操作next成員以便確認是否有下一條鏈式傳輸。如果沒有需要賦值為NULL。在RT-Thread的wiki可以看到,在使用rt_spi_transfer_message 傳輸兩條msg,在第二條msg的next賦值為RT_NULL代表結束。

bf94c27a-50ef-11f0-986f-92fbcf53809c.png

在RT-Thread組件SPI相關也對next進行了操作,并且做了相關注釋說明

bfa9a38e-50ef-11f0-986f-92fbcf53809c.png

先楫BSP適配

三、


那么可能就有開發者問了,為什么別的BSP SPI驅動反而就沒事了,可以在RT-Thread的主線看到,多數廠商(如STM32)的SPI驅動未處理next指針,僅支持單條消息傳輸,但鏈式傳輸時易因next未處理導致傳輸異常。

bfc2c940-50ef-11f0-986f-92fbcf53809c.png

而先楫BSP的SPI驅動嚴格按照RT-Thread規范實現鏈式傳輸邏輯,強制校驗next指針。支持單條/鏈式傳輸,兼容復雜場景。

bff233b0-50ef-11f0-986f-92fbcf53809c.png

先楫BSP對DSPI和QSPI的支持

四、


不同與其他廠家的BSP,把SPI和QSPI分開兩個驅動文件,先楫是集成在SPI驅動中,因為先楫SPI本身就是一個外設,可以支持SPI,DSPI,QSPI三種傳輸模式。

怎么開啟這三種模式,可以通過menuconfig進入到對應的界面進行選擇:分別是單線SPI,兩線DSPI,四線QSPI。

c021c210-50ef-11f0-986f-92fbcf53809c.png

如果想在RT-Thread Studio操作,可以參考下圖:

c033999a-50ef-11f0-986f-92fbcf53809c.png

需要注意的是:當使用四線QSPI時,對應的pinmu.c的SPI初始化需要加上QSPI的D2和D3初始化。

c04c1e2a-50ef-11f0-986f-92fbcf53809c.png

通過list device命令可看到:SPI0為單線SPI,SPI1為雙線DSPI,SPI2為四線QSPI

c07f1df2-50ef-11f0-986f-92fbcf53809c.png

總結

五、


鏈式傳輸陷阱:未初始化next指針是SPI驅動異常的常見原因,開發者需嚴格遵循RT-Thread規范。

先楫BSP優勢

1. 嚴格適配RT-Thread鏈式傳輸邏輯,避免非法訪問。2. 集成SPI/DSPI/QSPI驅動,簡化開發流程。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • SPI
    SPI
    +關注

    關注

    17

    文章

    1885

    瀏覽量

    101210
  • BSP
    BSP
    +關注

    關注

    1

    文章

    99

    瀏覽量

    27971
  • RT-Thread
    +關注

    關注

    32

    文章

    1613

    瀏覽量

    44818
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    RT-Thread記錄(二、RT-Thread內核啟動流程)

    在前面我們RT-Thread Studio工程基礎之上講一講RT-Thread內核啟動流程.
    的頭像 發表于 06-20 00:30 ?6875次閱讀
    <b class='flag-5'>RT-Thread</b>記錄(二、<b class='flag-5'>RT-Thread</b>內核啟動流程)

    基于RT-ThreadSPI通訊

    ? ? ?sdk 目前還不支持 spi,沒有 spi 就失去了很多樂趣,如 easyflash、spi 的屏幕,藍訊的這次活動我接到了模擬 spi 的任務,下面介紹如何寫
    的頭像 發表于 08-22 09:28 ?2832次閱讀

    RT-Thread編程指南

    RT-Thread編程指南——RT-Thread開發組(2015-03-31)。RT-Thread做為國內有較大影響力的開源實時操作系統,本文是RT-Thread實時操作系統的編程指南
    發表于 11-26 16:06 ?0次下載

    RT-Thread用戶手冊

    RT-Thread用戶手冊——本書是RT-Thread的編程手冊,用于指導在RT-Thread實時操作系統環境下如何進行編 程。
    發表于 11-26 16:16 ?0次下載

    RT-ThreadSPI的細節內容

    作為通信協議的兩大基礎,IIC和SPI兩者的應用都非常廣泛,上一篇文章講過了RTT上IIC的移植與實踐。 《一步到位!教你RT-Thread上設備IIC驅動移植》 講完IIC,自然少不了SPI
    的頭像 發表于 09-30 15:35 ?4769次閱讀
    <b class='flag-5'>RT-Thread</b>上<b class='flag-5'>SPI</b>的細節內容

    RT-Thread全球技術大會:螢石研發團隊使用RT-Thread的技術挑戰

    RT-Thread全球技術大會:研發團隊使用RT-Thread的技術挑戰 ? ? ? ? 審核編輯:彭靜
    的頭像 發表于 05-27 11:36 ?2193次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:螢石研發團隊使用<b class='flag-5'>RT-Thread</b>的技術挑戰

    RT-Thread全球技術大會:Kconfig在RT-Thread中的工作機制

    RT-Thread全球技術大會:Kconfig在RT-Thread中的工作機制 ? ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發表于 05-27 14:49 ?2349次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:Kconfig在<b class='flag-5'>RT-Thread</b>中的工作機制

    RT-Thread全球技術大會:RT-Thread測試用例集合案例

    RT-Thread全球技術大會:RT-Thread測試用例集合案例 ? ? ? ? ? 審核編輯:彭靜
    的頭像 發表于 05-27 16:34 ?2830次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:<b class='flag-5'>RT-Thread</b>測試用例集合案例

    RT-Thread學習筆記 RT-Thread的架構概述

    RT-Thread 簡介 作為一名 RTOS 的初學者,也許你對 RT-Thread 還比較陌生。然而,隨著你的深入接觸,你會逐漸發現 RT-Thread 的魅力和它相較于其他同類型 RTOS
    的頭像 發表于 07-09 11:27 ?5879次閱讀
    <b class='flag-5'>RT-Thread</b>學習筆記 <b class='flag-5'>RT-Thread</b>的架構概述

    RT-Thread文檔_RT-Thread 簡介

    RT-Thread文檔_RT-Thread 簡介
    發表于 02-22 18:22 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 簡介

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南
    發表于 02-22 18:23 ?10次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 潘多拉 STM32L475 上手指南

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植

    RT-Thread文檔_SPI 設備

    RT-Thread文檔_SPI 設備
    發表于 02-22 18:36 ?3次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>SPI</b> 設備

    基于RT-Thread Studio學習

    前期準備:從官網下載 RT-Thread Studio,弄個賬號登陸,開啟rt-thread學習之旅。
    的頭像 發表于 05-15 11:00 ?6385次閱讀
    基于<b class='flag-5'>RT-Thread</b> Studio學習

    【S32K146 RT-Thread】之 使用SFUD組件驅動spi flash

    【S32K146 RT-Thread】之 使用SFUD組件驅動spi flash
    的頭像 發表于 11-21 01:05 ?1926次閱讀
    【S32K146 <b class='flag-5'>RT-Thread</b>】之 使用SFUD組件驅動<b class='flag-5'>spi</b> flash