99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

STM32L051上使用RT-Thread (五、完結(jié)篇)

矜辰所致 ? 來源:矜辰所致 ? 作者:矜辰所致 ? 2022-06-29 10:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

應(yīng)用篇-在STM32L051上使用RT-Thread 第五篇,也是本次應(yīng)用的完結(jié)篇。
把按鍵驅(qū)動(dòng)移植好,定時(shí)器使用加上。

目錄

  • 前言
  • 一、按鍵操作
    • 1.1 按鍵驅(qū)動(dòng)移植
    • 1.2 按鍵測(cè)試
  • 二、定時(shí)器操作
    • 2.1 定時(shí)器邏輯添加
    • 2.2 定時(shí)器測(cè)試
  • 三、時(shí)刻關(guān)注占RAM大小
    • 最后大小說明
  • 結(jié)語

前言

在完成基本的傳感器采集,串口通訊移植修改后,其實(shí)作為一個(gè)單品傳感器已經(jīng)是正常的工作起來了,但是如果我們?cè)谑褂卯a(chǎn)品的時(shí)候有特殊情況,比如需要發(fā)送特定的無線報(bào)文,或者設(shè)置不同的工作模式之類的操作,我們就可以通過按鍵操作進(jìn)行一定的配置。

所以本文會(huì)移植一個(gè)按鍵驅(qū)動(dòng),能夠支持按鍵 短按,固定時(shí)間的長(zhǎng)按等操作,同時(shí)周期執(zhí)行的程序改成使用定時(shí)器來控制。
本文是《RT-Thread 應(yīng)用篇 — 在STM32L051上使用 RT-Thread》完結(jié)篇
??
一個(gè)簡(jiǎn)單的應(yīng)用:無線溫濕度傳感器
??
一個(gè)小內(nèi)存的芯片:STM32L051C8T6
??
一個(gè)小而美麗的物聯(lián)網(wǎng)操作系統(tǒng):RT-Thread
??
本 RT-Thread 專欄記錄的開發(fā)環(huán)境:
RT-Thread記錄(一、RT-Thread 版本、RT-Thread Studio開發(fā)環(huán)境 及 配合CubeMX開發(fā)快速上手)
RT-Thread記錄(二、RT-Thread內(nèi)核啟動(dòng)流程 — 啟動(dòng)文件和源碼分析)
??
RT-Thread 內(nèi)核篇系列博文鏈接:
RT-Thread記錄(三、RT-Thread 線程操作函數(shù)及線程管理與FreeRTOS的比較)
RT-Thread記錄(四、RT-Thread 時(shí)鐘節(jié)拍和軟件定時(shí)器)
RT-Thread記錄(五、RT-Thread 臨界區(qū)保護(hù))
RT-Thread記錄(六、IPC機(jī)制之信號(hào)量、互斥量和事件集)
RT-Thread記錄(七、IPC機(jī)制之郵箱、消息隊(duì)列)
RT-Thread記錄(八、理解 RT-Thread 內(nèi)存管理)
RT-Thread記錄(九、RT-Thread 中斷處理與階段小結(jié))
??
在STM32L051C8 上使用 RT-Thread 應(yīng)用篇系列博文連接:
RT-Thread 應(yīng)用篇 — 在STM32L051上使用 RT-Thread (一、無線溫濕度傳感器 之 新建項(xiàng)目)
RT-Thread 應(yīng)用篇 — 在STM32L051上使用 RT-Thread (二、無線溫濕度傳感器 之 CubeMX配置)
RT-Thread 應(yīng)用篇 — 在STM32L051上使用 RT-Thread (三、無線溫濕度傳感器 之 I2C通訊)
RT-Thread 應(yīng)用篇 — 在STM32L051上使用 RT-Thread (四、無線溫濕度傳感器 之 串口通訊)

一、按鍵操作

在初步的測(cè)試框架中,我當(dāng)時(shí)使用的是簡(jiǎn)單的按鍵處理方式,這里也上一下源碼做測(cè)試備份:

