OpenEdv-开源电子网

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

★★★ 自己写的操作系统SCH51(有优先级,可抢占,可用于实际项目)_欢迎各位大神们批评指正 ★★★

  [复制链接]

6

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2014-12-11
在线时间
3 小时
发表于 2015-7-18 16:35:48 | 显示全部楼层
我会让你以我为荣
正点原子逻辑分析仪DL16劲爆上市
回复 支持 反对

使用道具 举报

6

主题

56

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2014-12-11
在线时间
3 小时
发表于 2015-7-18 16:36:22 | 显示全部楼层
回复 支持 反对

使用道具 举报

3

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
376
金钱
376
注册时间
2014-7-4
在线时间
114 小时
发表于 2015-8-15 11:14:06 | 显示全部楼层
学习了,顶楼主。
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2016-1-9
在线时间
6 小时
发表于 2016-1-11 09:46:56 | 显示全部楼层
楼主还是学生就这么厉害了,我仔细看了一下你写代码,框架写得很好,向楼主学习了,
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2016-1-9
在线时间
6 小时
发表于 2016-1-11 09:49:09 | 显示全部楼层
楼主创建的任务中没有调用延时函数,如果调用了应立马释放MCU使用权,期待楼主下一个版本!
回复 支持 反对

使用道具 举报

0

主题

12

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2016-1-11
在线时间
4 小时
发表于 2016-1-11 12:40:13 | 显示全部楼层
楼主真心厉害呀,哎,感觉自己大学没有用心学啊,出了学校了就懊悔了。。。
回复 支持 反对

使用道具 举报

1

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2013-12-9
在线时间
19 小时
发表于 2016-1-17 21:54:51 | 显示全部楼层
谢谢楼主的分享!
我行我可以
回复 支持 反对

使用道具 举报

3

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2016-1-26
在线时间
11 小时
发表于 2016-1-26 13:41:20 | 显示全部楼层
cool,顶楼主。
回复 支持 反对

使用道具 举报

10

主题

271

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1236
金钱
1236
注册时间
2015-5-14
在线时间
352 小时
发表于 2016-1-28 14:46:53 | 显示全部楼层
怎么看怎么都像一个调度器,我这也有一个自己写的,一直在用。
30年众生牛马,60年诸佛龙象!
回复 支持 反对

使用道具 举报

9

主题

85

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3830
金钱
3830
注册时间
2014-7-26
在线时间
525 小时
发表于 2016-1-31 20:30:40 | 显示全部楼层
楼主太牛了,顶起。学习学习了
回复 支持 反对

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
发表于 2016-2-8 11:35:56 | 显示全部楼层
这个调度器的缺点就是加入抢占式任务时容易死机。
手艺人要内外兼修。
回复 支持 反对

使用道具 举报

2

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2015-10-24
在线时间
15 小时
发表于 2016-2-10 16:10:31 | 显示全部楼层
我也写过,只是电脑装系统的时候,代码丢了而已。。。有啥的,很容易。

期待有人能写个类是于GCC的C语言编译代码出来。。。。让我们这些菜鸟看看。。。平台可以是C51,但是一定要中文注释,最讨厌国人写英文注释,装逼死了。。。。
你艹我,我艹你,都一样。
回复 支持 反对

使用道具 举报

0

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
91
金钱
91
注册时间
2016-2-5
在线时间
13 小时
发表于 2016-2-10 20:22:49 | 显示全部楼层
大家看怎么样 我认为很好.

补充内容 (2016-9-20 11:54):
刷Q币sqbi.net
怎么刷Q币shuaqqbi.com
wosqb.com刷QB
回复 支持 反对

使用道具 举报

74

主题

334

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
436
金钱
436
注册时间
2015-5-28
在线时间
144 小时
发表于 2016-3-8 21:36:21 | 显示全部楼层
厉害,mark一下
最近爱上了stm32
回复 支持 反对

使用道具 举报

11

主题

