伦伦影院久久影视,天天操天天干天天射,ririsao久久精品一区 ,一本大道香蕉大久在红桃,999久久久免费精品国产色夜,色悠悠久久综合88,亚洲国产精品久久无套麻豆,亚洲香蕉毛片久久网站,一本一道久久综合狠狠老

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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RT-Thread SPI鏈?zhǔn)絺鬏敺欠ㄔL問?揭秘致命陷阱!

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

掃碼添加小助手

加入工程師交流群


前言

一、


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

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

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

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

由于next未賦值為RT_NULL,鏈?zhǔn)絺鬏敃r觸發(fā)非法內(nèi)存訪問(next指向不可控地址)。

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

借此機會,本文將深入解析RT-Thread SPI驅(qū)動的鏈?zhǔn)絺鬏敊C制,并探討B(tài)SP對RT-Thread SPI接口的適配特點與優(yōu)勢。

RT-Thread SPI鏈?zhǔn)絺鬏敊C制解析

二、


1.核心數(shù)據(jù)結(jié)構(gòu):struct rt_spi_message

RT-Thread通過struct rt_spi_message描述SPI傳輸操作,支持單條或多條消息鏈?zhǔn)絺鬏敗?/p>

關(guān)鍵成員next

1)若為NULL,表示當(dāng)前為鏈?zhǔn)絺鬏數(shù)淖詈笠粭l消息。
2)若非NULL,需確保next指向的rt_spi_message已正確初始化。

3)未初始化next的后果鏈?zhǔn)絺鬏敃r,驅(qū)動會嘗試訪問next指向的無效地址,導(dǎo)致非法訪問異常。

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

在RT-Thread的官方wiki示例可以看到,在定義一個spi message時,需要操作next成員以便確認(rèn)是否有下一條鏈?zhǔn)絺鬏敗H绻麤]有需要賦值為NULL。在RT-Thread的wiki可以看到,在使用rt_spi_transfer_message 傳輸兩條msg,在第二條msg的next賦值為RT_NULL代表結(jié)束。

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

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

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

先楫BSP適配

三、


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

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

而先楫BSP的SPI驅(qū)動嚴(yán)格按照RT-Thread規(guī)范實現(xiàn)鏈?zhǔn)絺鬏斶壿嫞瑥娭菩r瀗ext指針。支持單條/鏈?zhǔn)絺鬏敚嫒輳?fù)雜場景。

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

先楫BSP對DSPI和QSPI的支持

四、


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

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

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

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

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

需要注意的是:當(dāng)使用四線QSPI時,對應(yīng)的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

總結(jié)

五、


鏈?zhǔn)絺鬏斚葳澹何闯跏蓟痭ext指針是SPI驅(qū)動異常的常見原因,開發(fā)者需嚴(yán)格遵循RT-Thread規(guī)范。

先楫BSP優(yōu)勢

1. 嚴(yán)格適配RT-Thread鏈?zhǔn)絺鬏斶壿嫞苊夥欠ㄔL問。2. 集成SPI/DSPI/QSPI驅(qū)動,簡化開發(fā)流程。

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

    關(guān)注

    17

    文章

    1894

    瀏覽量

    101790
  • BSP
    BSP
    +關(guān)注

    關(guān)注

    1

    文章

    102

    瀏覽量

    28057
  • RT-Thread
    +關(guān)注

    關(guān)注

    32

    文章

    1632

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    基于RT-ThreadSPI通訊

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

    RT-Thread編程指南

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

    RT-Thread用戶手冊

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

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

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

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

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

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

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

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

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

    RT-Thread學(xué)習(xí)筆記 RT-Thread的架構(gòu)概述

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

    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 設(shè)備

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

    基于RT-Thread Studio學(xué)習(xí)

    前期準(zhǔn)備:從官網(wǎng)下載 RT-Thread Studio,弄個賬號登陸,開啟rt-thread學(xué)習(xí)之旅。
    的頭像 發(fā)表于 05-15 11:00 ?6568次閱讀
    基于<b class='flag-5'>RT-Thread</b> Studio學(xué)習(xí)

    RT-Thread v5.0.2 發(fā)布

    RT-Thread 代碼倉庫地址: ●? https://github.com/RT-Thread/rt-thread RT-Thread 5.0.2 版本發(fā)布日志詳情: ●? htt
    的頭像 發(fā)表于 10-10 18:45 ?3303次閱讀
    <b class='flag-5'>RT-Thread</b> v5.0.2 發(fā)布

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

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