static void key_thread_entry(void *par){
    while(1){
        if(key1_read == 0){
            rt_thread_mdelay(10); //去抖動(dòng)
            if(key1_read == 0){
                //按鍵按下,do something
                while(key1_read == 0){rt_thread_mdelay(10);}
            }
        }
        if(key2_read == 0){
            rt_thread_mdelay(10); //去抖動(dòng)
            if(key2_read == 0){
                //按鍵按下,do something
                while(key2_read == 0){rt_thread_mdelay(10);}
            }
        }
        rt_thread_mdelay(1);
    }
}

但是在實(shí)際中,如果要實(shí)現(xiàn)長(zhǎng)按,組合按之類的方式,還是需要一個(gè)適用的按鍵驅(qū)動(dòng)。

1.1 按鍵驅(qū)動(dòng)移植

按鍵驅(qū)動(dòng) 是用我自己一直使用的一個(gè),在我博文以前上傳過,.c.h文件都開源了:

幾個(gè)實(shí)用的按鍵驅(qū)動(dòng)(STM32、51都適用)

老樣子,把文件放置我們自己的驅(qū)動(dòng)文件夾下面,然后右擊,同步 scons 配置至項(xiàng)目:

poYBAGK7uk-AVjIiAAAbjMfyHEg474.png

因?yàn)檫@個(gè)驅(qū)動(dòng)程序源碼都給了,移植替換也不麻煩,所以簡(jiǎn)單看看:

pYYBAGK7uk-Ac5IbAAEGMxc1Qe4134.png

1.2 按鍵測(cè)試

使用方式我介紹按鍵的博文也說過,在這個(gè)應(yīng)用上只使用了3中按鍵方式:

poYBAGK7ulCAJrYWAAC4fnOBKs0731.png

這里直接看下測(cè)試結(jié)果,按鍵正常:

pYYBAGK7ulCANWWpAABUPpnARQM943.png

按鍵移植成功,因?yàn)槲覀儼存I調(diào)用都使用的是開始已經(jīng)創(chuàng)建好的看見線程,所以相對(duì)之前額外的內(nèi)存占用是沒有的,多的只是一個(gè)全局變量Timer21_count,如下圖:

poYBAGK7ulCAAMIjAAChSVMlFp8882.png

細(xì)節(jié)說明: unsigned int 幾個(gè)字節(jié)在不同編譯器或者平臺(tái)可能是不一樣的,我們只需簡(jiǎn)單的測(cè)試一下即可:

pYYBAGK7ulGAAFnzAABBZtLGY-U560.png

二、定時(shí)器操作

雖然按鍵也用到了定時(shí)器,但是那個(gè)定時(shí)器是專門給按鍵驅(qū)動(dòng)用的,我們開始還初始化了一個(gè)定時(shí)時(shí)間1S的定時(shí)器,開始也測(cè)試過了。

在使用裸機(jī)的時(shí)候,需要一定時(shí)間周期性的進(jìn)行某項(xiàng)工作,我們只能使用定時(shí)器,而用了操作系統(tǒng),在單獨(dú)的線程中直接使用操作系統(tǒng)的延時(shí)函數(shù)也可以達(dá)到效果。

在一般的應(yīng)用,定時(shí)時(shí)間沒有那么嚴(yán)格要求的時(shí)候,完全可以直接使用rt_thread_mdelay,比如原始的周期處理:

poYBAGK7ulGAMSKJAABqtG8C-6c844.png

但是復(fù)雜一些的應(yīng)用,都使用rt_thread_mdelay,線程多了管理起來就不方便了,如果使用定時(shí)器配合信號(hào)量(在裸機(jī)中就是全局變量)那就是比較規(guī)范的方式了。

2.1 定時(shí)器邏輯添加

我們需要給定時(shí)器創(chuàng)建一個(gè)計(jì)數(shù)的全局變量,然后到了一定的時(shí)間給需要執(zhí)行任務(wù)的線程通知,這個(gè)通知我們新建信號(hào)量實(shí)現(xiàn)(雖然通知也可以使用全局變量),但是既然用了RT-Thread ,就把IPC機(jī)制用起來,這樣保證良好的習(xí)慣也為以后做大的應(yīng)用打下好的基礎(chǔ)。

我們操作如下圖所示:

pYYBAGK7ulGAWQvIAACUV1rwzI4996.png

所以我們?cè)嫉闹芷谔幚泶a改成如下所示:

poYBAGK7ulGAdFfQAABmdDqs6Y8901.png

2.2 定時(shí)器測(cè)試

測(cè)試也沒什么,串口通訊接收?qǐng)?bào)文也正常,今天改的按鍵和定時(shí)器也正常。

最后測(cè)試所有的功能和結(jié)果都正常:

pYYBAGK7ulGAcTEKAAEWQ7kR8HY007.png

三、時(shí)刻關(guān)注占RAM大小

今天的工作做完,本應(yīng)用篇也算完結(jié)了,最后還是要看一下占用RAM的大?。?/p> poYBAGK7ulGADZ0OAAEjyID5qUU722.png

最終的程序,運(yùn)行時(shí)候需要占用 RAM的大?。?7456 字節(jié),我們的芯片 RAM:8192字節(jié)。

最后大小說明

從一開始,因?yàn)槲覀兪窃谛?nèi)存的芯片上使用 RT-Thread ,所以每一篇每改一次代碼博主都會(huì)記錄內(nèi)存使用大小。

最終程序我們上面記錄需要使用的 RAM 大小為 7456 字節(jié),實(shí)際上本次應(yīng)用內(nèi)存占用還有一定的優(yōu)化空間的,比如主線程2K還是可以減少一點(diǎn),按鍵線程其實(shí)不需要512字節(jié)等等。。。

但是因?yàn)楸敬螒?yīng)用也確實(shí)簡(jiǎn)單,而且內(nèi)存也沒到溢出的地步,所以就沒有遇到瓶頸也就沒有特意的花精力去處理每一個(gè)線程合適的大小。

其實(shí)在文章中,我也經(jīng)常說明一些影響內(nèi)存的細(xì)節(jié)問題,希望看過我文章的小伙伴都有體會(huì)。

結(jié)語

?? 我希望大家都能夠自己去掌握自己程序的內(nèi)存。??

掌握自己程序內(nèi)存占用,首先要理解數(shù)據(jù)在芯片上的存放方式。

使用了操作系統(tǒng),也得明白任務(wù)棧和系統(tǒng)棧的關(guān)系。對(duì)于每個(gè)線程,哪些操作需要占用內(nèi)存都需要一定的了解。

對(duì)于基本的程序設(shè)計(jì),也得明白 不同關(guān)鍵字修飾的變量存放的不同位置。

其實(shí)所有的這些我在自己的文章中都有過說明,相信關(guān)注博主的小伙伴一定有所收獲!
??
一個(gè)簡(jiǎn)單的應(yīng)用:無線溫濕度傳感器
??
一個(gè)小內(nèi)存的芯片:STM32L051C8T6
??
一個(gè)小而美麗的物聯(lián)網(wǎng)操作系統(tǒng):RT-Thread

好了,到本文為止,我們《RT-Thread 應(yīng)用篇 — 在STM32L051上使用 RT-Thread》系列也就算完結(jié)了。

希望小伙伴多多支持,多多指教!謝謝!

從下一篇文章開始我們就要開始學(xué)習(xí) RT-Thread 的 I/O 設(shè)備模型了。