99

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5267
金钱
5267
注册时间
2015-11-5
在线时间
681 小时
发表于 2016-3-9 18:04:06 | 显示全部楼层
楼主请收下我的膝盖, 我正好在学操作系统!
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-3-17
在线时间
7 小时
发表于 2016-3-17 17:04:25 | 显示全部楼层
不错,我理解为时间分片处理,可以这样理解吧?
回复 支持 反对

使用道具 举报

0

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2015-9-6
在线时间
36 小时
发表于 2016-4-12 22:12:24 | 显示全部楼层
牛人啊
回复 支持 反对

使用道具 举报

15

主题

786

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3223
金钱
3223
注册时间
2015-7-26
在线时间
811 小时
发表于 2016-4-23 20:55:55 | 显示全部楼层
本帖最后由 229382777@qq.com 于 2016-4-23 21:02 编辑

自己在32上实现多个任务并行处理的方式跟楼主差不多,楼主将这种方式规范化了,有空我写个STM32版本的上来
我的博客:http://blog.csdn.net/itdo_just
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
152
金钱
152
注册时间
2015-11-17
在线时间
24 小时
发表于 2016-4-26 16:01:45 | 显示全部楼层
楼主强人,厉害了厉害了厉害了.学习中.
回复 支持 反对

使用道具 举报

0

主题

12

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2376
金钱
2376
注册时间
2013-11-11
在线时间
147 小时
发表于 2016-6-30 17:31:11 | 显示全部楼层
谢谢楼主分享。。。
回复 支持 反对

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2016-7-1 09:11:50 | 显示全部楼层
代码很工整啊。
我调试项目,基本上离不开用串**互信息,抢占式直接在中断执行任务,假设任务刚好有打印信息,这样项目就会编译失败51资源非常有限。
1 前后台调用的全局变量要充分使用volatile关键字修饰。
2 可以充分使用串口资源,做成串口巧命令及参数,调试比较有实际意义。
状态机+前后台调度也不错
让我们的思维驾驭在电的速度之上!
回复 支持 反对

使用道具 举报

2

主题

171

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3792
金钱
3792
注册时间
2016-6-26
在线时间
276 小时
发表于 2016-7-2 23:47:26 | 显示全部楼层
非常不错,谢谢分享。
回复 支持 反对

使用道具 举报

5

主题

168

帖子

0

精华

高级会员

Rank: 4

积分
780
金钱
780
注册时间
2016-5-28
在线时间
64 小时
发表于 2016-7-3 12:44:25 | 显示全部楼层
牛淫啊,现在都不好意思告诉别人自己会使用51单片机了。
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2016-9-2
在线时间
0 小时
发表于 2016-9-3 06:25:13 | 显示全部楼层
大师啊
回复 支持 反对

使用道具 举报

10

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
430
金钱
430
注册时间
2016-7-27
在线时间
53 小时
发表于 2016-9-3 13:42:59 | 显示全部楼层
真心6.。。。。。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2016-12-7
在线时间
1 小时
发表于 2016-12-7 18:01:17 | 显示全部楼层
大哥。。这也好意思说是自己写?《时间触发嵌入式系统设计模式》2000年就出版啦。。。
回复 支持 3 反对 0

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2016-12-7
在线时间
1 小时
发表于 2016-12-7 19:16:01 | 显示全部楼层
楼主,另外的话,C51中用了函数指针,需要对KEILC51的overlay做一些改变的
回复 支持 反对

使用道具 举报

10

主题

147

帖子

0

精华

高级会员

Rank: 4

积分
602
金钱
602
注册时间
2015-7-11
在线时间
94 小时
发表于 2016-12-8 21:43:16 | 显示全部楼层
很赞呀,楼主,谢谢分享!!!
回复 支持 反对

使用道具 举报

39

主题

212

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
金钱
303
注册时间
2016-4-21
在线时间
129 小时
发表于 2016-12-19 16:37:33 | 显示全部楼层
怎么没见汇编?那是怎么保护和恢复现场的?
本人交流群:136045527,欢迎各位大佬和萌新
回复 支持 反对

使用道具 举报

39

主题

212

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
金钱
303
注册时间
2016-4-21
在线时间
129 小时
发表于 2016-12-19 16:38:04 | 显示全部楼层
wolfdong7 发表于 2014-4-13 17:55
感觉这个系统很致命。
居然在中断里面处理函数
         if(SCH_tasks.Preemptive_En == 1) / ...

怎么没见汇编?那是怎么保护和恢复现场的?
本人交流群:136045527,欢迎各位大佬和萌新
回复 支持 反对

使用道具 举报

39

主题

212

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
金钱
303
注册时间
2016-4-21
在线时间
129 小时
发表于 2016-12-19 16:38:21 | 显示全部楼层
wolfdong7 发表于 2014-4-13 18:52
花了2天时间看了LZ的代码,还有《时间触发嵌入式系统设计模式》

LZ,你觉得这个标题: 自己写的这个 ...

怎么没见汇编?那他是怎么保护和恢复现场的?
本人交流群:136045527,欢迎各位大佬和萌新
回复 支持 反对

使用道具 举报

13

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
231
金钱
231
注册时间
2016-7-10
在线时间
29 小时
发表于 2016-12-30 17:39:46 | 显示全部楼层
我这个菜鸟在2016年的倒数第二天来顶一下楼主大神
回复 支持 反对

使用道具 举报

7

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
244
金钱
244
注册时间
2016-4-11
在线时间
54 小时
发表于 2017-1-6 09:19:06 | 显示全部楼层
楼主神了
回复 支持 反对

使用道具 举报

38

主题

165

帖子

0

精华

高级会员

Rank: 4

积分
646
金钱
646
注册时间
2014-3-5
在线时间
67 小时
发表于 2017-1-9 13:59:15 | 显示全部楼层
楼主厉害,我也写了一个小型的OS,用在STM8上面,可以支持低功耗,有事情就立马全速干活,没事干就睡觉,但是不能抢占任务。


INT8U Index = 0;         // Index最大为255,所以SCH_MAX_TASKS最大为256       
   
   /* 首先在队列中找到一个空块(如果有的话) */
   while((SCH_tasks[Index].pTask != NULL) && (Index < SCH_MAX_TASKS))
   {
      Index++;
   }   
   if(Index == SCH_MAX_TASKS)  //到达队尾
   {
      Error_code = ERROR_SCH_TOO_MANY_TASKS;
      return SCH_MAX_TASKS;  
   }       

稍微看了下发现if(Index == SCH_MAX_TASKS)  这一行似乎并没有意义,这里是不会被执行到的
Hard work!
回复 支持 反对

使用道具 举报

17

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2013-12-14
在线时间
567 小时
发表于 2017-1-9 15:27:26 | 显示全部楼层
杂牌电子 发表于 2017-1-9 13:59
楼主厉害,我也写了一个小型的OS,用在STM8上面,可以支持低功耗,有事情就立马全速干活,没事干就睡觉,但 ...

可否分享一下实现思路,包括任务调度算法和进程间的通信机制?

我也对OS比较感兴趣,最近也打算写一个。
半导体->模拟电路->数字电路->单片机->汇编->C->操作系统->java
回复 支持 反对

使用道具 举报

20

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
334
金钱
334
注册时间
2012-8-21
在线时间
27 小时
发表于 2017-1-10 11:42:33 | 显示全部楼层
慢慢扩展把,这个还没到极限,
回复 支持 反对

使用道具 举报

38

主题

165

帖子

0

精华

高级会员

Rank: 4

积分
646
金钱
646
注册时间
2014-3-5
在线时间
67 小时
发表于 2017-1-10 17:56:19 | 显示全部楼层
东北小辉辉 发表于 2017-1-9 15:27
可否分享一下实现思路,包括任务调度算法和进程间的通信机制?

我也对OS比较感兴趣,最近也打算写一个 ...

没必要搞的那么复杂,本来就是在低资源下面使用的,进程通讯用全局变量就行了
Hard work!
回复 支持 反对

使用道具 举报

0

主题

81

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2014-9-18
在线时间
21 小时
发表于 2017-1-31 22:08:06 | 显示全部楼层
膜拜大神,先顶再下来学习学习!
回复 支持 反对

使用道具 举报

10

主题

