打印

总有些无聊的人

[复制链接]
3407|33
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
eworker|  楼主 | 2008-8-22 13:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
eworker|  楼主 | 2008-8-22 13:54 | 只看该作者

哪位兄台指点一二,谢谢。

使用特权

评论回复
板凳
eworker|  楼主 | 2008-8-22 14:53 | 只看该作者

为了增加模块之间的独立性,用了大量的指针和指针的指针

if (cp1 < cp2){...}
怎么会没有意义?比如:
while (cp1 < cp2)
{
    cp1++;
    ...
}

使用特权

评论回复
地板
音乐乐乐| | 2008-8-22 17:23 | 只看该作者

100% 是程序问题

使用特权

评论回复
5
eworker|  楼主 | 2008-8-22 17:24 | 只看该作者

不懂,别说程序有问题。

使用特权

评论回复
6
mgarm| | 2008-8-22 17:38 | 只看该作者

不要使用仿真器,在实际硬件试一下!

使用特权

评论回复
7
eworker|  楼主 | 2008-8-22 18:22 | 只看该作者

前途路漫漫

所以然。

使用特权

评论回复
8
农民讲习所| | 2008-8-22 19:30 | 只看该作者

PICC时很糟糕

可以试试:比较时强行转换为整数比较

使用特权

评论回复
9
hotpower| | 2008-8-22 20:40 | 只看该作者

除了dps/arm,pic24/pic30是很好的选择

使用特权

评论回复
10
yewuyi| | 2008-8-23 08:56 | 只看该作者

我不已经讲过了吗?

就你给出那一段代码在PICC805+MPLAB+PIC16F913的基础上测试,结果是正确的,至于你是否还有其它代码,并且这个其它代码是否工作正常,我就不清楚了。

地址比较虽然也是可以执行的,但一般来说,个人认为,这不是什么好主意,在原帖中我也已经提醒过你了啊!?

如果芯片是硬件堆栈的,一般就太不适合使用函数指针,非得要用的话,付出的代价就是效率,因为编译器只能开辟RAM区中的某一段做这个使用,因为是硬件堆栈的缘故,真正的调用、返回都是通过直接改动PC指针来实现的,我还真没见过多少人在PIC16/18上使用函数指针的,在PIC24上到是有不少人这么弄。

使用特权

评论回复
11
yewuyi| | 2008-8-23 08:57 | 只看该作者
12
eworker|  楼主 | 2008-8-23 10:36 | 只看该作者

下面是程序中的出现问题的函数

原贴中的描述可能不太清楚。


sint16 inReqOutRep(uint8 **obp, uint16 olen, const uint8 *ibp, uint16 ilen)
{
    const     uint8     *ibpend, *inp;
    uint8     *obpend, *outp;

    ibpend = ibp + ilen;    /* Read from start to end */
    inp = ibp;

    outp = *obp;
    obpend = *obp - olen;
    
    while (inp < ibpend)
    {
         ....  //无论如何测试,里面代码运行不到
    }  
}

使用特权

评论回复
13
yewuyi| | 2008-8-23 10:39 | 只看该作者

呵呵,建议LZ赶快向HOTPOWER拜师。。。

俺晕。。。

使用特权

评论回复
14
eworker|  楼主 | 2008-8-23 10:44 | 只看该作者

晕,也没用。

上面的代码51、x86、LPCARM上都没有问题。

使用特权

评论回复
15
eworker|  楼主 | 2008-8-23 10:46 | 只看该作者

只能说PICC18、MCC18不能正确编译罢了。

使用特权

评论回复
16
hotpower| | 2008-8-23 10:58 | 只看该作者

看while(1){}能测试否???

估计inp < ibpend永远不成立~~~

使用特权

评论回复
17
eworker|  楼主 | 2008-8-23 11:03 | 只看该作者

to hotpower

while (1) {...}成立。

使用特权

评论回复
18
yewuyi| | 2008-8-23 11:12 | 只看该作者

ibpend = ibp + ilen; /* Read from start to end

这个可能有问题;

因为你是这么定义的: const     uint8     *ibpend, *inp


PIC的ROM不一定是按照字节或者字编址的

使用特权

评论回复
19
eworker|  楼主 | 2008-8-23 11:13 | 只看该作者

const和rom攀的上亲?

使用特权

评论回复
20
yewuyi| | 2008-8-23 11:14 | 只看该作者

个人认为那段代码如果不是程序问题,

应该是可以正确编译和执行的。。。


即使PICC18、MCC18功能稍简单,但这个代码应该是可以编译正确,不至于犯错的。

使用特权

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

本版积分规则

29

主题

176

帖子

0

粉丝