完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
最近闲着无聊移植了一下ucos到stc的单片机里面,发现如下问题
void Taska(void *aa) reentrant { char a=0; char b=0; a++; b++; OStimeDly(2); } void Taskb(void *bb) reentrant { char a=0; char b=0; a++; b++; OSTimeDly(2); } 在keil中仿真都不会得到 a和b累加的结果 观察得到的结论是两个task中的a和b地址被ucos中的其它变量使用了 只有将a和b变量定义为static 才能正常工作 但是我观察别人移植的ucos任务里面定义局部变量时没有加static限制一样正常使用 请问是什么问题? 我以前理解的都是keil中局部变量都作为静态变量分配地址的 。。。 难道局部变量keil能自动优化? |
|
相关推荐
7个回答
|
|
自己顶 不要掉下去了
|
|
|
|
不错,下载下来看看。。。
|
|
|
|
自己再顶着
|
|
|
|
仿真不是万能的 你可以添加几个全局变量 把局部变量的值付给他 查看变量! 用不用static 要看你的功能需求!
|
|
|
|
|
|
|
|
自己搞错了 忽略了函数重入部分的堆栈指针?C_XBP 以为这个部分keil会自动完成
网上查资料得:任务分配的变量可以被覆盖,因为有了仿真堆栈?C_XBP 所以当任务被切换后原来的变量可能就会被新任务的某些变量覆盖 所以需要保存?C_XBP指针以便在任务切换回来的时候进行复原 因为是可重入函数,所有局部变量都会保存到仿真栈中,所以这时任务就可以正常运行起来了 不知这样说对不对 还有一个问题就是这时的任务堆栈就只保存了CP指针和?C_XBP指针以及r0-r7 PSW DPL DPH B ACC寄存器 那么任务堆栈不是就可以很小了么 反而需要把XBPSTACKTOP分配大一些才行 求指教 感谢上面的意见 不过仿真都跑步起来 还找不到问题 那在硬件上找问题更困难了点吧 |
|
|
|
设置好STARTUP.A51中的XBPSTACK和XBPSTACKTOP 已经可以运行在STC15L2K16S上面了 不过还有很多疑问没解决 上面那个仿真栈中的数据与任务堆栈的问题还是不懂 求指教
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
277 浏览 0 评论
【敏矽微ME32G070开发板免费体验】之原厂2812测试例程解析
368 浏览 0 评论
766 浏览 2 评论
《DNESP32S3使用指南-IDF版_V1.6》第二十六章 INFRARED_RECEPTION实验
592 浏览 0 评论
879 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12034 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 23:30 , Processed in 0.519972 second(s), Total 53, Slave 47 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号