完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
很简单啊。。。所有的可见不可见符号,都可以由二进制编码唯一表述。而printf说是打印函数,但是本质上就是格式化符号函数,将给定的符号——或者说是二进制编码按照一定格式输出。当然,输出到哪里,就看重定向了。事实上,只要重定向部分做得好,可以输出到任何总线、任何设备。
|
|
|
|
这个函数就是打印的功能嘛..设计如此..
|
|
|
|
可以说的具体点吗?重定向又是什么用处啊?
|
|
|
|
你的宣传成功激起了我的好奇心
|
|
|
|
你可以尝试自己写一个,然后就知道为什么了。不知道的多百度
|
|
|
|
我宣传了什么??
|
|
|
|
这个事比较牛的函数 不定个数参数 平时建议用fprintf ,安全点
|
|
|
|
1111111111
|
|
|
|
[C] 纯文本查看 复制代码
//看到朋友问了一下这个打印调试信息的问题,我分享一下我现在用在freertos里面的打印输出调试信息的代码的实现吧//**************************************************************************************************//**************************************************************************************************//**************************************************************************************************//下面是debug.h文件的内容#ifndef _DEBUG_H#define _DEBUG_H//1、头文件/********************************************************************************************************************************************************************/#include "stm32f1xx_hal.h"#include "usart.h"//2、宏定义/********************************************************************************************************************************************************************/#define DEBUG_ON 1 //DEBUG_SWITCH为ON的时候,表示开启仿真#define DEBUG_OFF 0 //如果DEBUG_SWITCH为OFF的时候,表示关闭仿真#define DEBUG_PIN_TOGGLE HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_11)#define DEBUG_SWITCH DEBUG_ON #if DEBUG_SWITCH==DEBUG_ON #define TRACE(x...) PRINTF(x)#else #define TRACE(x...) #endif//3、类型定义/********************************************************************************************************************************************************************///4、变量声明/********************************************************************************************************************************************************************///5、函数声明/********************************************************************************************************************************************************************/void PRINTF(char *format, ...);#endif//**************************************************************************************************//**************************************************************************************************//**************************************************************************************************//下面是debug.c文件的内容#include "debug.h"#include "cmsis_os.h"#include "string.h"#include "stdarg.h"//获取当前中断情况--返回0表示不在中断中,//非0表示cpu被中断占用,且返回数字为中断向量编号static int inHandlerMode (void){ return __get_IPSR() != 0;}#define PRINTF_BUFFER_LENGTH 200char printf_buff[PRINTF_BUFFER_LENGTH];/************************************************************************ 函数名称 RINTF** 创建人 :liupcngcheng** 创建日期 :2017 2017/11/07 18:51** 最新修改人 :liupcngcheng** 最近修改日期 :2017 2017/11/07 18:51** 功能描述 :通过串口1打印调试信息** 入口参数 :** 返回参数 :** 备注/注意 :** QQ : 1240612852***********************************************************************/void PRINTF(char *format, ...){ if(inHandlerMode() != 0) //如果在中断中 { taskDISABLE_INTERRUPTS(); //关闭中断 } else //如果不在中断中在任务中 { while(HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX) //如果发现调试串口被其他任务占用,则当前任务切出 { osThreadYield(); } } va_list ap; //定义一个指针 va_start(ap, format); //将第一个变参的地址赋值给ap指针 memset(printf_buff,0x00,strlen(printf_buff)); if(vsprintf(printf_buff, format, ap) > 0) { //串口调用 HAL_UART_Transmit(&huart1,(uint8_t*)printf_buff ,strlen(printf_buff),0x05); } va_end(ap); //if(inHandlerMode() != 0) //打印完调试信息之后还在中断中,则开启中断触发 //{ taskENABLE_INTERRUPTS(); //}} |
|
|
|
只有小组成员才能发言,加入小组>>
800 浏览 0 评论
1156 浏览 1 评论
2531 浏览 5 评论
2863 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2714 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1093浏览 3评论
197浏览 2评论
463浏览 2评论
376浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
458浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 13:14 , Processed in 1.266294 second(s), Total 94, Slave 75 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号