lgnq 发表于 2008-10-18 13:16:39

有人熟悉瑞萨吗,我使用HEW的stdio库是,printf出现了异常【恢复】

#define READ_REG(a)     (*(volatile unsigned short far*)(a))



 printf("HCONFIG = %#x\r\n", READ_REG(HCONFIG));

 printf("PCONFIG = %#x\r\n", READ_REG(PCONFIG));

 printf("SCLOCK = %#x\r\n", READ_REG(SCLOCK));

 printf("VER = %#x\r\n", READ_REG(VER));



得到的结果是

HCONFIG = 0x101

PCONFIG = 0x671

SCLOCK = 0x671

VER = 0x671



但正确的应该是这样的:

HCONFIG = 0x101

PCONFIG = 0x671

SCLOCK = 0x3

VER = 0x44



如果我只printf一个寄存器的内容,结果是OK的,如:

printf("SCLOCK = %#x\r\n", READ_REG(SCLOCK));

结果是:

SCLOCK = 0x3



但是同时连续printf时却出现问题了。为什么呢?

xiaohai8272 发表于 2008-11-28 14:57:15

为什么我下载的High-performance Embedded Workshop 4(HEW4) 用不了啊,感谢你们的支持啊,能加我吗353970907

lgnq 发表于 2008-10-23 22:56:29

这个没问题,强制类型转换a为存储unsigned short的far类型的地址,前面加个*,就是取地址的内容

#define READ_REG(a)     (*(volatile unsigned short far*)(a))



我发现printf异常的原因是,renesas的MCU通过CS2访问的是外部的deveice,且外部的deveice速度比较慢

应该要设置CSE2W0=1,CSE2W1=0,至少有2个等待



起初我用的是默认设置CSE2W0=0,CSE2W1=0,没有等待。所以造成了printf异常

ldqmoon 发表于 2008-10-23 13:58:56

#define READ_REG(a)     (*(volatile unsigned short far*)(a)) 

感觉像是这里的问题,并不是printf的问题.



你在每个printf之间加个延时试试看
页: [1]
查看完整版本: 有人熟悉瑞萨吗,我使用HEW的stdio库是,printf出现了异常【恢复】