搜索
bottom↓
回复: 4

离奇,用printf串口输出一个16进制变量值比如0x905BAA55,选择微库的时候超级终端显示正

[复制链接]

出0入0汤圆

发表于 2010-2-4 15:28:31 | 显示全部楼层 |阅读模式
在玩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, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2010-2-4 15:31:34 | 显示全部楼层
再附上重定向文件
#include <dbgu/dbgu.h>
#include <stdio.h>

// Disable semihosting
#pragma import(__use_no_semihosting_swi)

struct __FILE { int handle;} ;
//FILE __stdout;
//FILE __stderr;

//------------------------------------------------------------------------------
///  Outputs a character to a file.
//------------------------------------------------------------------------------
int fputc(int ch, FILE *f) {
    if ((f == stdout) || (f == stderr)) {
        DBGU_PutChar(ch);
        return ch;
    }
    else {
        return EOF;
    }
}

//------------------------------------------------------------------------------
///  Returns the error status accumulated during file I/O.
//------------------------------------------------------------------------------
int ferror(FILE *f) {
    return EOF;
}


void _ttywrch(int ch) {
    DBGU_PutChar((unsigned char)ch);
}


void _sys_exit(int return_code) {
    label:  goto label;  /* endless loop */
}
这个是ATMEL官方例程里的,

出0入0汤圆

 楼主| 发表于 2010-2-4 15:33:23 | 显示全部楼层
整个工程文件ourdev_532405.rar(文件大小:815K) (原文件名:getting-started-project-at91sam9260-ek.rar)
头像被屏蔽

出0入0汤圆

发表于 2010-2-9 16:47:22 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2011-2-13 11:39:08 | 显示全部楼层
回复【楼主位】socrates
-----------------------------------------------------------------------

我刚刚试过了,两种方式都输出0x905BAA55,我这边没有问题
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 01:33

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表