中级会员
- 积分
- 215
- 金钱
- 215
- 注册时间
- 2016-8-3
- 在线时间
- 83 小时
|
有一两个月没来论坛了,分享点东西。
估计学过C++的不少,也许用到STM8的也不少,这里,教大家在STM8下用C++开发一个工程,以及运用函数指针数组,实现任务轮询。 首先,自然是STM8工程相关配置了,跳过。重点只有一个,C++下的特殊配置。
其选择C++非常的简单,比STM32下C++开发好多了(还需要修改一些地方),,,接下来是写代码了!!!
对于非OS而言,一般同志们有两种开发方式,while(1)死循环轮询,另一种是开定时器中断,时间片轮询。这里,我想说的是,综合起来,用点C语言的高级语法。
C语言中,有函数指针数组,我解释下,就是一个指针--指向存有函数首地址的数组的起始地址。。。(⊙﹏⊙),,,理解不了的,百度。懂的,接着看。
最后将附上完整工程,包含了NRF的伪全双工底层驱动,以及AT24C02的代码等,基本把STM8的基本资源用光了,涉及得差不多了。
下面给的截图为主程序的运行流程。我顺便解释下。
先声明个函数指针数组,把任务分而治之,做成OS里的“任务”。
接着把“任务”要干的事,写出来。我这只列出一个,其余的请看附件代码。
最后,当然是程序跑起来咯。。。这里,用了个笨方法,一个个轮询,因为飞控没怎么折腾了,升级的代码以后有心情贴吧,其实,只有把这种“傻延时”换成定时器systick++时间片轮询即可。
底层代码我已经有了(懒得动,大家动动脑)。
以上,当然没有任何OS的迹象,大家有功夫研究的,像uCOSII/uCOSIII一样,搞个任务链表,内存管理,优先级查找,,,,,对于普通的工程,也是不错的。
这里,可以升级的除了定时器任务运行外,搞个链表,每个结构体代表一个任务相关的内容(事件标志之类的等,不多说了)。这样的做法,任务实时性高点。
接下来,得讲C++了。
在这里用到的,是C++的基础,不带一丝的难度去费力理解。
有志者看看底层任何一个.h和.cpp,立马明白了。就类的声明,对象的定义,对象的成员函数的调用,没什么可说,很简单。
在测试工程写的过程中,我发现,原来C++调用函数,IAR会自动显示相关的对象的成员函数,好方便!!!,算是使用C++的一个福利咯。
有些人会怀疑C++在嵌入式中的应用了,我想说:这个不要再纠结了,C++在嵌入式中固然没有C有优势,但是,它也有C所不具备的优势,想知道哪些方面有优点?附录周立功的书,给你答案,我不废话。
以上基本讲完了,算是我对发的第一篇STM8的帖子的结帖吧。http://www.openedv.com/forum.php ... id=94589&extra=
这个工程很早就写完了,一直尘封,我是个爱分享的人,今天有空想起来了,特地分享给大家。
最后,送个风驰的开发板(有此板资料足矣)的资料给各位进一步理解,学习。
附录:周立功--数据结构与算法;C++源工程;风驰板子资料包(大于20M了,给个网盘链接算了。http://pan.baidu.com/s/1eSoYKHO)。
希望有帮到你的地方,点个赞。有动力,就会分享更多哦(⊙o⊙)。
|
|