色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

嵌入式軟件開發(fā)是什么意思

技術(shù)讓夢(mèng)想更偉大 ? 來源:CSDN ? 2023-06-20 09:33 ? 次閱讀

1.問題描述

在使用定時(shí)器的過程中最令人苦惱的就是,定義flag,holdtime,每用一次定義就會(huì)導(dǎo)致中斷函數(shù)中標(biāo)志位滿天飛,時(shí)間變量在程序中隨處可見。在想要移植,又不敢隨便刪除。程序處于高耦合狀態(tài),失去了一個(gè).c 一個(gè) .h的意義。

2.如何解決這種問題

引入注冊(cè)機(jī)制。為了方便說明注冊(cè)機(jī)制,舉一個(gè)例子:手機(jī)在使用相機(jī)這個(gè)功能時(shí),有一個(gè)操作:將拍攝的照片發(fā)送出去。以程序來實(shí)現(xiàn)這一過程,最容易想到的方法如下:

在相機(jī)的發(fā)送模塊添加以下代碼:

if(選擇發(fā)送)
{
if(選擇微信發(fā)送)
{
獲取發(fā)送人;
選擇發(fā)送人;
}
elseif(選擇qq發(fā)送)
{
獲取發(fā)送人;
選擇發(fā)送人;
}
elseif(選擇微博發(fā)送)
{
獲取發(fā)送人;
選擇發(fā)送人;
}
.
.此處省略一萬行
.
}

這是最容易想到的實(shí)現(xiàn)方式,就如上面定時(shí)器的實(shí)現(xiàn)方式,哪里要用了,再定義一系列變量就是了。回到相機(jī)例子,假設(shè)某一天一個(gè)比微信還火的聊天軟件出現(xiàn)了,用戶安裝了,想要發(fā)送圖片,這時(shí)該怎么做 ?當(dāng)然,只能在上面相機(jī)的發(fā)送發(fā)送模塊中添加else if(。。。。)和它的實(shí)現(xiàn)方式了,也就意味著,每更新一個(gè)需要使用圖片功能的軟件,就必須去修改相機(jī)模塊,是不是覺得和我們的定時(shí)器很像?

注冊(cè)的精髓:解耦各個(gè)模塊。程序講究高內(nèi)聚,低耦合。我目前對(duì)這句話的理解是:高內(nèi)聚:每一個(gè)功能模塊(c文件,h文件),內(nèi)部不和其他模塊相互調(diào)用,比如障礙物函數(shù)里面不應(yīng)該有狀態(tài)這一個(gè)變量存在,更不應(yīng)該擁有零地標(biāo)恢復(fù)運(yùn)行這一操作。它只做一件事,處理IO口信息,產(chǎn)生相應(yīng)的障礙物狀態(tài)。低耦合:障礙物函數(shù)與其他模塊的耦合,僅僅為產(chǎn)生的障礙物狀態(tài)。下面深入探討注冊(cè)機(jī)制。

何謂注冊(cè):我目前這樣理解的,相機(jī)要發(fā)送圖片,面臨著多種發(fā)送方式,每一種發(fā)送方式肯定會(huì)調(diào)用不同的函數(shù)。反過來想,就是我有很多的應(yīng)用,要使用相機(jī)這個(gè)模塊(此處對(duì)比定時(shí)器)。既然這樣,相機(jī)模塊定義一個(gè)注冊(cè)函數(shù),供其他模塊調(diào)用,以告訴相機(jī),允許使用對(duì)應(yīng)的發(fā)送方式。

#definenum_max20//最大設(shè)備數(shù)

typedefstruct
{
 u8 num;//當(dāng)前注冊(cè)設(shè)備數(shù)
u8list_name[num_max];//用于保存注冊(cè)設(shè)備列表
void(*click[num_max])(u8*temp);//存放不同模塊(微信qq)的發(fā)送函數(shù)地址
}Equiment;
EquimentCOM;

