欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

一種軟件框架,實(shí)現(xiàn)RTOS的部分功能

STM32嵌入式開(kāi)發(fā) ? 來(lái)源:gitee ? 作者:gitee ? 2022-04-08 10:49 ? 次閱讀

介紹

一種無(wú)OS的MCU實(shí)用軟件框架,包括任務(wù)輪詢管理,命令管理器、低功耗管理、環(huán)形緩沖區(qū)等實(shí)用模塊。系統(tǒng)中廣泛利用自定義段技術(shù)減少各個(gè)模塊間的耦合關(guān)系,大大提供程序的可維護(hù)性。

主要功能

  • 支持模塊自動(dòng)化管理,并提供不同優(yōu)先等級(jí)初始化聲明接口。
  • 支持任務(wù)輪詢管理,通過(guò)簡(jiǎn)單的宏聲明即可實(shí)現(xiàn),不需要復(fù)雜的聲明調(diào)用。
  • 支持低功耗管理,休眠與喚醒通知。
  • 支持命令行解析,命令注冊(cè)與執(zhí)行。
  • blink設(shè)備支持,統(tǒng)一管理LED、震動(dòng)馬達(dá)、蜂鳴器

使用說(shuō)明

完整的代碼可以參考工程文件,系統(tǒng)開(kāi)發(fā)平臺(tái)如下:

MCU:STM32F401RET6

IDE:IAR 7.4或者Keil MDK 4.72A

任務(wù)初始化及任務(wù)輪詢管理(module)

使用此模塊前需要系統(tǒng)提供滴答定時(shí)器,用于驅(qū)動(dòng)任務(wù)輪詢作業(yè)。(參考platform.c)

//定時(shí)器中斷(提供系統(tǒng)滴答)
voidSysTick_Handler(void)
{
systick_increase(SYS_TICK_INTERVAL);//增加系統(tǒng)節(jié)拍
}

注冊(cè)初始化入口及任務(wù)(參考自key_task.c)

staticvoidkey_init(void)
{
/*dosomething*/
}

staticvoidkey_scan(void)
{
/*dosomething*/
}

module_init("key",key_init);//注冊(cè)按鍵初始化接口
driver_register("key",key_scan,20);//注冊(cè)按鍵任務(wù)(20ms輪詢1次)

命令管理器(cli)

適用于在線調(diào)試、參數(shù)配置等(參考使用cli_task.c),用戶可以通過(guò)串口輸出命令行控制設(shè)備行為、查詢?cè)O(shè)備狀態(tài)等功能。

命令格式

cli支持的命令行格式如下:

< param1> < param2> < paramn> < > ,< param1>, < param2>, < paramn>, < >

每行命令包含一個(gè)命令名稱+命令參數(shù)(可選),命令名稱及參數(shù)可以通過(guò)空格或者','進(jìn)行分隔。

系統(tǒng)默認(rèn)命令

cli系統(tǒng)自帶了2條默認(rèn)命令,分別是"?"與"help"命令,輸入他們可以列出當(dāng)前系統(tǒng)包含的命令列表,如下所示:

?-aliasfor'help'
help-listallcommand.
pm-Lowpowercontrolcommand
reset-resetsystem
sysinfo-showsysteminfomation.

適配命令管理器

完整的例子可以參考cli_task.c.

staticcli_obj_tcli;/*命令管理器對(duì)象*/

/*
*@brief命令行任務(wù)初始化
*@returnnone
*/
staticvoidcli_task_init(void)
{
cli_port_tp={tty.write,tty.read};/*讀寫(xiě)接口*/

cli_init(&cli,&p);/*初始化命令行對(duì)象*/

cli_enable(&cli);

cli_exec_cmd(&cli,"sysinfo");/*顯示系統(tǒng)信息*/
}

/*
*@brief命令行任務(wù)處理
*@returnnone
*/
staticvoidcli_task_process(void)
{
cli_process(&cli);
}

module_init("cli",cli_task_init);
task_register("cli",cli_task_process,10);/*注冊(cè)命令行任務(wù)*/

