搜索
bottom↓
回复: 11

UCOS任务中的局部变量保存

[复制链接]

出0入0汤圆

发表于 2008-4-30 08:12:18 | 显示全部楼层 |阅读模式
请问下ucos里一个任务中的局部变量 如int aa, char bb[20]; 这些局部变量在发生任务切换时 被保存到什么地方了?相应的保存代码又在什么地方呢?

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出10入0汤圆

发表于 2008-4-30 08:30:33 | 显示全部楼层
任务自己的堆栈里,编译器编译时就分配好空间了

出0入0汤圆

发表于 2008-4-30 09:03:43 | 显示全部楼层
任务堆栈不是编译器编译时分配好的空间,是你在创建任务时的函数里传递的堆栈空间位置,就是INT8U  OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio)里的OS_STK *ptos。在不同任务切换时实际上也同时在几个事先开出的存储区之间切换。
至于局部变量有两种情况:
一种是编译器分配到寄存器中使用的,这种局部变量会在任务切换时保存到任务自己的堆栈
另一种情况是从堆中分配的,就是在系统公共RAM区分配的存储空间,这种空间应当在函数返回是释放的,但是你的任务是没有返回的死循环所以这个空间没有释放

出0入0汤圆

 楼主| 发表于 2008-4-30 09:16:29 | 显示全部楼层
那假设系统有10个任务 每个任务中都有char bb[20];这样的局部变量字符串数组 因为任务是死循环形式 那编译器在为10个任务的局部数组分配空间时 是否可能出现不同任务之间的局部数组所在的系统公共RAM地址相同 即在任务1中的一个局部数组char bb[20]; 被安排在RAM中的0x50 - 0x64之间 而任务2中的局部数组char bb[20];也被安排在0x50 - 0x64之间  如果出现这种情况的话 那么在任务切换时 岂不是会发生任务中局部变量数组混乱 任务运行出错的情况?

出0入0汤圆

发表于 2008-4-30 09:22:59 | 显示全部楼层
不会的,局部变量对其它函数是不可见的,因此编译器编译时或者说程序运行时是从可用空间来分配的。如果出现上面的情况那就是你的编译器有问题了,呵呵。

出0入0汤圆

 楼主| 发表于 2008-4-30 09:52:08 | 显示全部楼层
有没有关于编译器如何对局部变量进行处理方面的资料啊 ? 我还是很糊涂

出0入0汤圆

 楼主| 发表于 2008-4-30 09:53:34 | 显示全部楼层
还有你的意思是不是 如果任务中的局部变量放在堆中的话  在做任务切换时 程序根本就不对此任务的局部变量做任何处理 ?

出0入0汤圆

发表于 2008-4-30 10:37:27 | 显示全部楼层
要详细了解的话你得去看看编译原理和C语言中变量处理方面的书。严格说在ucos里,任务就是一个函数所以切换时对保存在堆中断局部变量是做保存的,因为其它函数不会去破坏它。你也可以看看编译器的说明书中有关混合编程的部分,一般也会有详细的参数传递,寄存器分配说明

出0入0汤圆

 楼主| 发表于 2008-4-30 10:49:47 | 显示全部楼层
7楼 可以把QQ给我吗?  我有问题请教你

出0入0汤圆

 楼主| 发表于 2008-4-30 11:33:59 | 显示全部楼层
还有我想在UCOS里用C++编程  因为UCOS核是用C写的  所以我在用C++编程是需要注意那些地方呢?

出0入0汤圆

发表于 2008-4-30 12:20:28 | 显示全部楼层
9楼,我没有用过C++编UCOS,这还真帮不到你。我的QQ:379100379

出0入0汤圆

发表于 2008-5-18 15:58:28 | 显示全部楼层
只要你用C++编译器支持的话,在你的应用程序中是可以用C++编程的,因为C可以看做C++的子集。但是,本人在用Borland C时,似乎使用C++就编译出错,而ADS里就不存在问题。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-20 17:43

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

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