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

自制简单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扩展软件包
关注我们
st-img 微信公众号
st-img 手机版