審核編輯:湯梓紅

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

    關(guān)注

    1

    文章

    398

    瀏覽量

    28690
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3298

    瀏覽量

    118868
  • 按鍵驅(qū)動(dòng)
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

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

    關(guān)注

    32

    文章

    1406

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    STM32L051使用RT-Thread (一、新建項(xiàng)目)

    學(xué)完了 RT-Thread 內(nèi)核基礎(chǔ),來使用 RT-Thread 實(shí)現(xiàn)一個(gè)小應(yīng)用。 硬件平臺(tái):STM32L051C8 TCM310(Enocean無線芯片) 軟件平臺(tái):RT-Thread
    的頭像 發(fā)表于 06-25 20:45 ?6648次閱讀
    <b class='flag-5'>STM32L051</b><b class='flag-5'>上</b>使用<b class='flag-5'>RT-Thread</b> (一、新建項(xiàng)目)

    STM32L051使用RT-Th (二、CubeMX配置)

    應(yīng)用-在STM32L051使用RT-Thread 第二,使用STM32CubeMX 進(jìn)行對(duì)
    的頭像 發(fā)表于 06-26 14:02 ?5221次閱讀
    <b class='flag-5'>STM32L051</b><b class='flag-5'>上</b>使用<b class='flag-5'>RT</b>-Th (二、CubeMX配置)

    STM32L051使用RT-Threa (三、I2C通訊)

    應(yīng)用-在STM32L051使用RT-Thread 第三,學(xué)習(xí)RT-Thread Studi
    的頭像 發(fā)表于 06-27 10:32 ?4357次閱讀
    <b class='flag-5'>STM32L051</b><b class='flag-5'>上</b>使用<b class='flag-5'>RT</b>-Threa (三、I2C通訊)

    STM32L051使用RT-Thread (四、串口通訊)

    應(yīng)用-在STM32L051使用RT-Thread 第四,巧妙的使用信號(hào)量處理串口通訊。
    的頭像 發(fā)表于 06-28 10:59 ?5918次閱讀
    <b class='flag-5'>STM32L051</b><b class='flag-5'>上</b>使用<b class='flag-5'>RT-Thread</b> (四、串口通訊)

    總結(jié)STM32L051的STOP模式

    本文總結(jié)下STM32L051的STOP模式,通過外部中斷「按鍵、串口」進(jìn)行喚醒。
    發(fā)表于 08-13 09:36

    【原創(chuàng)精選】RT-Thread征文精選技術(shù)文章合集

    、I2C通訊)STM32L051使用RT-Thread (四、串口通訊)STM32L051使用RT-
    發(fā)表于 07-26 14:56

    基于STM32F4和RT-Thread通用BootLoader使用經(jīng)驗(yàn)

    基于STM32F4、RT-Thread通用BootLoader使用經(jīng)驗(yàn)
    的頭像 發(fā)表于 02-27 17:23 ?6897次閱讀
    基于<b class='flag-5'>STM32</b>F4和<b class='flag-5'>RT-Thread</b>通用BootLoader使用經(jīng)驗(yàn)

    RT-Thread系統(tǒng)移植到STM32f103

    RT-Thread系統(tǒng)移植到STM32f103
    發(fā)表于 12-09 12:51 ?26次下載
    <b class='flag-5'>RT-Thread</b>系統(tǒng)移植到<b class='flag-5'>STM32</b>f103

    RT-Thread STM32 配置系統(tǒng)時(shí)鐘(使用外部晶振)

    RT-Thread STM32 配置系統(tǒng)時(shí)鐘開發(fā)環(huán)境芯片:STM32F103RCT6RT-Thread Studio: V1.0.6(現(xiàn)在已經(jīng)更新到1.1.3,由于本人使用RTT開發(fā)已經(jīng)有一段時(shí)間了
    發(fā)表于 12-14 18:45 ?15次下載
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>STM32</b> 配置系統(tǒng)時(shí)鐘(使用外部晶振)

    RT-Thread全球技術(shù)大會(huì):在RT-Thread編寫測(cè)試用例

    RT-Thread全球技術(shù)大會(huì):在RT-Thread編寫測(cè)試用例 ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 16:28 ?1760次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會(huì):在<b class='flag-5'>RT-Thread</b><b class='flag-5'>上</b>編寫測(cè)試用例

    RT-Thread文檔_RT-Thread 簡(jiǎn)介

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

    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> 潘多拉 <b class='flag-5'>STM32L</b>475 上手指南

    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 介紹與移植

    STM32L4 RT-Thread Studio解決lptimer不工作的問題

    使用RT-Thread Studio 生成的基于STM32L4 的工程,發(fā)現(xiàn)開啟PM框架后,lptimer不能工作。
    的頭像 發(fā)表于 06-07 14:29 ?1421次閱讀
    <b class='flag-5'>STM32L</b>4 <b class='flag-5'>RT-Thread</b> Studio解決lptimer不工作的問題

    【RTT征文精選】畫板子、敲代碼、玩RTOS、搞Linux,大家一起“秀”!

    //STM32L051使用RT-Thread(一、新建項(xiàng)目)STM32L051使用RT-Th
    的頭像 發(fā)表于 08-25 09:56 ?989次閱讀
    【RTT征文精選】畫板子、敲代碼、玩RTOS、搞Linux,大家一起“秀”!