命令注冊(cè)

以復(fù)位命令為例(參考cmd_devinfo.c):

#include"cli.h"
//...
/*
*@brief復(fù)位命令
*/
intdo_cmd_reset(structcli_obj*o,intargc,char*argv[])
{
NVIC_SystemReset();
return0;
}cmd_register("reset",do_cmd_reset,"resetsystem");

低功耗管理器(pm)

控制間歇運(yùn)行,降低系統(tǒng)功耗。其基本的工作原理是通過(guò)輪詢系統(tǒng)中各個(gè)模塊是否可以允許系統(tǒng)進(jìn)入低功耗。實(shí)際上這是一種判決機(jī)制,所有模塊都具有有票否決權(quán),即只要有一個(gè)模塊不允許休眠,那么系統(tǒng)就不會(huì)進(jìn)入休眠狀態(tài)。pm模塊在休眠前會(huì)統(tǒng)計(jì)出各個(gè)模塊會(huì)返回最小允許休眠時(shí)長(zhǎng),并以最小休眠時(shí)長(zhǎng)為單位進(jìn)行休眠。

如何適配

使用前需要通過(guò)pm_init進(jìn)行初始化適配,并提供當(dāng)前系統(tǒng)允許的最大休眠時(shí)間,進(jìn)入休眠的函數(shù)接口,基本的接口定義如下:

/*低功耗適配器---------------------------------------------------------*/
typedefstruct{
/**
*@brief系統(tǒng)最大休眠時(shí)長(zhǎng)(ms)
*/
unsignedintmax_sleep_time;
/**
*@brief進(jìn)入休眠狀態(tài)
*@param[in]time-期待休眠時(shí)長(zhǎng)(ms)
*@retval實(shí)際休眠時(shí)長(zhǎng)
*@note休眠之后需要考慮兩件事情,1個(gè)是需要定時(shí)起來(lái)給喂看門狗,否則會(huì)在休眠
*期間發(fā)送重啟.另外一件事情是需要補(bǔ)償休眠時(shí)間給系統(tǒng)滴答時(shí)鐘,否則會(huì)
*造成時(shí)間不準(zhǔn)。
*/
unsignedint(*goto_sleep)(unsignedinttime);
}pm_adapter_t;
voidpm_init(constpm_adapter_t*adt);

voidpm_enable(void);

voidpm_disable(void);

voidpm_process(void);

完成的使用例子可以參考platform-lowpower.c,默認(rèn)情況下是禁用低功耗功能的,讀者可以去除工程中原來(lái)不帶低功耗版本的platform.c,并加入platform-lowpower.c文件進(jìn)行編譯即可使用。

注冊(cè)低功耗設(shè)備

以按鍵掃描為例,正常情況下,如果按鍵沒(méi)有按下,那么系統(tǒng)休眠可以進(jìn)入休眠狀態(tài),對(duì)按鍵功能是沒(méi)有影響的。如果按鍵按下時(shí),那么系統(tǒng)需要定時(shí)喚醒并輪詢按鍵任務(wù)。

所以在一個(gè)低功耗系統(tǒng)下,為了不影響按鍵實(shí)時(shí)性需要處理好兩個(gè)事情:

  1. 系統(tǒng)休眠狀態(tài)下,如果有按鍵按下,那系統(tǒng)系統(tǒng)應(yīng)立即喚醒,以便處理接下來(lái)的掃描工作。
  2. 如果按鍵按下時(shí),系統(tǒng)可以進(jìn)入休眠,但需要定時(shí)喚醒起來(lái)輪詢按鍵任務(wù)。

對(duì)于第一種情況,將按鍵配置為邊沿中斷喚醒即可,以STM32F4為例(參考key_task.c),它支持外部中斷喚醒功能。

/*
*@brief按鍵io初始化
*PC0->key;
*@returnnone
*/
staticvoidkey_io_init(void)
{
/*EnableGPIOAclock*/
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);

gpio_conf(GPIOC,GPIO_Mode_IN,GPIO_PuPd_UP,GPIO_Pin_0);

