Board logo

标题: 关于CW中数据类型的问题,亟盼高手指点!! [打印本页]

作者: raina2006    时间: 2006-8-7 16:07     标题: 关于CW中数据类型的问题,亟盼高手指点!!

基于MC9S12NE64开发的系统,需要外扩设备,通过扩展总线的方式访问。


在project.prm中也处理了相应的segment,定义EXT_SEGMENT如下:


在SEGMENTS中包含以下语句:


    RAMPAGE_F = READ_WRITE  0x0F8000 TO 0x0FBFFF;     


在PLACEMENT中包含以下语句:


    EXT_SEGMENT INTO  RAMPAGE_F;


在程序头文件中定义了以下数据段:


#pragma _DATA_SEG EXT_SEGMENT


UNIT EXT_SEG00;


UNIT EXT_SEG01;


现在要定义一个指向该外设某地址的指针,由于地址为3字节,所以定义成far指针,具体定义为


UINT8 *__far pt1;


pt1 = (UINT8 *__far)&EXT_SEG00;


可是编译是总是提示链接错误,提示信息如下: “Link Error   : L1822: Symbol _LOAD_FAR_8 in file ..\Monitor\ObjectCode\Init.c.o is undefined”


试着调整了编译选项,结果错误更多了。


亟盼高手指点!


多谢!


作者: strongchen    时间: 2006-8-7 16:51

在S12中地址都是16位的,当对某个位于分页区的地址进行操作时,编译器会自动识别并加上PPAGE操作的命令。
在你的代码中,数据段的申明应该改为:#pragma DATA_SEG EXT_SEGMENT
如果再写代码如下:

int * pt1;
pt1 = &EXT_SEG00;

你可以看到,EXT_SEB00的地址为0xF8000,
但pt1只能是0x8000。
作者: raina2006    时间: 2006-8-7 20:50

首先感谢您的回复和帮助。但是我还是有些疑问,想麻烦您再帮忙解答一下:
那这样我通过pt1对改数据区地址进行读写的时候,系统会自动加上page地址吗?还是需要在作甚么设置?
我看到编译器的手册里说可以设置长指针,指向char的长指针的例子就是 char *__far p;
我需要指向位于EXT_SEGMENT区的字符型变量的指针,而你给的是指向整型的。
您能不能直接给出正确的方法?
期待您的答复!再次感谢!!
作者: raina2006    时间: 2006-8-8 21:06

谢谢!昨天担心在一个帖子里的问题会被忽略,所以就新起了一个贴子,早知道版主这么负责人,我也不必废此周折了,多谢!
不过问题还是没有被解决,编译时加上 -CpPPAGE=RUNTIME 选项(#pragma也根据版主的建议做了相应的调整)后,编译时仍然报错如下:
Link Error : L1822: Symbol _LOAD_FAR_8 in file ..\Connector_App_Data\Monitor\ObjectCode\Init.c.o is undefined

Link Error : L1822: Symbol _SET_PAGE in file ..\Connector_App_Data\Monitor\ObjectCode\Start12.c.o is undefined

Link Error : Link failed


start12.c中看到一些根page定义有关的代码,但是不太明白,是需要相应修改这个文件的内容吗?如果要改,怎么改?(目前的例子是从freescale的网站上下载的connector_app.zip文件,解开后是简单的网络应用的一个工程文件,该例子是用于NE64的DEMO板DEMO9S12NE64的,但是STARTUP12.C中有很多关于HC812A4的定义,与此有关系吗?)

作者: strongchen    时间: 2006-8-9 09:14

你的问题已经在另一个帖子里回答了(最好将同一个问题写在一个帖子里,不要分散到不同的帖子里-供各位网友参考)。

那样设置之后,你就可以设置一个指向扩展区的指针,如

char * __far pt1;

ptr = (char * __far) &EXT_SEG01;
tmp = *pt1;

这是你就可以看到编译器自动加上了PPAGE的操作指令。

[此贴子已经被strongchen于2006-8-8 10:47:56编辑过]

[此贴子已经被strongchen于2006-8-9 9:14:53编辑过]


作者: strongchen    时间: 2006-8-9 09:48

不会吧。我试过了,编译时只有警告,没有错误,可以编译通过。最好下载最新的CW4.5试试。解压后直接用CodeWarrior打开Connector_App.mcp,不需要任何修改。
作者: raina2006    时间: 2006-8-9 11:24

我看到NE64的资料上说,NE64需要使用CodeWarrior V3.1,花了好几天时间才载下来,300多兆呢。CW4.5也可以用吗?能够给出下载的地址?(最好不是freescale.com,因为不允许使用flashget等下载工具,不知道怎样才能在下那么大的软件)
谢谢!
作者: strongchen    时间: 2006-8-9 11:29

3.1应该也是可以的,都没有问题。
作者: raina2006    时间: 2006-8-9 15:06

3.1上为什么我一编译就报错?是不是跟LICENSE或者什么补丁有关系,我已经把网站上的握有PACK都下载了,但是有几个升级时题是有错误。
作者: strongchen    时间: 2006-8-9 17:23

那你最好还是下载CW4.5试试。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0