搜索
bottom↓
回复: 9

关于uC/OS的一点小疑惑

[复制链接]

出0入0汤圆

发表于 2010-7-10 22:37:12 | 显示全部楼层 |阅读模式
uC\OS 的每个任务都永远不会返回 我们知道每个任务都是一个函数 C语言每个函数都会在开始执行时建立一些变量而这些变量在函数不返回时都住存在SRAM中
只有当函数返回时才被释放  我想问的是如果我建立一个任务再把它删除,再建立它,在删除,在建立。。。。。。。 那末由于每次都相当于调用一个永远不返回的函数 那是不是这些任务所用的RAM空间都不会被释放 而在一个RAM有限的CPU里会不会出问题???
本人刚学uC\OS 希望高人指点。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2010-7-12 08:51:07 | 显示全部楼层
当发生任务切换时,局部变量就不起作用了。

出0入0汤圆

 楼主| 发表于 2010-7-17 19:24:15 | 显示全部楼层
回复【1楼】ba_wang_mao
-----------------------------------------------------------------------

如果假设cpu RAM除各个任务的堆栈 只有1K 现在当前运行的任务1建立一个占用1KRAM的数组,发生任务切换新任务也建立一个占地1K的数组 那这数组往哪方

出0入0汤圆

发表于 2010-7-18 15:46:51 | 显示全部楼层
这些变量都在任务创建时指定的那个堆栈里面,所以不用担心。

出0入0汤圆

发表于 2010-7-21 12:36:55 | 显示全部楼层
回复【楼主位】YFM_LMM
-----------------------------------------------------------------------

这种状况是不会发生的。
因为μC/OS使用前会让用户定义好任务数,系统在调用OSIint()后会根据定义的任务数建立一张空任务链表,就是书上所谓的OS_TCB缓冲池。建立任务的时候首先是从这种链表中取出一块初始化,删除的时候会将对应需要删除任务的空间加回空任务链表的。
也就是说系统是不允许用户建立无限的任务,能建立的任务数量在启动操作系统前就定死了。

出0入0汤圆

发表于 2010-7-21 12:40:14 | 显示全部楼层
这种状况是不会发生的。
因为μC/OS使用前会让用户定义好任务数,系统在调用OSIint()后会根据定义的任务数建立一张空任务链表,就是书上所谓的OS_TCB缓冲池。建立任务的时候首先是从这种链表中取出一块初始化,删除的时候会将对应需要删除任务的空间加回空任务链表的。
也就是说系统是不允许用户建立无限的任务,能建立的任务数量在启动操作系统前就定死了。

出0入0汤圆

 楼主| 发表于 2010-7-21 16:44:07 | 显示全部楼层
多谢各位同行们的帮助

出0入0汤圆

发表于 2010-7-22 16:52:13 | 显示全部楼层
回复【6楼】gamethink
-----------------------------------------------------------------------

任务的局部变量时保存在任务的堆栈中。

void common(void)
{
   char buf[100];
   ...
  OSTaskDly(1);
}

void TaskAEntries(void *args)
{
  for ( ; ; )
  {
    common();
  }
}

void TaskBEntries(void *args)
{
   for ( ; ; )
   {
     common();   
   }
}

common分配的100字节分别在任务A和任务B的堆栈中,这是任务A和B分别还有900字节的堆栈(假设,实际会小一些),不会有影响。common返回时100字节的空间又释放回给各自任务,又回到1K。


不过要注意堆栈不能溢出,你的1K堆栈分配1K的数组,会立马溢出,程序状态未知。

出0入0汤圆

发表于 2010-8-10 23:15:05 | 显示全部楼层
如果你是反复建立删除一个任务的话 不存在你说的这个问题 因为每个任务建立的时候都要指定它的堆栈栈顶指针*ptos的

除非你每次创建都指定不同的堆栈,否则都是在理所应当在同一个ram区中


删除任务你要担心的是有些资源还正在被当前任务使用没有被释放任务就删除了  从而导致存储器有漏洞

所以uc/os 提供了这个函数 OSTaskDelReq() 叫请求删除任务
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 15:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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