发新帖我要提问
12
返回列表
打印

一个和指针有关的很无奈的怪问题!请大侠们帮我猜猜问题

[复制链接]
楼主: alphal
手机看帖
扫描二维码
随时随地手机跟帖
21
xplore| | 2007-11-16 13:24 | 只看该作者 回帖奖励 |倒序浏览

pdata

偶也做不少51的项目, 从来没用过pdata, 不太理解, 惹不起还躲不起吗

使用特权

评论回复
22
平常人| | 2007-11-16 20:44 | 只看该作者

乱猜一下,是不是堆栈溢出?是不是代码空间溢出?最好是

最好是看看这段代码的反汇编结果,然后跟踪汇编码看看跑到哪里去了。

使用特权

评论回复
23
alphal|  楼主 | 2007-11-19 22:59 | 只看该作者

现在将结构体内的数据类型改了一下

typedef struct
{
  u1_t cmd;           //!< command code 
  s1_t status;        //!< communication status
  u1_t nBytesSent;    //!< how many bytes already sent
  u1_t nBytesToSend;  //!< how many bytes to send
  u1_t nBytesReceived;//!< how many bytes received
  u1_t nBitsReceived; //!< how many bits received
  u1_t irqSource;     //!< which interrupts have occured
  u1_t collPos;       /*!< at which position occureda           collision*/
  u1_t errFlags;      //!< error flags
  u1_t saveErrorState;//!< accumulated error flags for
  //!< multiple responses
  u1_t RxAlignWA;     //!< workaround for RxAlign = 7
  u1_t DisableDF;     //!< disable disturbance filter
} MfCmdInfo;
其中
  u1_t nBytesSent;    //!< how many bytes already sent
  u1_t nBytesToSend;  //!< how many bytes to send
  u1_t nBytesReceived;//!< how many bytes received
  u1_t nBitsReceived; //!< how many bits received
改成u1型了,原本是u2_t型(即uint型)。
问题就没有了:结构体和数组放片外,用指针操作没有问题。真是奇怪,我对比查看了编译后的汇编代码也没发现什么问题,而且就是不用指针时,跟踪到最底层的数据输出都没有出错的。
现在先就这样用着吧,但是这个地方真的无法理解,猜想是不是MpIsrOut[MpIsrInfo->nBytesSent]这样指针套指针,而且还是片外、双字节数,keil编译出的代码有漏洞???但是这里再重复一下:1、跟踪到最底层的数据输出数据都没有出错。2、编译出的汇编代码看不出问题。3、如果都放在片内就没有问题。
另外:这个程序最多的时候函数发生了6级嵌套,也就是这个函数里的时候最深。不知道这里会不会有疑点,我用的是keil3 8.05a版本。


堆栈溢出,代码空间溢出应该不会,ram和code区的使用还远未到容量。而且如果溢出,程序应该不跑飞也是瞎跑吧,但这里程序运行轨迹没有问题,能重复运行。

使用特权

评论回复
24
high| | 2007-11-19 23:17 | 只看该作者

第一反应也是堆栈出问题.

使用特权

评论回复
25
alphal|  楼主 | 2007-11-19 23:25 | 只看该作者

怎么能判断出是堆栈出问题了?

使用特权

评论回复
26
alphal|  楼主 | 2007-11-20 13:30 | 只看该作者

继续等待。。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则