OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 2726|回复: 7

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

[复制链接]

  离线 

8

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2016-8-3
在线时间
63 小时
发表于 2017-5-26 22:48:12 | 显示全部楼层 |阅读模式
有一两个月没来论坛了,分享点东西。
    估计学过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⊙)。

C  .png
声明.png
实现.png
运行.png

程序设计与数据结构(仅供阅览不可印刷).pdf

19.84 MB, 下载次数: 3800

飞控板源码(下板STM8S003)--第一版.zip

9.74 MB, 下载次数: 691

回复

使用道具 举报

  离线 

4

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
金钱
322
注册时间
2016-8-4
在线时间
140 小时
发表于 2017-5-30 17:35:37 | 显示全部楼层
老哥用003做飞控?
回复 支持 反对

使用道具 举报

  离线 

8

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2016-8-3
在线时间
63 小时
 楼主| 发表于 2017-6-2 18:18:05 | 显示全部楼层
小施 发表于 2017-5-30 17:35
老哥用003做飞控?

不是,其是做为飞控的独立部分。
回复 支持 反对

使用道具 举报

  离线 

4

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
金钱
322
注册时间
2016-8-4
在线时间
140 小时
发表于 2017-6-2 20:45:43 | 显示全部楼层
穹顶之下 发表于 2017-6-2 18:18
不是,其是做为飞控的独立部分。

用的双核?我最近刚在学STM8
回复 支持 反对

使用道具 举报

  离线 

4

主题

51

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
金钱
322
注册时间
2016-8-4
在线时间
140 小时
发表于 2017-6-12 16:53:37 | 显示全部楼层
穹顶之下 发表于 2017-6-2 18:18
不是,其是做为飞控的独立部分。

老哥能加QQ 交流吗 893601353 黄施泓
回复 支持 反对

使用道具 举报

  离线 

8

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2016-8-3
在线时间
63 小时
 楼主| 发表于 2017-6-17 20:09:15 | 显示全部楼层
小施 发表于 2017-6-12 16:53
老哥能加QQ 交流吗 893601353 黄施泓

我QQ:2752301152,技术问题,欢迎一起攻克或交流。
回复 支持 反对

使用道具 举报

  离线 

1

主题

2

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2015-6-19
在线时间
2 小时
发表于 2018-5-14 09:45:41 | 显示全部楼层
楼主程序设计思路相当不错,我也采用同样的处理方案编写了一个嵌入式任务调度框架“NOS调度器”,并托管在了coding上。有兴趣的可以查看下。
[Shell] 纯文本查看 复制代码
https://coding.net/u/zhaingbo/p/nos/git?public=true


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

使用道具 举报

  离线 

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2013-9-9
在线时间
19 小时
发表于 2018-6-5 16:23:32 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




关闭

报名原子哥新品发布会&粉丝见面会上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-10-22 09:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */