硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5149|回复: 7
收起左侧

[客户分享] 在MDK上调用printf等C Library函数时,记得选上MicroLib选项

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107898
QQ
发表于 2015-6-23 08:57:08 | 显示全部楼层 |阅读模式
如果不选上,printf函数是无法调用的,会造成死机。
1.png
回复

使用道具 举报

6

主题

390

回帖

408

积分

高级会员

积分
408
发表于 2015-6-23 12:37:19 | 显示全部楼层
[s:142] [s:142] [s:142] [s:142] [s:142]
回复

使用道具 举报

0

主题

1

回帖

6

积分

新手上路

积分
6
发表于 2018-2-8 14:06:50 | 显示全部楼层
请问,勾选这个是不用配置自己手动配置串口1,直接就可以从串口1打印信息么
回复

使用道具 举报

2

主题

134

回帖

140

积分

初级会员

积分
140
发表于 2018-2-8 19:04:37 | 显示全部楼层
硬汉大哥  使用微库好还是不使用微库好   
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107898
QQ
 楼主| 发表于 2018-2-9 09:52:46 | 显示全部楼层
donkey.shui 发表于 2018-2-8 14:06
请问,勾选这个是不用配置自己手动配置串口1,直接就可以从串口1打印信息么

这种方式的话,需要用户自己写个fpuc和fgetc,以我们的板子为例

  1. /*
  2. *********************************************************************************************************
  3. *        函 数 名: fputc
  4. *        功能说明: 重定义putc函数,这样可以使用printf函数从串口1打印输出
  5. *        形    参: 无
  6. *        返 回 值: 无
  7. *********************************************************************************************************
  8. */
  9. int fputc(int ch, FILE *f)
  10. {
  11. #if 0        /* 将需要printf的字符通过串口中断FIFO发送出去,printf函数会立即返回 */
  12.         comSendChar(COM1, ch);

  13.         return ch;
  14. #else        /* 采用阻塞方式发送每个字符,等待数据发送完毕 */
  15.         /* 写一个字节到USART1 */
  16.         USART_SendData(USART1, (uint8_t) ch);

  17.         /* 等待发送结束 */
  18.         while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
  19.         {}

  20.         return ch;
  21. #endif
  22. }

  23. /*
  24. *********************************************************************************************************
  25. *        函 数 名: fgetc
  26. *        功能说明: 重定义getc函数,这样可以使用getchar函数从串口1输入数据
  27. *        形    参: 无
  28. *        返 回 值: 无
  29. *********************************************************************************************************
  30. */
  31. int fgetc(FILE *f)
  32. {

  33. #if 1        /* 从串口接收FIFO中取1个数据, 只有取到数据才返回 */
  34.         uint8_t ucData;

  35.         while(comGetChar(COM1, &ucData) == 0);

  36.         return ucData;
  37. #else
  38.         /* 等待串口1输入数据 */
  39.         while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);

  40.         return (int)USART_ReceiveData(USART1);
  41. #endif
  42. }
复制代码


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107898
QQ
 楼主| 发表于 2018-2-9 09:57:03 | 显示全部楼层
hanzixiangel 发表于 2018-2-8 19:04
硬汉大哥  使用微库好还是不使用微库好

微库相对于C标准库的对比:
http://www.keil.com/arm/microlib.asp

microlib_chart.png
回复

使用道具 举报

27

主题

91

回帖

172

积分

初级会员

积分
172
发表于 2018-2-9 16:31:25 | 显示全部楼层
....这个只能重定向UART1么?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107898
QQ
 楼主| 发表于 2018-2-9 16:36:04 | 显示全部楼层
borrow1988 发表于 2018-2-9 16:31
....这个只能重定向UART1么?

不限制,其它串口均可。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-17 19:55 , Processed in 0.279278 second(s), 35 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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