MCU面向对象思维的架构.docx

上传人:王** 文档编号:1510761 上传时间:2024-08-02 格式:DOCX 页数:13 大小:22.89KB
下载 相关 举报
MCU面向对象思维的架构.docx_第1页
第1页 / 共13页
MCU面向对象思维的架构.docx_第2页
第2页 / 共13页
MCU面向对象思维的架构.docx_第3页
第3页 / 共13页
MCU面向对象思维的架构.docx_第4页
第4页 / 共13页
MCU面向对象思维的架构.docx_第5页
第5页 / 共13页
MCU面向对象思维的架构.docx_第6页
第6页 / 共13页
MCU面向对象思维的架构.docx_第7页
第7页 / 共13页
MCU面向对象思维的架构.docx_第8页
第8页 / 共13页
MCU面向对象思维的架构.docx_第9页
第9页 / 共13页
MCU面向对象思维的架构.docx_第10页
第10页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《MCU面向对象思维的架构.docx》由会员分享,可在线阅读,更多相关《MCU面向对象思维的架构.docx(13页珍藏版)》请在优知文库上搜索。

1、程序架构重要性很多人尤其是初学者在写代码的时候往往都是想一点写一点,最开始没有一个整体的规划,导致后面代码越写越乱,bug不断.最终代码跑起来看似没有问题(有可能也真的没有问题),但是要加一个功能的时候会浪筑大量的时间,甚至导致整个代码的崩渍。所以,在一个项目开始的时候多花一些时间在代码的架构设计上是十分有必要的.代码架构确定好之后你会发现敲代码的时候会特别快,并且在后期调忒的时候也不会像无头苍蝇一样胡乱找问题。当然,调试也是一门技术。在学习实时操作系统的过程中,发现实时操作系统框架与个人的业务代码之间的耦合性就非常低,都是只需要将业务代码通过一定的接口函数注册好后就交给操作系统托管了,十分方

2、便。但是操作系统的调度过于复杂,这里就使用操作系统的思维方式来重构这个时间片轮询框架。实现该框架的完全解耦.用户只需要包含头文件,并且在使用过程中不需要改动已经写好的库文件。Demo苜先来个dem。,该dem。是使用电脑开两个线程:一个线程模拟雎片机的定时器中断产生时间片轮询个时钟,另一个线程则模拟主函数中一直运行的时间片轮询调度程序。inc1.udeMinc1.udeSinc1.udeItinc1.udetimes1.ice.h/创建5个任务对象TimesiIceTaskObjtask_1.,task_2,task_3,task_4,task_5;/具体的任务函数voidtask1.-hd1

3、.()(printf(task1isrunning.n);)voidtask2-hd1.()printf(task2isrunning.n);voidtask3-hd1.()printf(task3isrunning.);)voidtask4_hd1.()(printf(task4isrunning.);voidtask5-hd1.()(printf(task5isrunning.);)/初始化任务对象,并且将任务添加到时间片轮询调度中voidtaskjnit()(times1.ice_task_init&ta$k_1.,task1._hd1.,1,10);times1.ice_task_in

4、it(&task_2,task2_hd1.,2,20);t1.me$1.ice_task_init(&task_3,ta$k3_hd1.,3,30);times1.ice_task_init&task_4,task4_hd1.,4,40);times1.ice_task_add(&task_1.);times1.ice_task_add(&ta$k_2);times1.ice_task_add(&task_3);times1.ice_task_add(&task_4);times1.ice_task_add(&task_5);/开两个线程模拟在单片机上的运行过程voidtimes1.ice_e

