查看: 6090|回复: 5

[其他] 每天解决一个问题1:串口使用Printf()函数问题

[复制链接]

该用户从未签到

61

主题

965

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2394
最后登录
1970-1-1
发表于 2015-9-2 10:28:54 | 显示全部楼层 |阅读模式
本帖最后由 anger0925 于 2015-9-16 17:05 编辑

1,要实现在串口或LCD输出,必须重定义标准库函数里调用的与输出标准库函数的默认输出设备是显示器,要实现在串口或LCD输出,必须重定义标准库函数里调用的与输出设备相关的函数.
例如:printf输出到串口,需要将fputc里面的输出指向串口(重定向),方法如下:

#ifdef __GNUC__

#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE
{


USART_SendData(USART1, (uint8_t) ch);

while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
return ch;
}

因printf()之类的函数,使用了半主机模式。使用标准库会导致程序无法运行,以下是解决方法:
方法1.使用微库,因为使用微库的话,不会使用半主机模式.
            如果使用的是MDK,请在工程属性的“Target“-》”Code Generation“中勾选”Use MicroLIB“这样以后就可以使用printf,sprintf函数了 .
方法2.仍然使用标准库,在主程序添加下面代码:
#pragma import(__use_no_semihosting) //确保没有从 C 库链接使用半主机的函数
_sys_exit(int x) //定义_sys_exit()以避免使用半主机模式
{
x = x;
}
struct __FILE  //标准库需要的支持函数
{
int handle;



};

FILE __stdout;
在独立应用程序中,您不太可能支持半主机操作。 因此,必须确保您的应用程序中没有链接 C 库半主机函数。为确保没有从 C 库链接使用半主机的函数,必须导入符号 __use_no_semihosting。可在您工程的任何 C 或汇编语言源文件中执行此操作,如下所示:
• 在 C 模块中,使用 #pragma 指令:
#pragma import(__use_no_semihosting)
• 在汇编语言模块中,使用 IMPORT 指令:
IMPORT __use_no_semihosting
如果仍然链接了使用半主机的函数,则链接器会报告错误。

我知道答案 目前已有5人回答

评分

参与人数 1NXP金币 +15 收起 理由
小七 + 15 打赏!表上数字,表示第几天就更好了.

查看全部评分

回复

使用道具 举报

该用户从未签到

61

主题

965

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2394
最后登录
1970-1-1
 楼主| 发表于 2015-9-2 17:40:55 | 显示全部楼层
明天开始标上数字,表明第几天,明天是第二天了
回复 支持 反对

使用道具 举报

该用户从未签到

61

主题

965

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2394
最后登录
1970-1-1
 楼主| 发表于 2015-9-2 17:42:30 | 显示全部楼层
主要目的是共同学习
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2017-2-9 14:16
  • 签到天数: 17 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    25

    主题

    1785

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2250
    最后登录
    2024-6-11
    发表于 2015-9-6 23:44:30 | 显示全部楼层
    谢谢分享
    freescaleic.org.png
    回复

    使用道具 举报

  • TA的每日心情

    2019-1-30 16:29
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    2

    主题

    8

    帖子

    0

    新手上路

    Rank: 1

    积分
    33
    最后登录
    2019-1-30
    发表于 2019-1-24 19:03:47 | 显示全部楼层
    这个配置是使用mdk的,如果使用S32 Develop Studio该怎么配置呢?
    我被uart害死了。。。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2023-10-12 08:58
  • 签到天数: 188 天

    连续签到: 1 天

    [LV.7]常住居民III

    1

    主题

    4032

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    18136
    最后登录
    2023-11-2
    发表于 2019-1-24 22:57:53 | 显示全部楼层
    支持一下
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 06:59 , Processed in 0.109920 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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