271

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1236
金钱
1236
注册时间
2015-5-14
在线时间
352 小时
发表于 2017-2-12 10:53:58 来自手机 | 显示全部楼层
一只风筝 发表于 2016-12-19 16:37
怎么没见汇编?那是怎么保护和恢复现场的?

你都没有静下心来读源码,它所谓的抢占就是用一个中断做的,编译器自动做了出入栈!
回复 支持 反对

使用道具 举报

39

主题

212

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
金钱
303
注册时间
2016-4-21
在线时间
129 小时
发表于 2017-2-12 22:54:01 | 显示全部楼层
无痕幽雨 发表于 2017-2-12 10:53
你都没有静下心来读源码,它所谓的抢占就是用一个中断做的,编译器自动做了出入栈!

多年之后,感谢回帖。
楼主的代码我看了,乍一看还挺不错,然后发现一个致命的问题,呀,居然在中断里调用函数,好危险啊。
然后我看上面的回帖,发现层主你自己也写了个调度器啊?能否分享下思路呢??我也想尝试下自己捣鼓捣鼓操作系统,但是不会汇编,,,有点尴尬
本人交流群:136045527,欢迎各位大佬和萌新
回复 支持 反对

使用道具 举报

10

主题

271

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1236
金钱
1236
注册时间
2015-5-14
在线时间
352 小时
发表于 2017-2-13 13:09:49 来自手机 | 显示全部楼层
一只风筝 发表于 2017-2-12 22:54
多年之后,感谢回帖。
楼主的代码我看了,乍一看还挺不错,然后发现一个致命的问题,呀,居然在中断里调 ...

https://github.com/wuhenyouyu/fpfsm/blob/master/fpfsm_core.c在这里了,自己看吧,请多提宝贵意见!
回复 支持 反对

使用道具 举报

10

主题

271

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1236
金钱
1236
注册时间
2015-5-14
在线时间
352 小时
发表于 2017-2-13 13:12:29 来自手机 | 显示全部楼层
一只风筝 发表于 2017-2-12 22:54
多年之后,感谢回帖。
楼主的代码我看了,乍一看还挺不错,然后发现一个致命的问题,呀,居然在中断里调 ...

这个只是合作式调度器,不是抢占式。全状态机开发,加上临界区保护,就可以用于实际项目!
回复 支持 反对

使用道具 举报

39

主题

212

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
金钱
303
注册时间
2016-4-21
在线时间
129 小时
发表于 2017-2-13 15:48:03 | 显示全部楼层
无痕幽雨 发表于 2017-2-13 13:09
https://github.com/wuhenyouyu/fpfsm/blob/master/fpfsm_core.c在这里了,自己看吧,请多提宝贵意见!

老哥,没有注释看得我一脸懵逼啊
本人交流群:136045527,欢迎各位大佬和萌新
回复 支持 反对

使用道具 举报

39

主题

212

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
303
金钱
303
注册时间
2016-4-21
在线时间
129 小时
发表于 2017-2-13 16:07:52 | 显示全部楼层
无痕幽雨 发表于 2017-2-13 13:12
这个只是合作式调度器,不是抢占式。全状态机开发,加上临界区保护,就可以用于实际项目!

