OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4715|回复: 7

串口使用 printf 不懂

[复制链接]

6

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2013-7-25
在线时间
0 小时
发表于 2013-9-9 23:42:23 | 显示全部楼层 |阅读模式

#if 1
#pragma import(__use_no_semihosting)            
//标准库需要的支持函数                
struct __FILE
{
 int handle;

};

FILE __stdout;      
//定义_sys_exit()以避免使用半主机模式   
_sys_exit(int x)
{
 x = x;
}
//重定义fputc函数
int fputc(int ch, FILE *f)
{     
 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
    USART_SendData(USART1,(uint8_t)ch);  
 return ch;
}
#endif

就是这一整段程序,这一段程序为什么这样写呢?我还以为printf在这段程序里面是一个调用函数呢   那个#pragma import(__use_no_semihosting) 和#if 1   是什么意思啊  

总觉得这段层序怪怪的    这里面都没有printf啊   怎么会用这段代码实现printf的功能呢?   红色地方不懂 ,谁能帮忙解决下,谢谢了

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

42

主题

173

帖子

0

精华

高级会员

Rank: 4

积分
549
金钱
549
注册时间
2013-6-18
在线时间
59 小时
发表于 2013-9-10 09:30:04 | 显示全部楼层
这个地方没地方没必要弄懂,只需要知道怎么用就可以了
只为摆正你的倒影,我倾倒了整个世界。
回复 支持 反对

使用道具 举报

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2013-5-11
在线时间
3 小时
发表于 2013-9-10 09:36:18 | 显示全部楼层
这个是个 宏定义的选择语段吧,里面的fputc(int ch, FILE *f) 是吧文件分解成字符char吧。
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); 
    USART_SendData(USART1,(uint8_t)ch);    才是串口输出的语句。不要认为只有printf就是发送语句

 这个函数是重点 ->USART_SendData
回复 支持 反对

使用道具 举报

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2013-5-11
在线时间
3 小时
发表于 2013-9-10 09:36:41 | 显示全部楼层
新手 猜测而已
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2013-9-10 09:42:17 | 显示全部楼层
回复【4楼】wch2449:
---------------------------------
printf()定义在stdio.h中。是格式化输出。这里为了单片机使用重定向发送数据到USART1. 红色句子是编译控制语句,写给编译器看的,设置一些编译条件。具体是什么含义我也不是很明白。
回复 支持 反对

使用道具 举报

6

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2013-7-25
在线时间
0 小时
 楼主| 发表于 2013-9-10 15:12:01 | 显示全部楼层
回复【2楼】菜鸟鸡哥:
---------------------------------
你说没有必要弄懂,例如说现在如果没有这个支持printf函数,要你自己写,你会写么?   再说,如果说你现在要用到支持scanf函数,你又会写么?  我想知道的是这段代码的原理,它究竟是怎么来的?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-10 22:36:46 | 显示全部楼层
这里是什么半主机模式,我也不是很懂,代码抄自别人的,后续一直沿用了下来。
楼主有兴趣研究,可以百度下这方面知识。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2013-7-25
在线时间
0 小时
 楼主| 发表于 2013-9-10 22:45:48 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
呵呵  百度过之后才来论坛提问的,百度上找的也基本是和这段一样的代码,可就是没有说怎么来的
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-13 07:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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