91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

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

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

基于RT-Thread操作系統(tǒng)軟件框架設(shè)計(jì)思路

嵌入式應(yīng)用開(kāi)發(fā) ? 來(lái)源:嵌入式應(yīng)用開(kāi)發(fā) ? 作者:嵌入式應(yīng)用開(kāi)發(fā) ? 2022-07-07 10:09 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

項(xiàng)目中使用到rt—thread就會(huì)涉及到對(duì)操作系統(tǒng)的一個(gè)軟件框架的搭建過(guò)程思路,這里拿已經(jīng)完成城的項(xiàng)目做一些分享,希望對(duì)讀者有些啟發(fā)。

項(xiàng)目要求:讀取溫濕度,串口打印,數(shù)據(jù)定時(shí)發(fā)送,lcd顯示,平臺(tái)上傳,按鍵設(shè)置,SD 卡存儲(chǔ)等

系統(tǒng)涉及到的硬件由以下幾部分組成:

1.交互輸入部分:按鍵

2. 輸出部分:TFTLCD屏幕顯示,SD卡存儲(chǔ),led燈報(bào)警

3. 傳感器采集:DHT11溫濕度采集

4. 通訊部分:串口,wifi模塊

5. 計(jì)時(shí)部分:RTC時(shí)鐘計(jì)時(shí)

在這里插入圖片描述硬件連接示意圖

根據(jù)硬件的連接與系統(tǒng)要求實(shí)現(xiàn)的功能來(lái)看:

1.首先要做的就是根據(jù)硬件電路寫(xiě)好底層驅(qū)動(dòng)(HAL)

2.進(jìn)行函數(shù)的劃分與封裝,將應(yīng)用層需要的函數(shù)封裝好

3.進(jìn)行中斷函數(shù)的撰寫(xiě)與封裝(可以將該這一步與第2步同時(shí)進(jìn)行)

4.由于中斷的優(yōu)先級(jí)比任何的線(xiàn)程優(yōu)先級(jí)都要高因此需要統(tǒng)籌線(xiàn)程與中斷的關(guān)系

5.繼續(xù)線(xiàn)程的規(guī)劃,線(xiàn)程優(yōu)先級(jí)定義及應(yīng)用層函數(shù)的撰寫(xiě)

軟件程序結(jié)構(gòu):

在這里插入圖片描述

項(xiàng)目系統(tǒng)要求定期發(fā)送數(shù)據(jù)到平臺(tái),其中在定時(shí)器超函數(shù)中周期性采集溫濕度信息,并發(fā)送消息隊(duì)列到處理緩存?zhèn)鞲衅餍畔⒌木€(xiàn)程和超溫處理線(xiàn)程,同時(shí)發(fā)布采集到一次傳感器的事件。

超溫處理線(xiàn)程接收消息判斷是否超過(guò)溫度,wifi模塊通過(guò)串口2將溫濕度信息發(fā)送給wifi模塊,由wifi模塊實(shí)時(shí)上傳到服務(wù)器。同時(shí)串口溫度上傳任務(wù)同時(shí)接收定時(shí)器發(fā)送的事件和PC機(jī)通過(guò)串口1發(fā)送的獲取溫度標(biāo)志所觸發(fā)的事件。當(dāng)采集到傳感器信息且上位機(jī)要求獲取溫濕度信息的事情同時(shí)發(fā)生時(shí),通過(guò)串口1向PC發(fā)送溫濕度信息。由于SD卡存儲(chǔ)緩慢,所以由溫濕度信息緩存線(xiàn)程在內(nèi)存池中申請(qǐng)內(nèi)存,并將獲取到的溫濕度信息緩存到內(nèi)存中,同時(shí)更新LCD曲線(xiàn)繪制的歷史溫濕度信息緩存。

LCD處理線(xiàn)程處理IO口中斷發(fā)送過(guò)來(lái)的標(biāo)志信息,并據(jù)此顯示相應(yīng)的菜單,溫度濕度信息,顯示所設(shè)定采樣頻率與閾值的情況等。

SD卡存儲(chǔ)任務(wù)作為后臺(tái)任務(wù),從緩存存儲(chǔ)溫濕度信息的內(nèi)存中讀取溫濕度信息,并通過(guò)FATFS文件系統(tǒng)將相應(yīng)的溫濕度信息存入SD卡,同時(shí)根據(jù)每片內(nèi)存的頭部時(shí)間信息以及定時(shí)器采樣頻率推算本片內(nèi)存中其他數(shù)據(jù)的時(shí)間信息,并將采樣時(shí)間一起保存到SD卡中。在存儲(chǔ)完一片內(nèi)存片后,釋放該內(nèi)存到內(nèi)存池之中。流程圖如下所示:

在這里插入圖片描述

代碼部分這里貼出主函數(shù)中的基本邏輯框架:

int main(void)
{	
    
  /***********************掛載SD卡并打開(kāi)文件*******************************/
	while(SD_Init())//檢測(cè)不到SD卡
	{
		LCD_ShowString(30,150,200,16,16,"SD Card Error!");				
		LCD_ShowString(50,150,200,16,16,"Please Check! ");
	}
  
  //*****************消息隊(duì)列創(chuàng)建	*****************************************/
  //申請(qǐng)內(nèi)存池
	//初始化控制塊
    rt_mp_init(&tem_mp, "temmp", &temmempool[0], sizeof(temmempool), mem_slice);
	  rt_mp_init(&hum_mp, "hummp", &hummempool[0], sizeof(hummempool), mem_slice);
	    rt_err_t result2;
    /* 初始化消息隊(duì)列 */
    result= rt_mq_init(& mq_DHT11_tem,
                        " mq_DHT11_tem",
                        &msg_DHT11_pool_tem[0],               /* msg_pool */
                        sizeof(tem),                          /* 每個(gè)消息的大小*/
                        sizeof(msg_DHT11_pool_tem),                     /* msg_pool大小*/
                        RT_IPC_FLAG_FIFO); 
    result2 = rt_mq_init(& mq_DHT11_hum,
                        " mq_DHT11_hum",
                        &msg_DHT11_pool_hum[0],               /* msg_pool */
                        sizeof(hum),                          /* 每個(gè)消息的大小*/
                        sizeof(msg_DHT11_pool_hum),                     /* msg_pool大小*/
                        RT_IPC_FLAG_FIFO); 
   
	//定時(shí)器線(xiàn)程
    /* DHT11 TIMER */		
    DH11_timer = rt_timer_create("DHT11_get", timeout1,
                             RT_NULL, samp_freq,
                             RT_TIMER_FLAG_PERIODIC);
    /* 啟動(dòng)*/
    if (DH11_timer  != RT_NULL) 
			  flag=rt_timer_start(DH11_timer );	
	  if(flag==RT_EOK)
			 rt_kprintf("DH11_timer start successfull\n");	

	//***********************事件處理線(xiàn)程*******************************************/
		uart_deal_event =                          /* 線(xiàn)程控制塊指針 */
    rt_thread_create( "usart_deal_event",              /* 線(xiàn)程名字 */
                      uart_deal_thread_entry,   /* 線(xiàn)程入口函數(shù) */
                      RT_NULL,             /* 線(xiàn)程入口函數(shù)參數(shù) */
                      256,                 /* 線(xiàn)程棧大小 */
                      2,                   /* 線(xiàn)程的優(yōu)先級(jí) */
                      20);                 /* 線(xiàn)程時(shí)間片 */
                   
    /* 啟動(dòng)線(xiàn)程,開(kāi)啟調(diào)度 */
    if (uart_deal_event != RT_NULL)
        rt_thread_startup(uart_deal_event);
    else
         rt_kprintf("led_thread_creat_error");
		
////*******************創(chuàng)建內(nèi)存任務(wù)線(xiàn)程***********************************************************//
   for (j = 0; j < 48; j++) ptr[j] = RT_NULL;

    //創(chuàng)建線(xiàn)程
    recevDHT11 = rt_thread_create("recevDHT11", recevDHT11_entry, RT_NULL,
                            512,
                            4 ,20);
		
    if (recevDHT11 != RT_NULL)
         rt_thread_startup(recevDHT11);

//*******************創(chuàng)建釋放內(nèi)存堆寫(xiě)入SD卡線(xiàn)程***********************************************************//	
    thread_mp_release = rt_thread_create("thread_mp_release", thread_mp_release_entry, RT_NULL,
                            1024,
                            4, 20);
    if (thread_mp_release != RT_NULL)
        rt_thread_startup(thread_mp_release);
		
///*******************創(chuàng)LCD 顯示繪圖線(xiàn)程***********************************************************//	
		lcd_show= rt_thread_create("lcd_showwave", lcd_show_entry, RT_NULL,
                            512,
                            3, 30);
    if (lcd_show != RT_NULL)
         rt_thread_startup(lcd_show );
//*******************超溫處理線(xiàn)程的創(chuàng)建***********************************************************//			
		
		over_temhum = rt_thread_create("over_temhum ", overtem_entry, RT_NULL,
                            256,
                            1, 20);
    if (lcd_show != RT_NULL)
         rt_thread_startup(over_temhum  );		
//*******************wifi線(xiàn)程創(chuàng)建***********************************************************//			
		
		wifi= rt_thread_create("wifi ", wifi_entry, RT_NULL,
                            128,
                            2, 20);
    if (wifi != RT_NULL)
         rt_thread_startup(wifi);	
  
     
//*************測(cè)試wifi模塊************************************************************************//
}


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

    關(guān)注

    37

    文章

    7152

    瀏覽量

    125618
  • 軟件框架
    +關(guān)注

    關(guān)注

    0

    文章

    22

    瀏覽量

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

    關(guān)注

    32

    文章

    1409

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    基于RT-Thread的RoboMaster電控框架設(shè)計(jì)

    由于 RT-Thread 穩(wěn)定高效的內(nèi)核,豐富的文檔教程,積極活躍的社區(qū)氛圍,以及設(shè)備驅(qū)動(dòng)框架、Kconfig、Scons、日志系統(tǒng)、海量的軟件包……很難不選擇
    發(fā)表于 09-06 15:21 ?1047次閱讀

    基于RT-Thread操作系統(tǒng)衍生rt-smart實(shí)時(shí)操作系統(tǒng)簡(jiǎn)介

    1、rt-smart 實(shí)時(shí)操作系統(tǒng)簡(jiǎn)介RT-Thread Smart(簡(jiǎn)稱(chēng) rt-smart)嵌入式實(shí)時(shí)操作系統(tǒng)是基于
    發(fā)表于 06-22 17:56

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

    基于RT-Thread操作系統(tǒng)軟件框架設(shè)計(jì)思路RTthread線(xiàn)程啟動(dòng)詳解
    發(fā)表于 07-26 14:56

    RT-Thread操作系統(tǒng)有哪些優(yōu)勢(shì)?

    軟件包和SDK,擴(kuò)展系統(tǒng)功能 開(kāi)發(fā)者說(shuō),RT-Thread是最簡(jiǎn)潔,優(yōu)雅的開(kāi)源操作系統(tǒng)之一,簡(jiǎn)單易用。 RT-Thread 主要采用 C 語(yǔ)
    發(fā)表于 06-28 08:16

    RT-Thread編程指南

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

    RT-Thread用戶(hù)手冊(cè)

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

    RT Thread操作系統(tǒng)教程及資料

    ## RT-Thread 簡(jiǎn)介 ## RT-Thread RTOS是一款來(lái)自中國(guó)的開(kāi)源實(shí)時(shí)操作系統(tǒng), 由國(guó)內(nèi)一些專(zhuān)業(yè)開(kāi)發(fā)人員開(kāi)發(fā)、維護(hù)。 它不僅僅是一款高效、穩(wěn)定的實(shí)時(shí)核心,也是一套
    發(fā)表于 05-11 14:54 ?2次下載

    RT-Thread軟件包定義和使用

    RT-Thread軟件包是運(yùn)行于RT-Thread物聯(lián)網(wǎng)操作系統(tǒng)平臺(tái)上,面向不同應(yīng)用領(lǐng)域的通用軟件組件 。
    的頭像 發(fā)表于 05-21 11:29 ?1.1w次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>軟件</b>包定義和使用

    RT-Thread Smart微內(nèi)核操作系統(tǒng)發(fā)布!

    9月1日,由上海睿賽德電子科技有限公司舉辦的RT-Thread Smart微內(nèi)核操作系統(tǒng)發(fā)布會(huì)于北京圓滿(mǎn)落幕,發(fā)布會(huì)以見(jiàn)微為主題,邀請(qǐng)到中國(guó)工程院院士、產(chǎn)業(yè)專(zhuān)家、高校教授及行業(yè)從業(yè)人員100余位蒞臨
    的頭像 發(fā)表于 09-09 10:49 ?3039次閱讀

    國(guó)民技術(shù)攜手RT-Thread共同推進(jìn)MCU與RT-Thread操作系統(tǒng)廣泛適配

    日前,國(guó)民技術(shù)股份有限公司與知名物聯(lián)網(wǎng)操作系統(tǒng)廠(chǎng)商睿賽德科技(RT-Thread)簽署會(huì)員合作協(xié)議,正式成為RT-Thread高級(jí)會(huì)員。國(guó)民技術(shù)將基于通用MCU和RT-Thread物聯(lián)
    的頭像 發(fā)表于 12-16 09:56 ?2664次閱讀

    RT-Thread實(shí)時(shí)操作系統(tǒng)安裝向?qū)?/a>

    、簡(jiǎn)易開(kāi)發(fā)、超低功耗、高安全性的物聯(lián)網(wǎng)操作系統(tǒng)RT-Thread 擁有良好的軟件生態(tài),支持市面上所有主流的編譯工具如 GCC、Keil、IAR 等,工具鏈完善、友好,支持各類(lèi)標(biāo)準(zhǔn)接口。
    發(fā)表于 04-02 09:43 ?7次下載

    RT-Thread操作系統(tǒng)的FreeRTOS兼容層

    的兼容項(xiàng)目中。 1 概述 這是一個(gè)針對(duì)RT-Thread國(guó)產(chǎn)操作系統(tǒng)的FreeRTOS操作系統(tǒng)兼容層,可以讓原有基于FreeRTOS操作系統(tǒng)的項(xiàng)目快速、無(wú)感地遷移到
    的頭像 發(fā)表于 01-14 00:55 ?2073次閱讀

    淺析RT-Thread設(shè)備驅(qū)動(dòng)框架

    RT-Thread 設(shè)備框架屬于組件和服務(wù)層,是基于 RT-Thread 內(nèi)核之上的上層軟件。設(shè)備框架是針對(duì)某一類(lèi)外設(shè),抽象出來(lái)的一套統(tǒng)一的
    的頭像 發(fā)表于 08-07 15:39 ?2607次閱讀

    基于 RT-Thread 的 RoboMaster 電控框架(一)

    由于 RT-Thread 穩(wěn)定高效的內(nèi)核,豐富的文檔教程,積極活躍的社區(qū)氛圍,以及設(shè)備驅(qū)動(dòng)框架、Kconfig、Scons、日志系統(tǒng)、海量的軟件包……很難不選擇
    的頭像 發(fā)表于 09-19 19:55 ?1215次閱讀

    新書(shū)發(fā)布——《實(shí)時(shí)操作系統(tǒng)應(yīng)用技術(shù):RT-Thread與ARM編程實(shí)踐》

    RT-Thread又一本新書(shū)《實(shí)時(shí)操作系統(tǒng)應(yīng)用技術(shù)——基于RT-Thread與ARM的編程實(shí)踐》發(fā)布,標(biāo)志著RT-Thread生態(tài)和實(shí)時(shí)操作系統(tǒng)
    的頭像 發(fā)表于 05-11 08:35 ?1400次閱讀
    新書(shū)發(fā)布——《實(shí)時(shí)<b class='flag-5'>操作系統(tǒng)</b>應(yīng)用技術(shù):<b class='flag-5'>RT-Thread</b>與ARM編程實(shí)踐》
    主站蜘蛛池模板: 特级一级毛片视频免费观看 | 亚洲国产成人久久一区www | 一级片 在线播放 | 午夜肉伦伦影院在线观看 | 黄色3急| 免费一级毛片视频 | 手机福利视频 | 免费大片黄日本在线观看 | 视频一区日韩 | 国产www在线播放 | 欧美成人伊人久久综合网 | 天天干影视 | 国产裸露片段精华合集链接 | 天天干天天操天天摸 | 嫩草影院播放地址一二三 | 热99视频 | 手机看片www xiao2b cm | 一级片在线观看免费 | 四虎影视色费永久在线观看 | 性xxxx奶大欧美高清 | 在线观看一区二区三区视频 | 狠狠色噜噜综合社区 | 国产精品亚洲四区在线观看 | 欧美天堂在线视频 | 男女全黄做爰视频 | 岬奈奈美在线 国产一区 | 日本三级日本三级日本三级极 | 日韩综合nv一区二区在线观看 | 日本三级黄色网址 | 日本69sex护士xxx | 欧美色爱综合 | 亚洲嫩草影院在线观看 | 草伊人 | 欧美午夜网站 | 亚洲天天综合 | 日本黄色绿像 | susu成人影院 | 天堂社区在线观看 | 操你啦在线视频 | yy6080亚洲半夜理论一级毛片 | 男人视频网|