社区
单片机/工控
帖子详情
ucos程序中多一行代码,程序就无法启动
atuwang
2012-04-15 06:13:31
请教各位大大,ucos程序中多一行代码,程序就无法启动,听说是跨页的问题,敬请提供解决的思路,谢谢!
...全文
172
10
打赏
收藏
ucos程序中多一行代码,程序就无法启动
请教各位大大,ucos程序中多一行代码,程序就无法启动,听说是跨页的问题,敬请提供解决的思路,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
atuwang
2012-04-27
打赏
举报
回复
是分bank的问题,谢谢各位。
atuwang
2012-04-17
打赏
举报
回复
//GROUP
g_CMeasureBuf.x = X_MAINMENU; g_CMeasureBuf.y = Y_MAINMENU-10;
LcdPrintASCII(g_CMeasureBuf.x+4,g_CMeasureBuf.y," GROUP ");
g_CMeasureBuf.y += 12;
LcdDrawRect(g_CMeasureBuf.x, g_CMeasureBuf.y, g_CMeasureBuf.x+81, g_CMeasureBuf.y+23);
PrintSubMenuItem(g_CMeasureBuf.x, g_CMeasureBuf.y,g_CurGroupandItemNo);
替换成:
g_CMeasureBuf.x = X_MAINMENU; g_CMeasureBuf.y = Y_MAINMENU-10;
LcdPrintASCII(g_CMeasureBuf.x+4,g_CMeasureBuf.y," GROUP ");
g_CMeasureBuf.y += 12;
LcdClrRect(g_CMeasureBuf.x, g_CMeasureBuf.y, g_CMeasureBuf.x+80, g_CMeasureBuf.y+22);
LcdDrawRect(g_CMeasureBuf.x, g_CMeasureBuf.y, g_CMeasureBuf.x+81, g_CMeasureBuf.y+23);
LcdPrintASCII(g_CMeasureBuf.x+8, g_CMeasureBuf.y+8,g_CurGroupandItemNo);
代码替换完后,程序无法启动,液晶屏幕不亮。
上述代码中
PrintSubMenuItem和LcdPrintASCII都是在液晶屏幕上显示字符的函数,在程序其他地方测试完全可以的,
芯片是8051F
flpotato
2012-04-17
打赏
举报
回复
你说的这个现象真的不太好说到底是哪儿的问题,如果有仿真器的话建议你调试一下看看,我说的acall和lcall的问题是在写汇编的时候有可能会出错,如果用c写我觉得可能编译器会避免这种问题的吧。
这种异常也有可能是堆栈出错,导致程序无法进行,也就是说你调用的那个函数需要耗费更多的堆栈,单独测可能堆栈还没溢出没问题,跟别的程序一起测的话造成溢出了,这个只是个猜测,你查一下吧,N多年没做51了,很多东西都忘了
atuwang
2012-04-17
打赏
举报
回复
启动后程序就停在这位置B01:0x9291 12AF3B LCALL B01:AF3BP1
atuwang
2012-04-17
打赏
举报
回复
[Quote=引用 6 楼 的回复:]
把函数顺序或文件编译顺序换一下试试,51汇编中有acall和lcall两种函数调用命令,acall好像是有地址跨页的错误,lcall没问题
[/Quote]
楼上的有没更多经验可以传授呢,我函数顺序能换的也换了,文件编译也换了,结果还是一样。有些函数改了,程序可以运行,某些函数稍微动动,液晶屏幕就不亮了。main函数也进不去了。谢谢哈
flpotato
2012-04-17
打赏
举报
回复
把函数顺序或文件编译顺序换一下试试,51汇编中有acall和lcall两种函数调用命令,acall好像是有地址跨页的错误,lcall没问题
lbing7
2012-04-16
打赏
举报
回复
用STM32和MSP430时,从没发现这个问题。。。
net_friends
2012-04-16
打赏
举报
回复
ucos内核那么点 跨什么页了
bluesea87
2012-04-16
打赏
举报
回复
看你具体多一行什么代码
yuanzaikang
2012-04-16
打赏
举报
回复
我在arm7上面跑ucos,也没有遇到这种问题啊
uCOS
II源
代码
剖析—终极篇
学了之后才知道,原来最根本的思想还是源于汇编里面的跳转和压栈,以调用一个函数为例,编译后的汇编肯定是先通过SP压入当前
代码
段地址然后就是保存一些寄存器的值放栈里面(51单片机好像不是这样),然后执行
程序
,...
UCOS
iii--源码阅读
在OSIdleTaskHook() (在os_cpu_c.c)中调用 最终调用的是函数App_OS_IdleTaskHook(),也就是说如果我们想要在空闲任务的钩子函数中做其他处理就需要将
代码
写在App_OS_IdleTaskHook() 如下:空闲任务钩子函数相应的...
uCos
III中使用malloc函数
我在STM32F407核心板上的
uCos
III操作系统中使用malloc时出现了一个奇怪的问题,
程序
第一次使用malloc时能够正常运行,第二次使用malloc函数时直接导致
程序
进入硬件故障异常死循环,实在不解,后询问高手才知要在
启动
...
实时操作系统
UCOS
学习笔记6----
UCOS
III任务管理
多任务操作系统最主要的就是对任务的管理,包括任务的创建、挂起、删除和调度等,因此对于
UCOS
III操作系统中任务管理的理解就显得尤为重要。本章就讲解
UCOS
III中的任务管理。 1、
UCOS
III
启动
和初始化 在使用
UCOS
III...
我看
UCOS
II
关于
UCOS
II的
代码
详解和使用网络上有很多资料和书籍在这就不说了 (比如
UCOS
II源码详解,
代码
中文注释 各函数使用方法解释
UCOS
II参考手册, 介绍
UCOS
II的书籍都有pdf或其他电子档 (原著,任哲的,邵贝贝的...
单片机/工控
27,375
社区成员
28,769
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章