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

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

[复制链接]
QianFan 发布时间:2015-6-28 15:36
阅读主题, 点击返回1楼
收藏 8 评论93 发布时间:2015-6-28 15:36
93个回答
QianFan 回答时间:2015-6-29 10:09:17
slotg 发表于 2015-6-28 22:34
OS系统,感谢分享

暂且算是一个任务调度器。
Mandelbrot_Set 回答时间:2015-6-29 10:17:12
QianFan 发表于 2015-6-29 10:02
如果是第一个版本的话,可以传递curPid给taskDelete删除自己。但是第一个版本删除自己之后,并不能实时的 ...

如果删除自己,
taskDelete函数里,在
taskSwOn();之后
free(task);之前
SysTick_Handler进行新的任务调度,
会不会导致free失败?



QianFan 回答时间:2015-6-29 10:26:03
Mandelbrot_Set 发表于 2015-6-29 10:17
如果删除自己,
taskDelete函数里,在
taskSwOn();之后

也是,这样的话free就永远不会执行了。。。应该是个bug。
QianFan 回答时间:2015-6-29 10:31:30
Mandelbrot_Set 发表于 2015-6-29 10:17
如果删除自己,
taskDelete函数里,在
taskSwOn();之后

你好,能不能发送一下你的邮箱?希望能多多交流啊。
左岸右岸 回答时间:2015-6-29 10:37:07
没尝试过ucos,学习一下
QianFan 回答时间:2015-6-29 10:46:09
Mandelbrot_Set 发表于 2015-6-29 10:17
如果删除自己,
taskDelete函数里,在
taskSwOn();之后

如果是这样呢?

  1. /*
  2. **delete the task specified by pid from taskList
  3. **And free this task's memory .
  4. */
  5. int taskDelete(unsigned int pid)
  6. {
  7.         if( taskList[pid]==NULL ) //No such task
  8.                 return TASK_ERR_NO_SUCH_TASK;
  9.         if( pid == IDLE_PID)
  10.                 return TASK_ERR_PID_ILLEGAL; //cannot delete idle task
  11.        
  12.         /*save the task to be deleted*/
  13.         struct task *task = taskList[pid];
  14.        
  15.         if(pid == curPid) //delete self
  16.         {
  17.                 /*clean task's pid bit in taskRdyBit and taskList*/
  18.                 taskSwOff();
  19.                         blockTask(pid);
  20.                         taskListClean(pid);
  21.                
  22.                         /*free memory*/
  23.                         free(task->spBase); //is spBase,not sp!!
  24.                         free(task);
  25.                 taskSwOn();
  26.                
  27.                 updateNextTask();
  28.                 swTask();
  29.         }
  30.         else
  31.         {
  32.                 taskSwOff();
  33.                         blockTask(pid);
  34.                         taskListClean(pid);
  35.                 taskSwOn();
  36.                
  37.                 free(task->spBase);
  38.                 free(task);
  39.         }
  40.         return 0;
  41. }

  42. int taskDeleteSelf(void)
  43. {
  44.         return taskDelete(curPid);       
  45. }
复制代码



QianFan 回答时间:2015-6-29 10:50:30
左岸右岸 发表于 2015-6-29 10:37
没尝试过ucos,学习一下

还是尝试一下吧
那就地方iv 回答时间:2015-6-29 11:27:22
谢谢楼主分享
yigerenday 回答时间:2015-6-29 13:35:48
谢谢分享
yigerenday 回答时间:2015-6-29 13:36:04
学习下,,,,,,,,

所属标签

STM32团队

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


最新内容

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