毕业论文
您现在的位置: 框架 >> 框架发展 >> 正文 >> 正文

嵌入式设计中,如何选择软件底层开发框架

来源:框架 时间:2022/7/25

转自

羽林君

在底层代码编写中,初始的框架打算总碰面对抉择,针对实践的硬件行使处境,众人关于行使的软件框架有许多抉择,当日我简洁形容一些对照罕用的架构,让众人能够领会并抉择适宜的架构。

总述

1.简洁的次第执路程序:这类写法是大大都人行使的办法,不需用思量程序的详细架构,直接遵循履行次第编写运用程序便可。

2.先后盾执路程序:在次第履行的景况上增加间断前台管教机制,摆设次第履行的后盾大轮回程序,组合成能够时刻反映的程序。3.时光片轮循法:在先后盾的履行架构上,经过计数器进一步筹办程序,守时履行特定的片断。4.时刻操纵系统:时刻操纵系统又叫RTOS,时刻性,RTOS的内核负责治理全部的职责,内核决议了运转哪个职责,何时中止目下职责切换到其余职责,这个是内核的多职责治理技能。多职责治理给人的发觉就好似芯片有多个CPU,多职责治理完成了CPU资本的最大化欺诈,多职责治理有助于完成程序的模块化开拓,能够完成繁杂的时刻运用。除了时刻性,尚有可剥夺内核,顾名思义便是能够剥夺其余职责的CPU行使权,它老是运转停当职责中的优先级最高的谁人职责。1.简洁的次第执路程序

这类运用程序对照简洁,个别做为开端简洁行使,时刻性以及请求不过高的景况下,能够行使。程序的打算对照简洁,思绪对照明晰。不过主轮回的逻辑对照繁杂的时光,即使没有完备的过程图指点,其余人很丢脸懂程序运转逻辑。

上面写一个次第履行的程序模子

