|
在玩AT91SAM9260的开发板,从ATMEL官方网站上下载了《AT91SAM9260-EK Software Package for IAR 5.2, Keil and GNU》软件包1.5版,准备跑跑例程,从第一个“getting-started-project-at91sam9260-ek”例子就遇到了离奇的问题。这是个使用DBGU串口输出printf的例子
在编译的时候遇到问题“Error: L6915E: Library reports error: __use_no_semihosting_swi was requested, but _sys_open was referenced”
不过在编译选项中勾上“USE MICRO LIB”选项后即可编译通过,从超级终端上看输出数据都正常;不过我不想使用微库,毕竟这个库性能太低,试着在重定向文件retarget.c中加入“FILE __stdout; FILE __stderr;”这2句话,这样不勾选“USE MICRO LIB”也可以正常输出了。
不过我又把主程序修改了下,想测试下printf输出变量是否正常,结果就超级郁闷了,程序如下:
#include <board.h>
#include <utility/trace.h>
#include <stdio.h>
int main(void){
unsigned int a=0x905BAA55;
// DBGU configuration
TRACE_CONFIGURE(DBGU_STANDARD, 115200, BOARD_MCK);
printf("0x%8X", a);
}
就是这个几句语句,再简单不过了,正常应该在超级终端上显示“0x905BAA55”的字样,是否勾选微库都可以正常编译链接,不过输出的结果居然会不同!
选择“USE MICRO LIB”:显示 ”0x905BAA55“
不选择 :显示 ”0x9059AA5A“
竟然printf输出结果也会出错,确认硬件肯定是没有问题,之前显示字符串都是无误的,并且实验了无数次,不选微库始终是显示0x9059AA5A,并且输出字符串等等都能正确显示,折腾了好久实在搞不懂是怎么回事,想来想去应该还是跟 KEIL的C语言库有关系,一下子又找不出原因。
我的环境是WINDOWS7 DELL OEM版, KEIL MDK 4.03 (换了台XP的电脑,装了MDK3.8也试过了,问题依然) |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|