OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 52871|回复: 91

带你为STM32写一个不到100行代码的多任务OS

  [复制链接]

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
发表于 2012-12-11 10:49:00 | 显示全部楼层 |阅读模式
 

带你为STM32写一个不到100行代码的多任务OSfficeffice" />

-- Pony279

写在前面

本文面向的读者为了解RTOS但对于怎样写一个RTOS又无从入手的朋友, 也可以是对RTOS没有任何概念的新手, 但是至少要求你做过定时器实验和GPIO实验.

写这篇文档的主要原因是, 虽然网上介绍编写RTOS的文章不少, 但是在我看来都不够易懂,而且在有现成的 uC/OS的情况下, 网络上也很少与STM32有关的这类文章.

我将会在下面的内容中介绍RTOS的一点概念, 并带你设计, 调试和实现一个简易的多任务OS.

事实上, 在这篇文档里将要实现的多任务OS的代码极其简单, 甚至不能称之为 OS! 我的主要目的是给大家展现一个从裸机通向多任务的 RTOS 的桥梁, 引导大家到一个开始, 而不是编写一个完全意义上的 RTOS. 其实在RTOS方面我也只是个菜鸟, 所以如果你是高手, 请不要批评程序的功能过于简单. 当然, 如果我哪里讲得不对, 或者在讲解的方式上还有改进的地方, 欢迎能给我提出建议. 因为我还有打算在将来空闲的时间修正这份文档并不定期的发布后续文档噢 :-)

具体内容看附件

os_demo.zip

5.48 MB, 下载次数: 89122

https://github.com/roxma
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

头像被屏蔽

82

主题

191

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
465
金钱
465
注册时间
2011-11-14
在线时间
33 小时
发表于 2012-12-11 11:27:40 | 显示全部楼层
下来看看呢,适合我这种新手.
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-12-11 11:35:26 | 显示全部楼层
Pony279又出精品了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

57

主题

431

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
880
金钱
880
注册时间
2011-12-25
在线时间
11 小时
发表于 2012-12-11 11:43:07 | 显示全部楼层
回复【楼主位】Pony279:
---------------------------------
貌似Pony279是华工???
很喜爱电子行业
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-12-11 11:49:18 | 显示全部楼层
回复【4楼】冰是睡着的水:
---------------------------------
嗯, 这个不重要啦
https://github.com/roxma
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-12-11 11:50:12 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
谢谢原子哥
https://github.com/roxma
回复 支持 反对

使用道具 举报

57

主题

431

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
880
金钱
880
注册时间
2011-12-25
在线时间
11 小时
发表于 2012-12-11 11:52:48 | 显示全部楼层
回复【6楼】Pony279:
---------------------------------
其实很羡慕你的。。学了那么多。。
很喜爱电子行业
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-12-11 12:08:03 | 显示全部楼层
回复【7楼】冰是睡着的水:
---------------------------------

其实我只是比较偏向软件一点, 做硬件我就不行了

以前学算法的时下又半途而废了, 感觉离一个优秀的程序员还是有好一段距离的

最近在学习写代码文档和用wrod写技术文档, 感觉工作以后写文档的时间应该会比写代码花的时间更多一些
https://github.com/roxma
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2012-12-11 12:12:39 | 显示全部楼层
骤雨龙元和Tarids在合伙搞手机了,呵呵,期待他们的大作。
Pony279 ,偏软的话,找个方向深入研究下,比较不错的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

57

主题

431

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
880
金钱
880
注册时间
2011-12-25
在线时间
11 小时
发表于 2012-12-11 12:12:43 | 显示全部楼层
回复【8楼】Pony279:
---------------------------------
设计文档是重要,代码其实是一个产品最简单的步骤。关键在设计。。呵呵。。
很喜爱电子行业
回复 支持 反对

使用道具 举报

57

主题

