一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

3天內不再提示

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

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

掃碼添加小助手

加入工程師交流群


前言

一、


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

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

問題復現(xiàn)場景:

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

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

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

借此機會,本文將深入解析RT-Thread SPI驅動的鏈式傳輸機制,并探討B(tài)SP對RT-Thread SPI接口的適配特點與優(yōu)勢。

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

二、


1.核心數(shù)據(jù)結構:struct rt_spi_message

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

關鍵成員next

1)若為NULL,表示當前為鏈式傳輸?shù)淖詈笠粭l消息。
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適配

三、


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

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

而先楫BSP的SPI驅動嚴格按照RT-Thread規(guī)范實現(xiàn)鏈式傳輸邏輯,強制校驗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驅動異常的常見原因,開發(fā)者需嚴格遵循RT-Thread規(guī)范。

先楫BSP優(yōu)勢

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

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

    關注

    17

    文章

    1791

    瀏覽量

    95221
  • BSP
    BSP
    +關注

    關注

    1

    文章

    92

    瀏覽量

    26817
  • RT-Thread
    +關注

    關注

    32

    文章

    1385

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

    基于RT-ThreadSPI通訊

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

    RT-Thread編程指南

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

    RT-Thread用戶手冊

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

    RT-ThreadSPI的細節(jié)內容

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

    RT-Thread全球技術大會:螢石研發(fā)團隊使用RT-Thread的技術挑戰(zhàn)

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

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

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

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

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

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

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

    RT-Thread文檔_RT-Thread 簡介

    RT-Thread文檔_RT-Thread 簡介
    發(fā)表于 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 上手指南
    發(fā)表于 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 介紹與移植
    發(fā)表于 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 設備
    發(fā)表于 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學習之旅。
    的頭像 發(fā)表于 05-15 11:00 ?5152次閱讀
    基于<b class='flag-5'>RT-Thread</b> Studio學習

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

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