//低功耗模式下,為了能夠檢測(cè)到按鍵,配置為中斷喚醒
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,ENABLE);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC,EXTI_PinSource0);
exti_conf(EXTI_Line0,EXTI_Trigger_Falling,ENABLE);
nvic_conf(EXTI0_IRQn,0x0F,0x0F);

key_create(&key,readkey,key_event);/*創(chuàng)建按鍵*/
}

對(duì)于第二種情況,可以通過(guò)pm_dev_register來(lái)處理,當(dāng)系統(tǒng)請(qǐng)求休眠時(shí),如果此時(shí)按鍵按下,則返回下次喚醒時(shí)間即可,如下面的例子所示。

//參考key_task.c
#include"pm.h"
/*
*@brief休眠通知
*/
staticunsignedintkey_sleep_notify(void)
{
returnkey_busy(&key)||readkey()?20:0;/*非空閑時(shí)20ms要喚醒1次*/
}pm_dev_register("key",NULL,key_sleep_notify,NULL);

blink模塊

具有閃爍特性(led, motor, buzzer)的設(shè)備(led, motor, buzzer)管理

使用步驟:

  • 需要系統(tǒng)提供滴答時(shí)鐘,blick.c中是通過(guò)get_tick()接口獲取,依賴module模塊
  • 需要在任務(wù)中定時(shí)進(jìn)行輪詢

或者通過(guò)"module"模塊的任務(wù)注冊(cè)來(lái)實(shí)現(xiàn)

task_register("blink",blink_dev_process,50);//50ms輪詢1次

LED驅(qū)動(dòng)

blink_dev_tled;//定義led設(shè)備

/*
*@brief紅色LED控制(GPIOA.8)
*@param[in]on-亮滅控制
*/
staticvoidled_ctrl(inton)
{
if(on)
GPIOA->ODR|=(1<8);
else
GPIOA->ODR&=~(1<8);
}

/*
*@briefled初始化程序
*/
voidled_init(void)
{
led_io_init(void);//ledio初始化
blink_dev_create(&led,led_ctrl);//創(chuàng)建led設(shè)備

blink_dev_ctrl(&led,50,100,0);//快閃(50ms亮,100ms滅)
}

按鍵管理模塊

類似blink模塊,使用之前有兩個(gè)注意事項(xiàng):

  • 需要系統(tǒng)提供滴答時(shí)鐘,key.c中是通過(guò)get_tick()接口獲取,依賴module模塊
  • 需要在任務(wù)中定時(shí)進(jìn)行輪詢
key_tkey;//定義按鍵管理器

/*
*@brief按鍵事件
*@param[in]type-按鍵類型(KEY_PRESS,KEY_LONG_DOWN,KEY_LONG_UP)
*@param[in]duration-長(zhǎng)按持續(xù)時(shí)間
*/
voidkey_event(inttype,unsignedintduration)
{
if(type==KEY_PRESS){//短按

}elseif(type==KEY_LONG_DOWN){//長(zhǎng)按

}
}

//讀取鍵值(假設(shè)按鍵輸出口為STM32MCUPA8)
intread_key(void)
{
returnGPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)==Bit_RESET;
}

/*
*@brief按鍵初始化
*/
voidkey_init(void)
{
//打開(kāi)GPIO時(shí)鐘
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
//配置成輸入模式
gpio_conf(GPIOA,GPIO_Mode_IN,GPIO_PuPd_NOPULL,GPIO_Pin_8);
//創(chuàng)建1個(gè)按鍵
key_create(&key,read_key,key_event);
}

