首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

还是关于CW访问外设的问题

还是关于CW访问外设的问题

根据版主的建议修改定义如下:


#pragma DATA_SEG EXT_SEGMENT


UINT8 EXT_SEG00;


UINT8 EXT_SEG01;


#pragma DATA_SEG DEFAULT


引用时定义指针和临时变量如下:


UINT8 temp;


UNIT8 *pt1;


pt1=&EXT_SEG00;


temp=*pt1;


编译后果然没有错了,可是执行时,并没有自动把PAGE(应该是0x0F)置上,以访问0X0F8000地址的外设,而是直接访问了0x8000,所有没有正确地返回。


请问这个问题应该怎么解决?应该如何访问扩展地址的外设?


谢谢!

前面已经说过,执行pt1=&EXT_SEG00指令时,pt1已经变成了一个16位的数据,而高位地址的信息就丢失了。
可以这样修改,将数据申明改为:
#pragma DATA_SEG __PPAGE_SEG EXT_SEGMENT
char EXT_SEG00;
char EXT_SEG01;

对数据的操作:
int temp;
temp = EXT_SEG00;

另外,可以在Target Settings Panels,选Compiler for HC12的Options,在Code Generation里勾上PPAGE Regiseter is used for paging,然后在下面的参数栏里填上RUNTIME。这个不做也可以。
海纳百川  有容乃大
返回列表