431

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
880
金钱
880
注册时间
2011-12-25
在线时间
11 小时
发表于 2012-12-11 12:14:37 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
那么强悍。。。
很喜爱电子行业
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-12-11 12:20:53 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
哇, 用STM32做手机, 期待啊~
https://github.com/roxma
回复 支持 反对

使用道具 举报

5

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2012-10-12
在线时间
0 小时
发表于 2012-12-11 12:21:02 | 显示全部楼层
回复【11楼】冰是睡着的水:
---------------------------------
顶一下楼主,加油,挺你。。。。
回复 支持 反对

使用道具 举报

72

主题

251

帖子

0

精华

高级会员

Rank: 4

积分
597
金钱
597
注册时间
2012-3-29
在线时间
7 小时
发表于 2012-12-11 13:08:45 | 显示全部楼层

太牛了 .好多不明白的

这个是用什么软件编译啊?

b.w clear_int_flag 这个函数在哪里

还有很多地方能再详细点就好了                                        

回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-12-11 15:35:50 | 显示全部楼层
回复【14楼】grant:
---------------------------------
clear_int_flag 定时器1中断清零函数, 在代码里面有的, 其实没有必要去关心这个的
就是用 mdk 编译的, 这个在 读我.txt 文件里面有说明的 凡是有发布文件的, 第一个应该看的就是 readme 文件, 这个是常识哦
https://github.com/roxma
回复 支持 反对

使用道具 举报

25

主题

163

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2012-4-29
在线时间
38 小时
发表于 2012-12-12 08:44:33 | 显示全部楼层
非常感谢
回复 支持 反对

使用道具 举报

22

主题

74

帖子

3

精华

高级会员

Rank: 4

积分
646
金钱
646
注册时间
2012-9-9
在线时间
1 小时
发表于 2012-12-12 11:24:28 | 显示全部楼层
楼主可以写一个完整的简单的多任务调度器,代码也不多,再出个文档定能火。顺便为以下楼主C++学得不错……工作签哪了?
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2012-12-12 11:40:01 | 显示全部楼层
回复【17楼】柯南大侠:
---------------------------------
任务调度算法最近在构思,
我在接触OS这个概念之前最不理解的就是 CPU 使用权的转移, 因为这是连接着算法和CPU的部分, 所以才特的挑这一部分来写的文档. 至于算法属于纯软件问题, 我感觉纯软件问题都是相对比较好理解的. 所以如果要发后续文档可话可能就不会详细讲实现的过程了 ...

C++ 学得有点马虎, 不过感觉已经很实用了. 现在大三, 还没想着工作呢 ...
https://github.com/roxma
回复 支持 反对

使用道具 举报

14

主题

490

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1229
金钱
1229
注册时间
2012-8-4
在线时间
248 小时
发表于 2012-12-12 12:14:29 | 显示全部楼层
必须顶啊
回复 支持 反对

使用道具 举报

96

主题

762

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1228
金钱
1228
注册时间
2012-10-19
在线时间
15 小时
发表于 2012-12-12 16:48:27 | 显示全部楼层
回复【楼主位】Pony279:
---------------------------------
昨天刚说大神的,今天就神了,我这种学机械的只有膜拜的份~听说你也是华工的? 还大三?技术文档不用担心,很简单的东西。关键是产品设计思路,出个老掉牙的产品再怎么好也没用。接下来嘛就是深厚的功底了~
回复 支持 反对

使用道具 举报

96

主题

762

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1228
金钱
1228
注册时间
2012-10-19
在线时间
15 小时
发表于 2012-12-12 16:59:54 | 显示全部楼层
你们说的华工是华南?华中?华西?华北?
回复 支持 反对

使用道具 举报

96

主题

762

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1228
金钱
1228
注册时间
2012-10-19
在线时间
15 小时
发表于 2012-12-12 17:00:38 | 显示全部楼层
回复【7楼】冰是睡着的水:
---------------------------------
我很羡慕你,找了个这么漂亮的媳妇
回复 支持 反对

使用道具 举报

8

主题

