打印

MCC18和PICC使用中发现的问题

[复制链接]
4345|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
eworker|  楼主 | 2008-8-21 16:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
pic, TI, TE, IO, App
MCC18中使用函数指针,即报错如下:

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

例如:mibp->get(mvp - mibp->mvp, tabix, &vptr);

PICC18中指针的地址,报错如下:expression syntax。例如:
uint8 *cp;
uint buffo[100];

cp = &buffo;

哪位大侠能指点一下?
沙发
eworker|  楼主 | 2008-8-21 16:48 | 只看该作者

选用PIC,感觉就像上了贼船。

问题多多,项目完成时间一拖再拖。

使用特权

评论回复
板凳
yewuyi| | 2008-8-21 17:40 | 只看该作者

~~

PICC18中指针的地址,报错如下:expression syntax。例如:
uint8 *cp;
uint buffo[100];
cp = &buffo;



貌似没什么问题,但buffo[100]可是一个100字节的RAM开销,对于PIC来说,这个RAM开销太大了,特别是你没指定RAM的BANK,那么一般就会被自动定位到BANK0,显然在BANK0是装不下这么大的数组的,因为肯定还有别的RAM消耗,一个BANK为128字节。

建议,留出BANK1专门给这个数组用,这样写看看能不能通过,例如:
bank1 uint buffo[100]={0x00};

以上全靠使用PIC16的经验,我没有实际使用过PIC18,所以只能根据直觉给你一点建议,希望能解决问题。

呵呵,至于使用PIC是否是上了贼船,俺就不好评价了,PIC的东西与别的家是有一些不一样,特别是与过去的51等,用熟悉了也就无所谓了。。。

使用特权

评论回复
地板
su_mj000| | 2008-8-21 23:47 | 只看该作者

语句有问题

cp = &buffo;

这句语句有问题。改成

cp = (uint8*)buffo; 

 或

char **cp;
...
cp = (uint8 **)&buffo;


另:
100字节的RAM数组非常合理、自然。每个BANK有256字节(而非128字节),为何无法定位其中呢?我没正式地用过PICC18编译,但从各方面的意见和评论来看,它是个非常不错的工具,应该成为首选。


使用特权

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

经过修改可以编译通过了,但是...

我的程序中,用了大量的指针的指针作为函数的参数,很多处理都涉及到指针的移动和比较,上面提到的两个问题,经过修改,编译都过了,但是,实际运行结果却一沓糊涂。例如:
uint8 *cp1;
uint8 *cp2;
uint8 buffo[100];

cp1 = buffo;
cp2 = buffo + 0x21u;

if (cp1 < cp2){...}

以上代码在51、x86、arm7都用过,没有任何问题,但在pic中,编译可以通过,但if逻辑根本不成立,根本运行不到if里面的语句。仿真时将鼠标移到cp1、cp2、buffo上面,显示cp1为0x9f,cp2为0xbc0。

后来反复想,可能是pic的内存分页机制导致的。惨痛的是,我的程序又要重新写了。

后悔使用pic!!!

使用特权

评论回复
6
yewuyi| | 2008-8-22 08:47 | 只看该作者

晕,uint buffo[100]应该是200个字节

PIC上一个BANK不一定是256个字节,在PIC16上很多都是一个BANK有128个字节,我没真正用过PIC18,呵呵,我所以只能根据直觉给你一点建议。


LZ弄的uint8、uint很容易让人看晕,最好写成uchar、uint或者uint8、uint16这样便于区分,否则一走神就容易把两个看混。。。


我不知道你是怎么在51、x86、arm7编译通过的,从原则上讲,你原来即使编译通过也是有隐患的,呵呵,类型不匹配,应该强制转换一下再使用,另外这个数组大小不知道能不能在你的哪个型号上得到支持,建议你在把数组该小点看看编译结果。

使用特权

评论回复
7
machunshui| | 2008-8-25 16:21 | 只看该作者

楼主说话最好给出证据

楼主说话最好给出证据.

即使是pic的内存分页机制导致,

也是应该能够通过汇编以及map文件找到证据的,

没有证据,

可以视为瞎说.

使用特权

评论回复
8
machunshui| | 2008-8-25 16:48 | 只看该作者

实际上楼主在5楼给出的代码,我验证没有问题

实际上楼主在5楼给出的代码,我验证没有问题

是可以进入if (cp1 < cp2){...}执行体里面的.

楼主自己不搞清楚自己的问题,就瞎指责!

使用特权

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

本版积分规则

29

主题

176

帖子

0

粉丝