你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

自制简单OS(仅任务调度) 精华  

[复制链接]
QianFan 发布时间:2015-6-28 15:36
阅读主题, 点击返回1楼
收藏 8 评论93 发布时间:2015-6-28 15:36
93个回答
Mandelbrot_Set 回答时间:2015-6-30 10:50:48
QianFan 发表于 2015-6-29 21:40
Update:0.0.2

    改进taskCreate,不再使用malloc和free进行自动内存分配。

我又来了哈...
example1:
void sleep(int delayTicks)中
在if((taskList[pid]==NULL)||(pid==IDLE_PID)||(delayTicks==0))
                return ;
之前taskSwOn();之后产生调度
并不能确保taskList[pid]不是NULL(taskList[curpid]本不应该NULL.)
(调度后来了个changePid).
example2:
updateNextTask执行中产生调度,
每一个taskList[pid]都有被其它任务修改的可能,应该有风险.


星辰一方 回答时间:2015-6-30 11:19:26
路过……帮顶~
QianFan 回答时间:2015-6-30 11:54:01
Mandelbrot_Set 发表于 2015-6-30 10:50
我又来了哈...
example1:
void sleep(int delayTicks)中

看来确实有问题,changePid和sleep能够产生冲突。

比如有一任务Task1,task1Pid==1.
如果Task1调用了sleep将自己阻塞,而之后另一个任务(Task2)中使用了changePid(task1Pid,10)将task1的优先级改了,这样会立即发生新的任务调度。而之后的某一个时刻,由sleep导致Task1的阻塞被解除,这样也没法恢复了。应该是changePid惹的祸吧。


好多问题需要解决。。。思维不行啊,很多问题想不到。
感谢指正啊,非常感谢,你之前是不是做到这方面的东西呢?感觉想的好全面。
QianFan 回答时间:2015-6-30 12:45:21
Mandelbrot_Set 发表于 2015-6-30 10:50
我又来了哈...
example1:
void sleep(int delayTicks)中

请教个问题,比如当前OS的节拍数是100,有一个任务Task1,调用了自身的sleep,sleep的时间是1000个节拍。也就是到1100个节拍的时候这个任务应该被唤醒。

假设到了第200个OS节拍的时候,另一个任务Task2更改了Task1的优先级,将他的优先级提高了。你说这个时候是应该让Task1立即执行呢,还是到1100个节拍的时候才能再次执行?
Mandelbrot_Set 回答时间:2015-6-30 13:23:06
QianFan 发表于 2015-6-30 12:45
请教个问题,比如当前OS的节拍数是100,有一个任务Task1,调用了自身的sleep,sleep的时间是1000个节拍。 ...

我觉得Task1既然sleep(1000)了,那就应该有sleep(1000)的样子,在1100节拍之前就不应该是就绪状态吧...

Mandelbrot_Set 回答时间:2015-6-30 13:25:39
QianFan 发表于 2015-6-30 11:54
看来确实有问题,changePid和sleep能够产生冲突。

比如有一任务Task1,task1Pid==1.

以前在msp430g2553langchpad上DIY过os(参考了网上的代码,还没有独立完成的实力...)
功能远比上你这个.
chendiand 回答时间:2015-6-30 13:28:23
顶一个
QianFan 回答时间:2015-6-30 13:31:26
Mandelbrot_Set 发表于 2015-6-30 13:23
我觉得Task1既然sleep(1000)了,那就应该有sleep(1000)的样子,在1100节拍之前就不应该是就绪状态吧...

...

那还要大修一次了。
像这样一个函数一个函数的往上面添加,考虑的不全面啊
QianFan 回答时间:2015-6-30 13:32:19
Mandelbrot_Set 发表于 2015-6-30 13:25
以前在msp430g2553langchpad上DIY过os(参考了网上的代码,还没有独立完成的实力...)
功能远比上你这个. ...

果然是有经验了。还要帮忙多多的找bug,先谢过啦
Mandelbrot_Set 回答时间:2015-6-30 13:45:50
QianFan 发表于 2015-6-30 13:32
果然是有经验了。还要帮忙多多的找bug,先谢过啦

经验也说不上,玩现成的OS还是HARDFAULT天天见...

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版