请教函数返回值为bit类型时出现的怪问题

[复制链接]
 楼主| alphal 发表于 2008-1-14 11:49 | 显示全部楼层 |阅读模式
程序之前运行的好好的,后来在程序中其它不相关的地方增加了些功能,现在测试发现键盘扫描程序在没按键的时候会莫名的返回错误按键.
用仿真器跟踪发现,键盘扫描程序返回的是个bit类型的变量,该变量初始化值为false,有按键则返回true,跟踪发现,没有检测到按键,也没有进入到相关有按键的程序段,该变量有时候会自己变成true了,看该bit变量的存储位置是[c:0x****](code区???),即使把该变量定义到bdata区,查看到的存储位置还是[c:0x****],奇怪怎么跑到code区去了?而我将该变量的类型改成unsigned char之后就没再出现这样的问题了,真是奇怪.

1.为何bit变量定义后,看到的存储空间是[c:0x****],定义到code区了?而且强制定义到bdata也没有改变.
2.难道是我修改后的程序内部运行时在另外一个不相关的地方错误的将该bit变量存储空间内的值改变了?怎么来定位这样的问题?我之前是看内存分配,看其相邻的变量是不是操作溢出了,而此处bit变量好像给存到code区了,没法看.而且也不怎么好定位吧.
3.bit类型做函数返回类型有什么不妥吗?
LastNew 发表于 2008-1-14 11:53 | 显示全部楼层

声援一下

up
 楼主| alphal 发表于 2008-1-14 12:40 | 显示全部楼层

tks

评论

斗罗大陆漫画 www.jinjidejuren.tv/doupocangqiong/  发表于 2014-4-8 22:23
AIRWILL 发表于 2008-1-14 12:49 | 显示全部楼层

我也用 bit 返回

是KEIL C51 吧? 没有发现任何错误呀

对了,bit类型返回的时候,是用 CY 保存的,并非通过工作寄存器
孤星119 发表于 2008-1-14 13:17 | 显示全部楼层

关于BIT变量:

用#pragma disable说明的函数和usign指定的函数.不能返回BIT值
 楼主| alphal 发表于 2008-1-14 13:35 | 显示全部楼层

我也只是现在才出现这个问题

程序其它地方也有bit返回的,包括这个地方之前用bit返回也没有问题,不知道现在为何就有问题了,但确实程序改动的只是个不相关的地方,而且运行也没有问题.

所以奇怪,而且最奇怪的是怎么看到它存储位置是code区????或者是仿真器的问题?
 楼主| alphal 发表于 2008-1-14 16:27 | 显示全部楼层

没人能指点一下吗

ayb_ice 发表于 2008-1-14 16:32 | 显示全部楼层

随便说说

用#pragma disable说明的函数和usign指定的函数.不能返回BIT值,另外我认为也没有必要用返回bit值,用字节是一样的。。。
happystar 发表于 2008-1-14 17:55 | 显示全部楼层

好久没看到ayb_ice了,估计天天忙着数钱呢

我也搞不明白LZ的问题。反正KC里边有很多方式都不适合bit的。比如switch (bit a)就报错。
干脆把这个bit设为全局变量吧,反正也不影响程序的
 楼主| alphal 发表于 2008-1-14 18:22 | 显示全部楼层

我是将它改成返回unsigned char就没问题了.

但这个问题对我来说的确是怪怪的,很想知道是为什么.

您需要登录后才可以回帖 登录 | 注册

本版积分规则

112

主题

473

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部