老哥,我看了下,你用了链表存放任务的一些基本信息吧?
然后我想问下SYS_ENTER_CRITICAL();这句函数里写的是什么?字面翻译:系统进入关键?我感觉这个应该是临界保护之类的吧?
然后最后一个问题,bool scheduler_fpfsm_core_t(void)这个函数应该是用来调度的吧?为什么ptTask = *s_pTaskFIFOHead;之后就要删除任务呢?(delete_task_fpfsm_core_t();)??
if(NULL != ptTask.pCallTask){
            if(ptTask.pCallTask(ptTask.pRam)){
                add_task_fpfsm_core_t(ptTask.pCallTask,ptTask.pRam,ADD_TASK_FIFO_TAIL);
            }  
这三句还是不能理解,还望不吝赐教
本人交流群:136045527,欢迎各位大佬和萌新
回复 支持 反对

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6661
金钱
6661
注册时间
2016-5-29
在线时间
909 小时
发表于 2017-3-15 09:18:39 | 显示全部楼层
楼主的代码连堆栈都没有操作,就实现了可抢占式多任务微内核操作系统,真是高!
回复 支持 反对

使用道具 举报

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
11922
金钱
11922
注册时间
2015-11-5
在线时间
2086 小时
发表于 2017-3-16 11:54:07 | 显示全部楼层
看了楼主的代码,忍不住表达下自己的观点:
1、程序的调度算法思想跟软件定时器非常像;
2、如果抛开代码里面的”抢占“功能,就是状态机了;
3、”抢占“的设计其实很巧妙,并不像OS那样手动保存断点,而是利用硬件自身的中断来自动保存,这点确实很妙;
4、”抢占“的设计有个弊端,因为抢占的任务是在定时器中断里面执行的,如果抢占的任务执行时间过长,会导致
     tick丢失,也就意味着其他任务的延时时间会随着”抢占“任务变化,这点可以改进。
5、纵观整个架构,其实个人更建议用传统的状态机,以LZ代码里面的3个任务为例子,任务1和任务2完全用状态机实现,
     任务3由于需要及时执行,直接在中断里面调用,最终的功能也是一样的。
6、这套代码始终没有解决传统状态机的一个很大的困境,如果某个任务出现多处地方需要delay,这套代码其实还是没能解决
      例如我的某个任务功能如下:
My_Task()
{
    用户代码1.....
    delay(100);
    用户代码2.....
    delay(150);
    用户代码3.....
    delay(80);
    用户代码4.....
    delay(6);
    ......
}
拿来长岛冰茶换我半晚安睡
回复 支持 反对

使用道具 举报

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
11922
金钱
11922
注册时间
2015-11-5
在线时间
2086 小时
发表于 2017-3-16 11:57:04 | 显示全部楼层
无痕幽雨 发表于 2017-2-12 10:53
你都没有静下心来读源码,它所谓的抢占就是用一个中断做的,编译器自动做了出入栈!

大神果然牛逼,一眼就看出这套代码的核心
拿来长岛冰茶换我半晚安睡
回复 支持 反对

使用道具 举报

6

主题

153

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1323
金钱
1323
注册时间
2016-12-27
在线时间
156 小时
发表于 2017-3-16 14:00:52 | 显示全部楼层
FreeRTOS 发表于 2017-3-16 11:54
看了楼主的代码,忍不住表达下自己的观点:
1、程序的调度算法思想跟软件定时器非常像;
2、如果抛开代码 ...

大神,我也花了一段时间深入的学习了一下该系统,还画出的其主要调用程序的流程;但是我弱弱的问一句,这个用户任务程序是怎么个移植使用的?我将DS1302的读时间程序在LCD1602显示,然后外部中断启动按键调节时间程序分成4个任务。最终只会在1602上闪烁显示最初的时间日期;秒表根本不动;是不是调动相应的程序时间太短,或者中间的延时调用时间太多呢??
回复 支持 反对

使用道具 举报

27

主题

711

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
11922
金钱
11922
注册时间
2015-11-5
在线时间
2086 小时
发表于 2017-3-16 15:50:17 | 显示全部楼层
本帖最后由 FreeRTOS 于 2017-3-16 15:53 编辑
大瓶子凌凌漆 发表于 2017-3-16 14:00
大神,我也花了一段时间深入的学习了一下该系统,还画出的其主要调用程序的流程;但是我弱弱的问一句,这 ...

贴上你的代码或工程呗,看下你是怎样使用的
拿来长岛冰茶换我半晚安睡
回复 支持 反对

使用道具 举报

10

主题

271

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1236
金钱
1236
注册时间
2015-5-14
在线时间
352 小时
发表于 2017-3-16 19:52:33 | 显示全部楼层
FreeRTOS 发表于 2017-3-16 11:54
看了楼主的代码,忍不住表达下自己的观点:
1、程序的调度算法思想跟软件定时器非常像;
2、如果抛开代码 ...

这个代码是《时间触发嵌入式系统设计模式 8051系列微控制器开发可靠应用》里面的。第6点很早就已经解决了,非阻塞编程。



30年众生牛马,60年诸佛龙象!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 10:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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