STM8 C++开发,新的程序运行思路。

2019-07-19 20:30发布

有一两个月没来论坛了,分享点东西。
    估计学过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了,给个 {MOD}链接算了。http://pan.baidu.com/s/1eSoYKHO)。
   希望有帮到你的地方,点个赞。有动力,就会分享更多哦(⊙o⊙)。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
小施
1楼-- · 2019-07-19 22:37
 精彩回答 2  元偷偷看……
穹顶之下
2楼-- · 2019-07-20 00:37
小施 发表于 2017-5-30 17:35
老哥用003做飞控?

不是,其是做为飞控的独立部分。
小施
3楼-- · 2019-07-20 05:24
穹顶之下 发表于 2017-6-2 18:18
不是,其是做为飞控的独立部分。

用的双核?我最近刚在学STM8
小施
4楼-- · 2019-07-20 08:02
 精彩回答 2  元偷偷看……
穹顶之下
5楼-- · 2019-07-20 12:04
 精彩回答 2  元偷偷看……
zhaingbo
6楼-- · 2019-07-20 14:10
楼主程序设计思路相当不错,我也采用同样的处理方案编写了一个嵌入式任务调度框架“NOS调度器”,并托管在了coding上。有兴趣的可以查看下。[mw_shl_code=shell,true]https://coding.net/u/zhaingbo/p/nos/git?public=true[/mw_shl_code]

NOS 是一个基于时间片轮转的简单调度器。 它提供了一组极其简单的调度器接口,以完成系统初始化/启动、添加任务、运行调度器,以及更新调度器状态操作。 调度器可以实现任务的周期性调度,针对任务的周期性,NOS支持任务的普通周期或硬实时周期性调度。

一周热门 更多>