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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

RT-Thread 应用篇 — 在STM32L051上使用 RT-Thread (三、无线温湿度传感器 之 I2C通讯)

發布時間:2024/8/1 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RT-Thread 应用篇 — 在STM32L051上使用 RT-Thread (三、无线温湿度传感器 之 I2C通讯) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
應用篇-在STM32L051上使用RT-Thread 第三篇,學習RT-Thread Studio如何添加自定義的.c .h文件, 同時開始我們的程序移植和設計。

目錄

  • 前言
  • 一、RT-Thread Studio添加自定義的.c .h文件
    • 1.1 在現有文件夾下添加
    • 1.2 新建文件夾添加
      • 1.2.1 手動添加路徑
      • 1.2.1 使用`SConscript`腳本添加
  • 二、I2C驅動移植
    • 2.1 移植步驟
    • 2.2 使用測試
    • 2.3 好多的問題= =!
      • 問題的解決
    • 2.4 RT-Thread nano打印浮點數
  • 三、時刻關注占RAM大小
  • 結語

前言

經過前面兩篇文章的準備,我們終于可以開始寫應用代碼了,在添加我們自己的驅動文件之前,本文會說明一下 RT-Thread Studio 如何添加自己的.c 和 .h文件。

然后在此基礎上,完成 SHT21 溫濕度傳感器的 I2C 驅動移植。

??
本 RT-Thread 專欄記錄的開發環境:
RT-Thread記錄(一、RT-Thread 版本、RT-Thread Studio開發環境 及 配合CubeMX開發快速上手)
RT-Thread記錄(二、RT-Thread內核啟動流程 — 啟動文件和源碼分析)
??
RT-Thread 內核篇系列博文鏈接:
RT-Thread記錄(三、RT-Thread 線程操作函數及線程管理與FreeRTOS的比較)
RT-Thread記錄(四、RT-Thread 時鐘節拍和軟件定時器)
RT-Thread記錄(五、RT-Thread 臨界區保護)
RT-Thread記錄(六、IPC機制之信號量、互斥量和事件集)
RT-Thread記錄(七、IPC機制之郵箱、消息隊列)
RT-Thread記錄(八、理解 RT-Thread 內存管理)
RT-Thread記錄(九、RT-Thread 中斷處理與階段小結)
??
在STM32L051C8 上使用 RT-Thread 應用篇系列博文連接:
RT-Thread 應用篇 — 在STM32L051上使用 RT-Thread (一、無線溫濕度傳感器 之 新建項目)
RT-Thread 應用篇 — 在STM32L051上使用 RT-Thread (二、無線溫濕度傳感器 之 CubeMX配置)

一、RT-Thread Studio添加自定義的.c .h文件

使用RT-Thread Studio添加自定義的.c .h文件有多種方式,本文根據博主的實際測試,分別說明一下。

1.1 在現有文件夾下添加

直接在工程現有的文件夾下面右擊,選擇新建頭文件或者源文件,如下圖:

添加完成以后就可以直接編譯了,上面我在 cubemx 文件夾下的Src 和 Inc 下分別添加了i2c.c和兩個頭文件,直接編譯會關聯進去的:

但是這里得說明下,cubemx 是通過SConscript受SCons 構建工具管理的,所以直接這樣添加的話,每次我們自己增加一個.c文件,需要在 SConscript 文件中增加對應部分,要不然同步一下scons,不相關的.c文件就會被排除構建:

當然我們也可以在其他文件夾下添加,比如 drivers 文件夾,里面.c.h文件是混在一起,我們也可以直接在這里面新建,如下圖:

總結一下,在現有文件夾下面添加是比較方便的一種方式,因為項目整體的構建系統已經處理好了這些文件下的.c.h文件的包含關系,我們不用再進行添加頭文件路徑這種操作。
但是這種方式會影響項目原始框架,小項目的文件少倒是無所謂,文件多了的話就很亂了。

1.2 新建文件夾添加

所以我們要講一下如果新建文件夾放置我們自己的驅動程序應該怎么做。

首先,還是右擊選擇新建文件夾,然后出選擇文件夾放置的位置,輸入文件夾名字:

新建好以后,我們在左邊資源管理器可以看到有文件夾了,我們可以通過上面 1.1小節的內容添加文件,也可以直接打開文件夾所在的目錄,直接把我們要的文件復制過來,如下圖:

新建文件夾復制文件過來,不做任何操作直接編譯,可以參與編譯:

但是要備其他文件夾中的文件包含,需要添加頭文件路徑,如果不添加,會出現如下錯誤:

1.2.1 手動添加路徑

在工程資源管理器界面右擊點擊構建配置,如下圖:

然后按照下圖所示步驟,把我們自己新建的頭文件所在文件夾路徑添加(和keil工具一樣的添加)即可:

1.2.1 使用SConscript腳本添加

在自己想要放驅動的文件夾下面新建一個SConscript腳本,如下圖:


然后把自己想添加的.c.h文件放在對應文件夾下面,新建完成刷新工程,然后再右擊,選擇“同步scons配置至項目”即可,腳本會把該文件路徑自動添加至編譯的路徑中。

腳本內容如下:

from building import *cwd = GetCurrentDir() src = Glob('*.c') + Glob('*.S')libpath = [cwd] CPPPATH = [os.path.join(cwd)]group = DefineGroup('mydrivers', src, depend = [''], CPPPATH = CPPPATH,LIBPATH = libpath)Return('group')

二、I2C驅動移植

上面我們講解了如果添加自己的驅動文件,那么我們就直接把以前驅動文件移植過來,因為 SHT21 的驅動文件,在我以前博文 STM32L051 和 nRF52832 專欄都說明過 SHT21的程序(等本次應用篇結束我會把最終的源碼上傳的):

STM32L051測試 (三、I2C協議設備的添加測試)

nRF52832學習記錄(十一、TWI總線的應用 SHT21程序移植)

我們這里只是把裸機使用的文件改成在 RT-Thread 上使用的文件。

2.1 移植步驟

首先我們把驅動文件都拷貝過來(Datadef.h 是我個人習慣使用的一些數據類型宏定義):

編譯過后,還是正常通過除了上面報的那個延時函數的警告:

這是因為delay_us()這個函數在HAL庫中是沒有的額,以前使用裸機的時候是我自己實現的,這里我們既然使用了 RT-Thread ,在我們《RT-Thread記錄(四、RT-Thread 時鐘節拍和軟件定時器)》中正好介紹到過 RT-Thread 中有 us 延時函數,我們拿過來用用試試看。

我們把所有 delay_us 改成rt_hw_us_delay,記得包含一下頭文件:

然后把文件驅動文件中中所有的HAL_Delay改成rt_thread_mdelay,比如:

感覺已經好了……那么接下來看看效果。

2.2 使用測試

上面我們驅動移植好了,我們直接來測試一下,這里我們還是新建一個線程把,這個溫濕度讀取的線程我根據經驗,設置為192字節,然后每隔3s讀取一次溫濕度打印:


程序編譯正常沒有問題,但是跑起來出問題了…

2.3 好多的問題= =!

按鍵沒有修改,上篇文章一樣預留的

雖然占用了7000多字節,但是應該還是有空間的,但是在程序運行直接報錯:


key線程昨天測試的時候完全沒問題啊,這里居然出錯了,我考慮到今天也就多加了一個sht的線程,于是我將溫濕度讀取線程中的邏輯去掉,又出另外的問題提示:


然后想著是不是剛啟動的時候等一會讀傳感器,沒有為什么,講不出道理= =!于是:

在這個時候我忽然想到浮點數的特殊性,以前記得使用 RT-Thread 遇到過,然后網上查了下確實,rt_kprintf是不能打印浮點數的,是不是浮點數的問題。

因為上面顯示 sht21 線程棧溢出,說明線程棧給的不夠,其實按照經驗來說,是足夠的,這里不管,那我給他增加線程棧看看結果,如下圖:

好吧!還是有問題,沒救了,先把浮點數的問題處理了吧。

改了一個不打印浮點數的,結果看圖吧:

這么看來,或許應該是驅動修改的問題吧,我首先想到的就是 us延時函數,那個延時函數有問題,于是我用了裸機中的干等函數……:

(后面證明不是這個原因,us延時函數可用)

經驗不管用,雖然在使用 FreeRTOS 的時候 192字節有余:

但是在這里使用的時候,256字節大小都出錯了,直到我繼續增大:

問題的解決

到頭來,原來是這個驅動函數在 RT-Thread 線程中需要的線程棧大小相對 FreeRTOS 來說大,因為有些堆棧溢出的問題導致報錯也不一樣,而且根據以前的使用經驗,所以開始并沒有一味的想著增大線程棧空間。

后來考慮了一下,對于驅動操作來說,都是基于STM32L051芯片,這部分應該差距不大,還有一個最能的原因是打印函數,我們以前就說過打印函數很占用內存空間,rt_kprintf 是 RT-Thread 自己實現的,是不是因為這個打印函數占用空間大導致的呢? 這個目前只是猜想,后期有機會來研究一下!

回過頭切換回 RT-Thread 中的 us 延時函數,也測試成功了。

2.4 RT-Thread nano打印浮點數

1、雖然軟件包中心,有一個名為rt_vsnprintf_full的軟件包,可以打印浮點數,但是我們使用的 nano 版本并不能安裝軟件包……

RT-Thread_rt_kprintf()打印浮點數(解決方法2:添加rt_vsnprintf_full)

2、同樣 nano 版本無法使用標準libc庫……,所以無法使用vsnprintf替換rt_vsnprintf的方式:

RT-thread rt_kprintf()函數格式化輸出浮點數

3、如果做一些其他修改,使其可以支持標準C庫調用,會額外占用 RAM 空間:

rt-thread printf打印信息(包含打印浮點型float)

綜合來說看了一圈,好吧,認輸了! 打印不出來,不玩了,本次測試不太順利……

最后還是用土方法,簡單應付一下,因為后期并不需要打印,打印只是為了測試:

三、時刻關注占RAM大小

本文就添加了一個 I2C驅動, 但是上面我們經過多次測試修改,溫濕度測試線程也用到了384個字節,如果不打印出來,應該會小很多,我們后面肯定會來調整工程的。

那么還是老樣子,今天測試完成以后和以前占用空間的對比圖上一下:

加了溫濕度讀取線程以后,程序運行時候需要占用 RAM的大小: 7248 字節,我們的芯片 RAM:8192字節。

結語

本文我們了解了 RT-Thread Studio添加自定義的.c .h文件的方法,然后成功的把 I2C驅動移植過來。

雖然一個簡單的移植,缺被一個基本的問題困擾了許久,再次強調一次,在線程中使用打印函數,是很占用RAM空間的行為,以前在使用操作系統的時候就知道這個問題。

本次測試,我推斷在使用RT-Thread自己的rt_kprintf函數會比 C庫 printf 占用更多內存空間(有錯誤請指出),也算是一個小收獲。

然后就是使用 RT-Thread nano打印浮點數,雖然我最終還是樣子上打印出了浮點數= =!我沒有研究出比較滿意的方式,也算是一個小遺憾,不過話說話來,打印大多數是為了測試,正常的項目跑起來,也不需要打印這些。

沒想到本次測試這么折騰,有點累= =! 還望小伙伴多多支持,多多指教!

好了,本文就到這,謝謝大家!

總結

以上是生活随笔為你收集整理的RT-Thread 应用篇 — 在STM32L051上使用 RT-Thread (三、无线温湿度传感器 之 I2C通讯)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 精品99在线观看 | 日韩午夜影院 | 日韩欧美xxxx| 黄色日批 | 久久美| 国产wwwxxx| 视频丨9l丨白浆 | 午夜精品久久久久久久四虎美女版 | 麻豆视频国产精品 | 色超碰 | 成人av色| 激情四射av | 日本激情一区 | 亚洲欧洲久久 | 性欧美videossex精品 | 夜夜操网站 | 国产欧美日韩三级 | 正在播放经典国语对白 | 97射射| 日韩性猛交ⅹxxx乱大交 | 无码人妻一区二区三区线 | 亚洲少妇激情 | 国产1区在线观看 | 中文有码视频 | 98精品国产 | 2018天天干天天操 | 麻豆污视频 | 91传媒在线播放 | 成人精品在线观看 | 国产精品人人妻人人爽人人牛 | 国产精品日韩欧美一区二区三区 | 天天射狠狠干 | caopor在线视频 | 正在播放欧美 | 国产精品无码久久久久久 | 久久天堂视频 | 黑人性xxx | 高跟鞋调教—视频|vk | 免费污视频在线观看 | 人妖被c到高潮欧美gay | 欧美做受喷浆在线观看 | 黑鬼大战白妞高潮喷白浆 | 69成人网 | 精品视频网| 毛片免 | 一级黄色影院 | 国产精品三级久久久久久电影 | 国产精品社区 | 国产一区二区视频在线播放 | 国产精品调教 | 日韩视频在线观看一区二区 | 亚洲综合免费观看高清完整版 | 国产又黄又粗又猛又爽视频 | 椎名由奈在线观看 | 欧美一级久久 | 日b在线观看| 久久久久人妻精品一区二区三区 | 国产91久久久 | 天堂影院av| 1000部拍拍拍18勿入免费视频 | 欧美一区二区三区久久综合 | 亚洲AV无码成人精品区先锋 | 亚洲AV无码精品自拍 | 中文字幕日韩一级 | 免费激情片 | 九九九九九九精品 | 久久久久国产精品国产 | 超碰99在线 | 亚洲激情免费视频 | 日本一卡二卡在线 | 伊人激情在线 | 色伊伊| 免费人成年激情视频在线观看 | 2018天天干天天操 | 手机成人免费视频 | 中文字幕在线观看日本 | 国产精品无码久久久久久电影 | 杏导航aⅴ福利网站 | 欧亚毛片 | 两性午夜免费视频 | 欧美一区二区三区婷婷月色 | 真实的国产乱xxxx在线91 | 天堂国产 | 一区二区三区四区五区在线视频 | 婷婷午夜天 | 欧美日韩在线视频一区二区三区 | 国产人成视频在线观看 | 日本特黄特黄刺激大片 | 免费观看久久久 | 韩日黄色片| 小泽玛利亚一区二区三区视频 | 天天干天天操天天插 | 老子午夜影院 | 法国极品成人h版 | 91成人品 | 嫩草av91 | 777免费视频| 翔田千里一区二区三区av | 91免费视频国产 |