審核編輯 :李倩


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

    關(guān)注

    146

    文章

    17362

    瀏覽量

    352852
  • 自動(dòng)化
    +關(guān)注

    關(guān)注

    29

    文章

    5645

    瀏覽量

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

    關(guān)注

    0

    文章

    22

    瀏覽量

    9912
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    使用任務(wù)通知提高RTOS應(yīng)用的效率

    在實(shí)時(shí)嵌入式系統(tǒng)中,性能和資源效率是決定設(shè)計(jì)成敗的關(guān)鍵因素。傳統(tǒng)的實(shí)時(shí)操作系統(tǒng)(RTOS)提供了如隊(duì)列、信號(hào)量和事件組機(jī)制,實(shí)現(xiàn)任務(wù)之間的同步和通信。FreeRTOS/SAFERTOS還提供一種方法可以使這些過(guò)程更快、更輕量化,
    的頭像 發(fā)表于 12-27 14:54 ?351次閱讀

    一種實(shí)現(xiàn)亞毫秒定時(shí)分辨率的RTOS新方法

    擴(kuò)展。RTOS不應(yīng)該能夠管理整個(gè)應(yīng)用程序的時(shí)間嗎,不管這個(gè)時(shí)間是秒還是微秒? 對(duì)于嵌入式系統(tǒng)領(lǐng)域的開(kāi)發(fā)和管理人員來(lái)說(shuō),平衡時(shí)間精度和能源效率可能是項(xiàng)持續(xù)的斗爭(zhēng)。隨著應(yīng)用的發(fā)展,無(wú)
    的頭像 發(fā)表于 12-17 13:58 ?220次閱讀
    <b class='flag-5'>一種</b><b class='flag-5'>實(shí)現(xiàn)</b>亞毫秒定時(shí)分辨率的<b class='flag-5'>RTOS</b>新方法

    SSM框架的源碼解析與理解

    SSM框架(Spring + Spring MVC + MyBatis)是一種在Java開(kāi)發(fā)中常用的輕量級(jí)企業(yè)級(jí)應(yīng)用框架。它通過(guò)整合Spring、Spring MVC和MyBatis三個(gè)框架
    的頭像 發(fā)表于 12-17 09:20 ?399次閱讀

    一種面向飛行試驗(yàn)的數(shù)據(jù)融合框架

    天地氣動(dòng)數(shù)據(jù)致性,針對(duì)某外形飛行試驗(yàn)數(shù)據(jù)開(kāi)展了典型對(duì)象的天地氣動(dòng)數(shù)據(jù)融合方法研究。結(jié)合數(shù)據(jù)挖掘的隨機(jī)森林方法,本文提出了一種面向飛行試驗(yàn)的數(shù)據(jù)融合框架,通過(guò)引入地面風(fēng)洞試驗(yàn)氣動(dòng)數(shù)據(jù),實(shí)現(xiàn)
    的頭像 發(fā)表于 11-27 11:34 ?345次閱讀
    <b class='flag-5'>一種</b>面向飛行試驗(yàn)的數(shù)據(jù)融合<b class='flag-5'>框架</b>

    freertos和rtos區(qū)別是什么

    (Real-Time Operating System,實(shí)時(shí)操作系統(tǒng))是一種特殊的操作系統(tǒng),它能夠?yàn)閷?shí)時(shí)任務(wù)提供確定性的響應(yīng)時(shí)間。RTOS 通常用于嵌入式系統(tǒng),如工業(yè)自動(dòng)化、汽車電子、醫(yī)療設(shè)備等領(lǐng)域
    的頭像 發(fā)表于 09-02 14:18 ?1601次閱讀

    RTOS與Linux有什么區(qū)別

    RTOS(Real-Time Operating System,實(shí)時(shí)操作系統(tǒng))與Linux是兩在不同應(yīng)用場(chǎng)景下發(fā)揮重要作用的操作系統(tǒng),它們?cè)谠O(shè)計(jì)理念、功能特性、應(yīng)用場(chǎng)景以及性能表現(xiàn)等方面存在顯著差異。以下是對(duì)
    的頭像 發(fā)表于 08-20 16:05 ?4364次閱讀

    RTOS的特性和類型

    實(shí)時(shí)操作系統(tǒng)(RTOS)是一種可運(yùn)行實(shí)時(shí)計(jì)算應(yīng)用程序的軟件平臺(tái),用于處理具有明確時(shí)間約束的事件和數(shù)據(jù)。與通用操作系統(tǒng)(GPOS)不同,RTOS必須在有限的硬件資源上調(diào)度應(yīng)用程序之間的處
    的頭像 發(fā)表于 08-20 11:29 ?738次閱讀

    RTOS開(kāi)發(fā)最佳實(shí)踐

    基于RTOS編寫(xiě)應(yīng)用程序時(shí),有些要注意事項(xiàng)。在本節(jié)中,您將學(xué)習(xí)RTOS開(kāi)發(fā)最佳實(shí)踐,例如POSIX合規(guī)性、安全性和功能安全認(rèn)證。
    的頭像 發(fā)表于 08-20 11:24 ?525次閱讀

    rup是一種什么模型

    RUP(Rational Unified Process,統(tǒng)建模語(yǔ)言)是一種軟件開(kāi)發(fā)過(guò)程模型,它是一種迭代和增量的軟件開(kāi)發(fā)方法。RUP是由
    的頭像 發(fā)表于 07-09 10:13 ?1416次閱讀

    一種高效的KV緩存壓縮框架--GEAR

    GEAR框架通過(guò)結(jié)合三互補(bǔ)的技術(shù)來(lái)解決這挑戰(zhàn):首先對(duì)大多數(shù)相似幅度的條目應(yīng)用超低精度量化;然后使用低秩矩陣來(lái)近似量化誤差。
    發(fā)表于 03-19 10:12 ?386次閱讀
    <b class='flag-5'>一種</b>高效的KV緩存壓縮<b class='flag-5'>框架</b>--GEAR

    介紹一種OpenAtom OpenHarmony輕量系統(tǒng)適配方案

    本文在不改變?cè)邢到y(tǒng)基礎(chǔ)框架的基礎(chǔ)上, 介紹了一種OpenAtom OpenHarmony(以下簡(jiǎn)稱“OpenHarmony”)輕量系統(tǒng)適配方案。
    的頭像 發(fā)表于 03-05 09:24 ?1307次閱讀
    介紹<b class='flag-5'>一種</b>OpenAtom OpenHarmony輕量系統(tǒng)適配方案

    谷歌模型框架是什么軟件?谷歌模型框架怎么用?

    谷歌模型框架通常指的是谷歌開(kāi)發(fā)的用于機(jī)器學(xué)習(xí)和人工智能的軟件框架,其中最著名的是TensorFlow。TensorFlow是個(gè)開(kāi)源的機(jī)器學(xué)習(xí)框架
    的頭像 發(fā)表于 03-01 16:25 ?992次閱讀

    谷歌模型框架是什么?有哪些功能和應(yīng)用?

    谷歌模型框架(Google Model Framework)并不是個(gè)特定的框架,而是指谷歌開(kāi)發(fā)的系列軟件
    的頭像 發(fā)表于 02-29 18:11 ?1619次閱讀

    【鴻蒙】NAPI 框架生成工具實(shí)現(xiàn)流程

    NAPI 框架生成工具 可以根據(jù)用戶指定路徑下的 ts(typescript)接口文件鍵生成 NAPI 框架代碼、業(yè)務(wù)代碼框架、GN 文件等。在開(kāi)發(fā) JS 應(yīng)用與 NAPI 間接口時(shí)
    的頭像 發(fā)表于 02-28 17:00 ?749次閱讀
    【鴻蒙】NAPI <b class='flag-5'>框架</b>生成工具<b class='flag-5'>實(shí)現(xiàn)</b>流程

    如何選擇RTOS?使用R-Rhealstone框架評(píng)估

    文章描述基于Rhealstone的系統(tǒng)實(shí)時(shí)性的測(cè)量基準(zhǔn)的框架--R-Rhealstone框架。 在嵌入式軟件設(shè)計(jì)和集成中,實(shí)時(shí)多任務(wù)操作系統(tǒng)的性能分析是至關(guān)重要的,它需要保證應(yīng)用的時(shí)間限制得到滿足
    的頭像 發(fā)表于 02-20 13:54 ?1123次閱讀
    如何選擇<b class='flag-5'>RTOS</b>?使用R-Rhealstone<b class='flag-5'>框架</b>評(píng)估