intmain(void){uint8TaskValue;InitSys();//初始化while(1){TaskValue=GetTaskValue();switch(TaskValue){casex:TaskDispStatus();break;...default:break;}}}2.先后盾执路程序

这类程序特色是,后盾大轮回中始终履行默许的程序,间断效劳程序(ISR)造成反映间断符号,主程序运转与间断符号相有关的职责程序。个别完成犹以下思绪:

经过摆设标识变量,而后在前台反映间断的时光举行对标识变量的置位也许复位,完成事务的记号获得,再在后盾主轮回举行间断所对应事物也许数据的管教,将程序过程迁徙到主程序。

先后盾履行的程序

voidIRQHandler(void){if(GetITStatus==1){SysFlag=1;GetITStatus=0;}}intmain(void){uint8TaskValue;InitSys();//初始化while(1){TaskValue=GetTaskValue();switch(TaskValue){casex:if(SysFlag==1){TaskDispStatus();SysFlag==0;}break;...default:break;}}}3.时光片轮循架构

时光片轮循法,众人看到它的时光,个别会将它与操纵系统举行对照。不是说操纵系统包罗这类办法,而是在先后盾程序中合营时光治理造成时光片轮循架构。

这类架构曾经最大限度亲近RTOS,时光治理,间断治理,职责治理,曾经都有了,只不过RTOS会对内核举行更深入的点窜,有针对delay延时的线程切换,抢占式职责切换这些更为繁杂一些的成效等。

时光片轮循程序

时光片治理主假如经过对守时多处复用,在守时器计数,守时举行标识位的改变,既而主程序对标识虚实的决断,完成不同时光不同职责形态履行。

由于此架构代码对照好,我恰当举行详细形容。

step

1:初始化反映的守时器:重视摆设守时器的断绝频次,能够遵循芯片的功能摆设。比如,摆设守时间断为1ms,也能够摆设为10ms,轮循架构中的守时器部份与操纵系统的守时器部份具备同样的成效,间断过于一再,影响主程的序履行效率;间断断绝太长,时刻反映成就差。

2:针对守时器运转的职责摆设一个函数机关体标识,用来在守时程序举行时光计数以及标识操纵。

#defineTaskTAB_NUM6//职责数目__packedtypedefstruct{u8flag;//守时标识u32numcount;//遵循守时间断举行计数u32target;//摆设的守时宗旨数值int(*fun)(void);//摆设守时履行的宗旨职责函数}TaskTimTypeDef

step

3:创建一个职责表,经过机关体表的摆设,肯定职责履行的时光表。

在界说变量时,咱们曾经初始化了值,这些值的初始化,特别要紧,跟详细的履行时光优先级等都相关系,这个须要本人把握。

/*MdmSendTimTab职责函数默许周期,单元5ms,TIM7*/staticTaskTimTypeDefTaskTimTab[TaskTAB_NUM]={{1,0,,*Task00},//Task数值是摆设的守时宗旨值,即使感慨反响过慢,能够将此值摆设小{1,0,,*Task01},//Task01{1,0,,*Task02},//Task02{1,0,30,*Task03},//Task03{1,0,3,*Task04},//Task04{1,0,0xFFFFFFFF,*Task05},//Task05//能够遵循TaskTAB_NUM数目增加职责};intTask00(void)//遵循机关体的函数模板(int(*fun)(void);)写职责函数{...}//假定履行按键操纵intTask01(void){...}//假定履行USART发送职责intTask02(void){...}//假定履行CAN通信intTask03(void){...}//假定履行继电器遏制intTask04(void){...}//假定履行网络懂得intTask06(void){...}//假定履行空

step

4:守时间断效劳函数,遵循咱们须要的时光以及标识操纵举行计时。

//守时间断效劳函数voidTimerInterrupt(void){for(chari=0;iTaskTAB_NUM;i++){if(TaskTimTab[i].flag==1){(TaskTimTab[i].numcountTaskTimTab[i].target)//对照暂时守时计数与宗旨时光(TaskTimTab[i].numcount++):(TaskTimTab[i].flag=0);}}}

step

5:主函数举行职责函数履行。

intmain(void){InitSys();//初始化while(1){for(chari=0;iTaskTAB_NUM;i++)////职责管教{if(TaskTimTab[i].flag==0){if(TaskTimTab.flag==0){TaskTimTab[i].flag=1;TaskTimTab[i].numcount=0;TaskTimTab[i].fun();}}}}4.操纵系统RTOS

嵌入式操纵系统是更为优化的履行框架,针对多职责,成效繁杂,伸展性请求强项宗旨代码有特别好的行使。RTOS是针对不同管教器优化打算的高效率时刻多职责内核,RTOS能够面对几十个系列的嵌入式管教器MPU、MCU、DSP、SOC等供给类同的API接口,这是RTOS基于摆设自力的运用程序开拓底子。因而,基于RTOS的C谈话程序具备极大的可移植性。暂时针对微嵌入式也许单片机的操纵系统有VxWorks、UCOS、FreeRTOS、国产的RTT,这些操纵系统小异大同,根本的成效都相似:职责治理、职责间同步和通信、内存治理、实常常钟效劳、间断治理效劳。

(图片起源博客)

RTOS在时光轮循的架构上赓续增进了职责挂起以及复原,堵塞切换线程等,属于成效累加,进一步的优化。由于本次不是对RTOS的解说,本人进修运用有UCOS、RTT、FreeRTOS几个操纵系统,由于篇幅有限,时光有限,我抽时光再举行详细的RTOS系统架构进修等的先容。

暂时RTOS系统有许多,许多项目都偏向于行使RTOS,不过经过几种架构的懂得明了不同的项目须要不同的架构,并不是全部项目都须要,也都适当行使RTOS,比如项目中各个职责耦合性过大,即行使RTOS须要许多的职责同步,乃至都无奈举行线程的筹办。如许就绝对遗失RTOS意义,此时用某些裸机的架构反而更适宜。

1.假造圆桌会议Part1——嵌入式系统音信平安

2.华为5G的奥秘从来把握在一个土耳其人的手中?!

3.半导体最新排名出炉,英伟达完成50%增进!

4.一种"柔软且省资本"的IAP进级计划

5.RISC-V为甚么会成为热门?

6.适当开拓人员看的鸿蒙OS先容~

免责申明:本文系网络转载,版权归原做家全部。如触及做品版权题目,请与咱们联络,咱们将依照您供给的版权表明材料确认版权并付出稿酬也许省略体例。

预览时标签弗成点收录于合集#个

转载请注明:http://www.0431gb208.com/sjszyzl/1147.html