103

帖子

0

精华

初级会员

Rank: 2

积分
187
金钱
187
注册时间
2012-11-12
在线时间
22 小时
发表于 2013-1-28 15:28:36 | 显示全部楼层
回复【21楼】tian123chi:
---------------------------------
哈哈,华南理工的吧,和原子哥一样
没人看你努力的过程,只看最后的结果。
回复 支持 反对

使用道具 举报

8

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2012-10-18
在线时间
7 小时
发表于 2013-1-28 20:37:02 | 显示全部楼层
多谢分享~
回复 支持 反对

使用道具 举报

38

主题

526

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1419
金钱
1419
注册时间
2011-11-27
在线时间
122 小时
发表于 2013-1-28 23:05:10 | 显示全部楼层
谢谢楼主,下载学习喽~
永远保持一颗学习的心态。
回复 支持 反对

使用道具 举报

24

主题

106

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
279
金钱
279
注册时间
2012-3-21
在线时间
17 小时
发表于 2013-1-29 16:44:56 | 显示全部楼层
  楼主,那如果有三个任务,任务优先级分别为5,6,7.开始OS后它就应该是先执行5了,然后再到6,但当6完成后,感觉它又会回到5,不会执行7。不明白三个以上的任务时是怎么调度的。
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2013-2-17
在线时间
1 小时
发表于 2013-2-17 11:35:58 | 显示全部楼层
收到,非常感谢
回复 支持 反对

使用道具 举报

20

主题

75

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2013-1-21
在线时间
3 小时
发表于 2013-2-17 13:37:53 | 显示全部楼层
学RTOS需要什么基础吗?
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2013-2-17 13:52:03 | 显示全部楼层
回复【28楼】jy02326166:
---------------------------------

想学就直接学咯, 不懂的自己想办法解决. 不用啥事都等着系统的学.
https://github.com/roxma
回复 支持 反对

使用道具 举报

3

主题

11

帖子

1

精华

初级会员

Rank: 2

积分
193
金钱
193
注册时间
2013-5-20
在线时间
0 小时
发表于 2013-5-20 21:48:54 | 显示全部楼层
很喜欢操作系统啊,支持楼主^_^,正在X86平台上一步一步照葫芦画瓢地搭建一个操作系统,感觉很有意思。
程序猿当以慈悲为怀。
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
发表于 2013-5-21 21:33:18 | 显示全部楼层
回复【29楼】Pony279:
---------------------------------
深感佩服。
但问下:1、编写一个能够支持多任务切换的程序(或OS)是不是必须依赖相应的处理器?能用纯软件的方法去实现吗?
2、怎么样用一个队列实现多个任务间的通信?我的队列只能实现固定的某2个任务间的通信。怎么解决呢?
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2013-5-22 00:20:29 | 显示全部楼层
回复【31楼】可乐虎:
---------------------------------
1. 多任务切换至少要能够中断和现场保护的,最底层当然是用汇编实现的,单纯的C语言是无能为力的。通常一个OS对应用程序的接口是一定的,只不过在不同的处理器时底层的汇编代码不一样而已,上层的应用代码还是不需要修改的。
2. 这个问题比较笼统,你可以去参考ucos相关的书和它的源代码。
https://github.com/roxma
回复 支持 反对

使用道具 举报

11

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
366
金钱
366
注册时间
2012-10-1
在线时间
20 小时
发表于 2013-5-22 08:07:13 | 显示全部楼层
不错,赞成楼主的贡献,希望能步步推进到完全可以使用的RTOS啊!
回复 支持 反对

使用道具 举报

27

主题

774

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1473
金钱
1473
注册时间
2013-4-12
在线时间
77 小时
发表于 2013-5-22 10:43:53 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------是不是金龙开发板那个?好像是在深圳龙岗
简单是多么的快乐,而快乐就因你而简单!微芯动力LTKKS
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
发表于 2013-5-22 11:12:32 | 显示全部楼层
回复【32楼】Pony279:
---------------------------------
谢谢!最近我也再研究多任务切换与多任务通信,不过还是在51上整!以后多像你请教。不过ucos里的通信的代码有点过于专业啊,我想用点简单实用的方法去实现。基本就用点队列呀、栈之类的就能实现 就最好了,要是有好思路,提示下哦!
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