/**************************注冊(cè)函數(shù)****************************************/
voidPhoto_Register(void(*a)(u8*temp),u8list)//提供給外部的接口
{
if(COM.num

微信中若要使用,在安裝過程中,提示打開相機(jī)權(quán)限,便是調(diào)用上述注冊(cè)函數(shù)。將微信本身自集成的發(fā)送函數(shù)地址傳給相機(jī),相機(jī)每次發(fā)送只需判斷哪些設(shè)備注冊(cè)了,選擇對(duì)應(yīng)的方式即可。如此一來,出現(xiàn)再多的新應(yīng)用要使用相機(jī),只需注冊(cè)一次即可。相機(jī)與微信QQ微博等模塊之間完美解耦!類似的,定時(shí)器的解耦也能這樣處理。

定時(shí)器運(yùn)用注冊(cè)機(jī)制

首先,要想解耦,必須去掉胡亂定義的標(biāo)志位與時(shí)間變量,只允許一個(gè)時(shí)間變量。因此定義一個(gè)32位的時(shí)間變量,不要任何條件限制,讓他一直自加。

參考arduino 中定時(shí)處理的方法:定義一個(gè)函數(shù)獲取當(dāng)前時(shí)間,保存下當(dāng)前時(shí)間,運(yùn)行一段時(shí)間后,再次查詢當(dāng)前時(shí)間,兩次做差,便得出運(yùn)行的時(shí)間。從以上不難看出,關(guān)鍵點(diǎn)在于:獲取當(dāng)前時(shí)間的函數(shù),當(dāng)前時(shí)間的存放,做差后的時(shí)間。以下是實(shí)現(xiàn)方法:

time.h

#include"stm32f10x.h"
#ifndef__TIME_H
#define__TIME_H

#defineTimerID_max20//最大注冊(cè)設(shè)備數(shù)
#defineRunOutOf_time(ID,ms)(systime.now-systime.last[ID-1]

time.c

#include"time.h"

/*********提供給外部的API*******************/
voidTimer_Init(u16CountData,u16FreqData);
unsignedcharsystime_get(void);
voidRefresh(u8ID);
/***********************************************/
SYSTIMEsystime=定義SYSTIME類型變量,并初始化函數(shù)指針
{
.get_id=systime_get,
.refresh=Refresh,
.timer_init=Timer_Init
};

/****************************************************/
//函數(shù)名:Timer_init
//描述:初始化定時(shí)器
//輸入:中斷時(shí)間相關(guān)
//輸出:null
/****************************************************/
voidTimer_Init(u16CountData,u16FreqData)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
NVIC_InitTypeDefNVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

NVIC_InitStructure.NVIC_IRQChannel=TIM4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=4;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);

TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;

TIM_DeInit(TIM4);
TIM_TimeBaseStructure.TIM_Prescaler=FreqData;
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);
TIM_ClearFlag(TIM4,TIM_FLAG_Update);
TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);
TIM_Cmd(TIM4,ENABLE);

}

