你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
QianFan 发表于 2015-6-29 21:40 Update:0.0.2 改进taskCreate,不再使用malloc和free进行自动内存分配。
Mandelbrot_Set 发表于 2015-6-30 10:50 我又来了哈... example1: void sleep(int delayTicks)中
QianFan 发表于 2015-6-30 12:45 请教个问题,比如当前OS的节拍数是100,有一个任务Task1,调用了自身的sleep,sleep的时间是1000个节拍。 ...
QianFan 发表于 2015-6-30 11:54 看来确实有问题,changePid和sleep能够产生冲突。 比如有一任务Task1,task1Pid==1.
Mandelbrot_Set 发表于 2015-6-30 13:23 我觉得Task1既然sleep(1000)了,那就应该有sleep(1000)的样子,在1100节拍之前就不应该是就绪状态吧... ...
Mandelbrot_Set 发表于 2015-6-30 13:25 以前在msp430g2553langchpad上DIY过os(参考了网上的代码,还没有独立完成的实力...) 功能远比上你这个. ...
QianFan 发表于 2015-6-30 13:32 果然是有经验了。还要帮忙多多的找bug,先谢过啦
意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器
我又来了哈...
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]都有被其它任务修改的可能,应该有风险.
看来确实有问题,changePid和sleep能够产生冲突。
比如有一任务Task1,task1Pid==1.
如果Task1调用了sleep将自己阻塞,而之后另一个任务(Task2)中使用了changePid(task1Pid,10)将task1的优先级改了,这样会立即发生新的任务调度。而之后的某一个时刻,由sleep导致Task1的阻塞被解除,这样也没法恢复了。应该是changePid惹的祸吧。
好多问题需要解决。。。思维不行啊,很多问题想不到。
感谢指正啊,非常感谢,你之前是不是做到这方面的东西呢?感觉想的好全面。
请教个问题,比如当前OS的节拍数是100,有一个任务Task1,调用了自身的sleep,sleep的时间是1000个节拍。也就是到1100个节拍的时候这个任务应该被唤醒。
假设到了第200个OS节拍的时候,另一个任务Task2更改了Task1的优先级,将他的优先级提高了。你说这个时候是应该让Task1立即执行呢,还是到1100个节拍的时候才能再次执行?
我觉得Task1既然sleep(1000)了,那就应该有sleep(1000)的样子,在1100节拍之前就不应该是就绪状态吧...
以前在msp430g2553langchpad上DIY过os(参考了网上的代码,还没有独立完成的实力...)
功能远比上你这个.
那还要大修一次了。
像这样一个函数一个函数的往上面添加,考虑的不全面啊
果然是有经验了。还要帮忙多多的找bug,先谢过啦
经验也说不上,玩现成的OS还是HARDFAULT天天见...