5、xec_thread()(whi1.e(true)(times1.ice_exec();)voidtimes1.ice_tick_thread()whi1.e(true)t1.mes1.ice_tick();SIeep(IO);intmain()(taskjnit();printf(tasknum:%dn,times1.ice_get_task_num();printf(tasken:%dn,times1.ice_get_task_times1.ice_1.en(&task_3);times1.ice_task_de1.(&task_2);printf(de1.ettask2n);printf

6、(task2isexist:%dn,time$1.ice_task_i$exist(&task_2);printf(tasknum:%dnztimes1.ice_get_task_num();times1.ice_task_de1.(&task_5);printf(de1.ettask5n);printf(tasknum:%dn,times1.ice_get_task_num();printf(task3isexist:%dn,times1.ice_task_isexist(&task_3);times1.ice_task_add(&ta$k_2);printf(addtask2n);prin

7、tf(task2isexist:%dn,times1.ice_task_isexist(&task_2);time$1.ice_task_add(&task_5);printf(addtask5n);printf(tasknum:%dn,times1.ice_get_task_num();printf(nn=times1.icerunning=n);stdthreadthread_1.(times1.ice_exec_thread);std:threadthread_2(times1.ice_tick_thread);threadJjoin();thread_2.join();return0;

8、运行结果如下:由以上例子可见,这个框架使用十分方便,甚至可以完全不知道其原理,仅仅通过几个简单的接口就可以迅速创建任务并加入到时间片轮询的框架中,十分好用。时间片轮泡架构其实该部分主要使用了面向对象的思维,使用结构体作为对象,并使用结构体指针作为参数传速,这样作可以节省资源,并且有着极1.的运行效率。其中最难的部分是侵入式链表的使用,这种链表在一些操作系统内核中使用十分广泛,这里是参考RT-Thread实时操作系统中的侵入式链表实现。h文件:MfndefTIMES1.ICEHWdefine_TIMES1.ICE_HWinc1.ude.1.ist.htypedefenum1ASK_ST0RTAS

9、K_RUNIsTaskRun;tpedefstructtimesi1.ce(unsignedintid;void(*task-hd1.)void);IsTaskRunis_run;unsignedinttimer;unsignedinttimes1.icejen;1.istObjtime$1.ice_ta$k_1.ist;JTimesiIceTaskObj;voidtimes1.ice_exec(void);voidtimes1.ice_tickvoid);voidtimes1.ice_task_init(Timesi1.ceTaskObj*obj,void(*task_hd1.)(void)

10、,unsignedintid,unsignedinttimes1.icejen);voidtimes1.ice_task_add(Timesi1.ceTaskObj*obj);voidtimes1.ice_task_de1.(TimeSiICeTaSkobj*obj);unsignedinttimes1.ice_get_task_times1.ice_1.en(Timesi1.ceTaskObj*obj);unsignedinttimes1.ice_get_task_num(void);unsignedchartimes1.ice-taskJsexist(Timesi1.ceTaskObjob

11、j);SendifC文件:Winc1.ude./times1.ice.hstatic1.IST_HEAD(times1.ice_ta$k_1.i$t);voidtimes1.ice-exec()1.istObj*node;TimesiIceTaskObj*task;1.ist_for_each(node,×1.ice_task_1.ist)task=1.ist-entry(node,TimesiIceTaskObj,times1.ice_task_1.ist);if(task-is,run=TASK_RUN)(task-task_hd1.();task-is_run=TASK_ST0

12、P;voidtimes1.ice-tick()(1.istObj*node;TimesiIceTaskObj*task;IisJfOjeaeh(node,×1.ice_task_1.ist)(task=1.ist-entry(node,TimesiIceTaskObj,times1.ice_task_1.ist);if(task-timer!=O)(task-timer-;if(task-timer=O)task-is-run=TASK_RUN;task-timer=task-times1.icejen;)unsignedinttimes1.ice_get_task_num()(re

13、turn1.ist_1.en(×1.ice_task_1.ist);voidtimes1.ice_task_init(Timesi1.ceTaskObj*obj,void(*task_hd1.)(void),unsignedintid,unsignedinttimes1.icejen)(obj-id=id;obj-is-run=TASK_STOP;obj-task_hd1.=task-hd1.;obj-timer=times1.icejen;obj-times1.icejen=times1.icejen;1.i$t_insert_before(×1.ice_task_1.i

14、st,&obj-times1.ice_task_1.ist);)voidtimes1.ice_task_de1.(TimeSi1.CeTaSkObj*obj)(if(times1.ice-taskjseist(obj)1.ist_remove(&obj-times1.ice_task_1.ist);e1.sereturn;unsignedchart1.mes1.1.ce_task_i$exi$t(T1.mes1.1.ceTa$kObj*obj)(unsignedcharisexist=O;1.istObj*node;TimesiIceTaskObj*task;IiSJfOjeaCh(node,×1.ice_task_1.ist)task=1.ist-entry(node,TimesiIceTaskObj,times1.ice_task_1.ist);if(obj-id=task-id)isexist=1;Ireturnisexist;unsignedinttimes1.ice_get_task_times1.ice_1.en(Timesi1.ceTaskObj*obj)returnobj-times1.icejen;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > Java

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!