/****************************************************/
//函數(shù)名:systime_get
//描述:獲取當(dāng)前時(shí)間,并產(chǎn)生一個(gè)注冊(cè)
//輸入:null
//輸出:null
/****************************************************/
unsignedcharsystime_get()
{
if(systime.ID

在.c與.h實(shí)現(xiàn)了以上后,面向外部的只有三個(gè)函數(shù)

/*********提供給外部的API*******************/
voidTimer_Init(u16CountData,u16FreqData);
unsignedcharsystime_get(void);
voidRefresh(u8ID);
/***********************************************/

定時(shí)器的使用方法

1./*初始化*/
2.
/**********任務(wù)1實(shí)現(xiàn)運(yùn)行等閃爍,頻率1s**********/
voidtask1()
{
staticu8Task1_ID;
if(!Task1_ID)
Task1_ID=systime.get_id();
if(RunOutOf_time(Task1_ID,1000))
RUN_LED()=1;
elseif(RunOutOf_time(Task1_ID,2000))
RUN_LED()=0;
elseif(RunOutOf_time(Task1_ID,3000))
RUN_LED()=1;
elseif(RunOutOf_time(Task1_ID,4000))
RUN_LED()=0;
elseif(RunOutOf_time(Task1_ID,5000)
RUN_LED()=1;
else
systime.refresh(Task1_ID);
}

/*******************任務(wù)2實(shí)現(xiàn)運(yùn)行等閃爍,頻率100ms**********************/
voidtask2()
{
staticu8Task1_ID;
if(!Task1_ID)
Task1_ID=systime.get_id();
if(RunOutOf_time(Task1_ID,100))
RUN_LED()=1;
elseif(RunOutOf_time(Task1_ID,200))
RUN_LED()=0;
elseif(RunOutOf_time(Task1_ID,300))
RUN_LED()=1;
elseif(RunOutOf_time(Task1_ID,400))
RUN_LED()=0;
elseif(RunOutOf_time(Task1_ID,500))
RUN_LED()=1;
else
systime.refresh(Task1_ID);
}

/***************main函數(shù)實(shí)現(xiàn)任務(wù)1運(yùn)行10s,任務(wù)2運(yùn)行10s****************/
intmain(void)
{
staticu8main_ID;
System_Init();
while(1)
{
if(!main_ID)
main_ID=systime.get_id();
if(RunOutOf_time(main_ID,10000))
task1();
elseif(RunOutOf_time(main_ID,20000))
task2();
else
systime.refresh(main_ID);
}
}

以上,任何函數(shù)想要使用定時(shí)器,只需要按要求,設(shè)立一個(gè)ID存儲(chǔ)變量,以存儲(chǔ)注冊(cè)時(shí)分配的ID,便可調(diào)用定時(shí)器,且在任何平臺(tái)上均可方便的移植,只需修改硬件初始化。

此程序無法實(shí)現(xiàn)時(shí)刻任務(wù)執(zhí)行,例如某任務(wù)要100ms執(zhí)行一次,只能用作時(shí)間段內(nèi)執(zhí)行。原因在于程序主循環(huán)會(huì)耗時(shí),導(dǎo)致輪詢時(shí)無法精準(zhǔn)捕捉到100ms時(shí)刻,想要達(dá)到此效果,還需改進(jìn)或者完全換一種思路來寫,例如捕捉放到中斷中,主循環(huán)來查詢100ms使能位。





審核編輯:劉清

聲明:本文內(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)投訴
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7494

    瀏覽量

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

    關(guān)注

    23

    文章

    3250

    瀏覽量

    114917
  • 嵌入式軟件
    +關(guān)注

    關(guān)注

    4

    文章

    240

    瀏覽量

    26654
  • Arduino
    +關(guān)注

    關(guān)注

    188

    文章

    6471

    瀏覽量

    187225

原文標(biāo)題:嵌入式軟件開發(fā)中的注冊(cè)機(jī)制

文章出處:【微信號(hào):技術(shù)讓夢(mèng)想更偉大,微信公眾號(hào):技術(shù)讓夢(mèng)想更偉大】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    嵌入式軟件開發(fā)與非嵌入式軟件開發(fā)的區(qū)別?

    嵌入式軟件開發(fā)與非嵌入式軟件開發(fā)區(qū)別?設(shè)備驅(qū)動(dòng)開發(fā)與裸機(jī)驅(qū)動(dòng)開發(fā)區(qū)別?
    發(fā)表于 04-02 06:29

    如何學(xué)習(xí)嵌入式軟件開發(fā)

    該不該放棄嵌入式、單片機(jī)這條路?如何學(xué)習(xí)嵌入式軟件開發(fā)
    發(fā)表于 12-24 06:32

    如何學(xué)習(xí)嵌入式軟件開發(fā)

    1. 如何學(xué)習(xí)嵌入式軟件開發(fā)嵌入式軟件開發(fā)一定要結(jié)合開發(fā)板來學(xué)習(xí),所有的知識(shí)都可以在開發(fā)板上
    發(fā)表于 02-11 07:33

    嵌入式軟件開發(fā)系列教程 (很多本書)

    嵌入式軟件開發(fā)系列教程 (很多本書)
    發(fā)表于 03-28 09:45 ?230次下載

    什么是嵌入式軟件開發(fā)

    嵌入式軟件開發(fā)又是指什么?   隨著嵌入式軟件系統(tǒng)結(jié)構(gòu)越來越復(fù)雜,嵌入式軟件
    發(fā)表于 04-20 08:43 ?8787次閱讀

    嵌入式軟件開發(fā)的優(yōu)缺點(diǎn)淺談

    嵌入式軟件開發(fā)的優(yōu)缺點(diǎn)淺談 從事嵌入式軟件開發(fā)的好處是: 1 目前國(guó)內(nèi)外這方面的人都很稀缺。     
    發(fā)表于 11-28 15:40 ?3180次閱讀

    嵌入式軟件開發(fā)與Embedded-GIS

    1.嵌入式軟件開發(fā) 市場(chǎng)現(xiàn)狀 嵌入式操作系統(tǒng) 嵌入式軟件開發(fā)特點(diǎn) 嵌入式
    發(fā)表于 02-28 10:39 ?36次下載

    ARM嵌入式軟件開發(fā)

    ARM嵌入式軟件開發(fā)ARM嵌入式軟件開發(fā)ARM嵌入式軟件開發(fā)
    發(fā)表于 01-15 17:29 ?65次下載

    基于嵌入式軟件開發(fā)中構(gòu)件技術(shù)的研究

    基于嵌入式軟件開發(fā)中構(gòu)件技術(shù)的研究
    發(fā)表于 10-30 15:36 ?6次下載
    基于<b class='flag-5'>嵌入式</b><b class='flag-5'>軟件開發(fā)</b>中構(gòu)件技術(shù)的研究

    嵌入式軟件開發(fā)的優(yōu)勢(shì)分析

    為什么當(dāng)今嵌入式行業(yè)會(huì)如此受歡迎呢?我們從事嵌入式軟件開發(fā)有什么好處嗎?小編就來說說我的看法吧,嵌入式軟件開發(fā)的優(yōu)勢(shì)我們可以從幾點(diǎn)來看。
    的頭像 發(fā)表于 12-21 15:23 ?5236次閱讀

    嵌入式軟件開發(fā)做什么?嵌入式開發(fā)培訓(xùn)學(xué)哪些

    嵌入式行業(yè)可以說從幕后走到前臺(tái),大家對(duì)他都很熟悉了,我國(guó)嵌入式人才缺口每年在50萬左右,相關(guān)調(diào)查報(bào)告稱嵌入式軟件開發(fā)是未來幾年最熱門和最受歡迎的職業(yè)之一。但是還有很多人不知道
    發(fā)表于 11-03 10:36 ?19次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件開發(fā)</b>做什么?<b class='flag-5'>嵌入式開發(fā)</b>培訓(xùn)學(xué)哪些

    嵌入式軟件開發(fā)需要懂的硬件基礎(chǔ)

    嵌入式軟件開發(fā)需要懂的硬件基礎(chǔ)
    發(fā)表于 11-03 11:06 ?25次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件開發(fā)</b>需要懂的硬件基礎(chǔ)

    嵌入式軟件開發(fā)入門

    1. 如何學(xué)習(xí)嵌入式軟件開發(fā)嵌入式軟件開發(fā)一定要結(jié)合開發(fā)板來學(xué)習(xí),所有的知識(shí)都可以在開發(fā)
    發(fā)表于 12-07 17:21 ?17次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件開發(fā)</b>入門

    嵌入式軟件開發(fā)流程

    電子發(fā)燒友網(wǎng)站提供《嵌入式軟件開發(fā)流程.ppt》資料免費(fèi)下載
    發(fā)表于 11-17 14:37 ?4次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件開發(fā)</b>流程

    嵌入式軟件開發(fā)與AI整合

    嵌入式軟件開發(fā)與AI整合是當(dāng)前技術(shù)發(fā)展的重要趨勢(shì)之一。隨著人工智能技術(shù)的快速發(fā)展,嵌入式系統(tǒng)越來越多地集成了AI算法,以實(shí)現(xiàn)更復(fù)雜的智能功能。以下是關(guān)于嵌入式
    的頭像 發(fā)表于 07-31 09:25 ?727次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件開發(fā)</b>與AI整合
    主站蜘蛛池模板: 国产高清精品国语特黄A片| 快穿之H啪肉| 果冻传媒在线观看网站| 久久精品国产96精品亚洲| 暖暖 日本 视频 在线观看免费 | 国产白丝精品爽爽久久蜜臀 | 国产一卡 二卡三卡四卡无卡乱码视频| 久久精品热播在线看| 国产交换丝雨巅峰| 精品夜夜澡人妻无码AV蜜桃| 男女肉大捧进出全过程免费| 偷偷要色偷偷| 18禁无遮遮挡羞漫画免费阅读| 国产99对白在线播放| 囯产精品一品二区三区| 精品国产国产精2020久久日| 欧美性appstin孕妇| 日日天干夜夜狠狠爱| 色偷偷影院| 在线一本码道高清| 俄罗斯美女z0z0z0在线| 久久午夜宫电影网| 无码国产精品高潮久久9| 90后美女乳沟| 国产女人91精品嗷嗷嗷嗷| 末班车动漫无删减免费| 亚洲国产成人综合| 超污视频带污疼免费视频| 久久这里的只有是精品23| 午夜在线观看免费完整直播网页| 99爱在线精品视频网站| 教室里的激情电影| 绿巨人www在线观看| 欧美亚洲精品真实在线| 亚洲人视频在线观看| 嘟嘟嘟影院免费观看视频| 恋老视频 国产国佬| 亚洲国产精品日本无码网站| 嘟嘟嘟WWW在线观看视频高清| 蜜桃色欲AV久久无码精品| 亚洲综合网国产精品一区|