33

主题

253

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2012-8-16
在线时间
0 小时
发表于 2013-6-26 16:01:19 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
那么强悍啊,,,,
开源的世界,你可以做主!!
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2013-6-27 09:44:47 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
卧槽,这个玩意不了了之,当时是因为SIM900A的能源问题。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-6-27 10:32:38 | 显示全部楼层
回复【37楼】Tardis:
---------------------------------
能源问题?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2013-6-27 10:53:08 | 显示全部楼层
回复【38楼】正点原子:
---------------------------------
供电问题,还有天线问题,弄手机简单功能可以,但要弄上网之类的,STM32有鸭梨了,加上弄9轴传感器,弄了之后用途不大,放着放着,我是有画过了一个样板,可布线总没通过,久而久之,龙哥玩H264去了,我转型A8玩去了。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-6-27 10:57:55 | 显示全部楼层
可惜了...
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2013-6-23
在线时间
0 小时
发表于 2013-6-28 21:42:58 | 显示全部楼层
不知道原子哥有没有STM32F103XX系列modbus通信协议方面的文档或者程序参考一下呢?
回复 支持 反对

使用道具 举报

69

主题

216

帖子

0

精华

高级会员

Rank: 4

积分
514
金钱
514
注册时间
2012-3-21
在线时间
0 小时
发表于 2013-6-28 21:54:23 | 显示全部楼层
这个,必须要支持!
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-6-29
在线时间
3 小时
发表于 2013-6-29 22:19:10 | 显示全部楼层
回复【楼主位】Pony279:
---------------------------------
我是新手,应该会有帮助,谢谢!
回复 支持 反对

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2013-6-24
在线时间
0 小时
发表于 2013-7-2 19:33:11 | 显示全部楼层
我你为你跟我一个姓氏呢,我的同事都叫我“华工”
好好学习,天天向上
回复 支持 反对

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
发表于 2013-7-4 17:39:54 | 显示全部楼层
人才,难得的人才!
手艺人要内外兼修。
回复 支持 反对

使用道具 举报

31

主题

64

帖子

0

精华

高级会员

Rank: 4

积分
637
金钱
637
注册时间
2012-10-27
在线时间
63 小时
发表于 2013-7-4 21:10:55 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

13

主题

202

帖子

0

精华

高级会员

Rank: 4

积分
527
金钱
527
注册时间
2012-10-27
在线时间
65 小时
发表于 2013-7-6 22:30:12 | 显示全部楼层
回复【楼主位】Pony279:
---------------------------------
您好!我下载了你的os压缩包,里面有“1_点灯实验”和“2_os”,我都下载试了,两个下载到mini板子上都是什么反应都没有,为什么呢?红灯也没亮,而且Jlink下载完成的速度也比平常下载原子的例程快。我的板子是V1.9。
回复 支持 反对

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2195
金钱
2195
注册时间
2012-2-8
在线时间
34 小时
 楼主| 发表于 2013-7-10 21:00:30 | 显示全部楼层
回复【47楼】arm51avr:
---------------------------------
程序是测试过才上传的,你确定能跑Mini板原配的例程吗?
我现在在工作了,不在学校,木有测试条件啊
https://github.com/roxma
回复 支持 反对

使用道具 举报

20

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2011-12-14
在线时间
0 小时
发表于 2013-8-17 17:12:37 | 显示全部楼层
好贴,学习!
回复 支持 反对

使用道具 举报

17

主题

80

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2012-9-15
在线时间
33 小时
发表于 2013-8-27 21:31:00 | 显示全部楼层
学无止境啊
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 20:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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