今天写了个类,调试的时候可以将调试语句输出,同时记录到文件中。可以用来记Log,也可以防止终端输出太快来不及看。其中有一个多参数函数(printf和fprintf)的封装问题的例子。记录在此:
#ifndef __IEC_LOG__
#define __IEC_LOG__
#include "string.h"
#define LOG_PATH ".\\log\\iec104.log"
class IecLog
{
private:
FILE *fp;
public:
void WOpen()
{
fp = fopen(LOG_PATH, "w");
}
void PrintLog(const char *format, ...)
{
va_list ap;
va_start(ap, format);
vprintf(format,ap);//输出到终端
if(fp) vfprintf(fp,format,ap);//输出到文件
va_end(ap);
fflush(fp);
}
};
#endif
用起来也很方便:
1.声明IecLog iecLog;
2.在程序开头iecLog.WOpen();//路径在宏中指定
3.在需要输出的地方iecLog.PrintLog("the output is %d, another output is %d", int1, int2);
分享到:
相关推荐
用户可以登录到不同的虚拟终端上,使得系统能够同时支持多个会话。 #### 三、Linux终端设备驱动框架 Linux终端设备驱动的框架结构主要围绕`tty_driver`结构体展开,该结构体包含了与终端设备相关的各种操作函数。...
10. **调试与测试**: 为了确保串口通信的正确性,可以通过串口终端软件(如RealTerm)进行实时查看和验证数据收发情况。 压缩包中的“www.pudn.com.txt”可能是文档或链接,可能提供了更多关于这个子模块的背景信息...
通过宏定义,我们可以将标准的printf函数扩展,使其能够输出带有颜色的文本,这样在终端或者控制台上显示的信息就会更加醒目,帮助我们快速定位问题。 首先,我们需要理解什么是宏。宏是C/C++预处理器提供的一种...
1. **文件操作**:在学生信息管理系统中,我们需要将学生数据存储到文件中,以便持久化保存。C语言提供了一系列的文件操作函数,如`fopen()`用于打开文件,`fprintf()`和`fscanf()`用于文件读写,`fclose()`用于关闭...
- **关联文件流到文件描述符**:在某些情况下,需要将文件流与文件描述符关联起来。 - **创建临时文件**:使用`tmpfile`或`tmpnam`函数创建临时文件。 #### 第六章 系统数据文件和信息 - **主要的系统数据**:包括...
同时,为了提高程序的可读性和可维护性,可以将串口配置、数据接收和发送等功能封装成独立的函数。 在调试过程中,我们可以通过串口终端软件(如RealTerm、Putty等)连接到STM32的串口1,观察打印出的GPS信息是否...
例如,`fseek` 用于设置文件位置指示器,`ftell` 返回当前文件位置指示器的位置,`rewind` 用于将文件位置指示器重置到文件开头,`fflush` 则用于刷新输出缓冲区。 - **getline/mygetline**: `getline` 用于读取一...
这个库的主要功能是为打印输出提供彩色支持,使得终端的输出信息更具有可读性和视觉吸引力。 在Python中,使用第三方库通常需要通过pip(Python的包管理器)进行安装。而".whl"文件是一种预先编译好的Python二进制...
FFmpeg.sdf和FFmpeg.sln是Visual Studio项目文件,用于管理和编译项目,而"FFmpeg"目录可能包含源代码,"ipch"存储预编译头信息,"Debug"目录则包含了编译后的调试版本二进制文件。 在FFmpeg中进行mp4到ts的转换,...
STM32F10系列通常包含多个USART接口,如USART1、USART2等,每个USART都支持全双工通信,即同时进行发送和接收。它们具有可配置的波特率、数据位、停止位和奇偶校验,能适应多种通信协议。USART还支持中断和DMA传输...
完成配置后,使用`make`进行编译,然后使用`make install`将编译好的库文件、头文件和可执行文件安装到指定目录。 8. **开发注意事项** 开发过程中,需要注意FFmpeg的版本兼容性,因为不同的FFmpeg版本可能有API...
在提供的文件列表中,`所有命令代码[可复制].txt`很可能是一个包含所有可执行命令的文本文件,用户可以直接复制粘贴这些命令到终端来执行,这对于学习和调试脚本非常有用。而`ninja.zip`可能是一个额外的压缩包,...
5. **实用函数**: 除了类,还可能提供一些辅助函数,如`print_colored`,接受文本和颜色/样式参数,然后输出相应的彩色文本。 在mypycolor.py中,我们可以期待看到如下内容: - 类的定义,每个类可能有一个`__init...
2. **K60的UART硬件特性**:K60微控制器内部集成了多个UART接口,每个接口通常有独立的发送和接收FIFO(先进先出队列),可以设置波特率、数据位数、停止位数和奇偶校验等参数。了解这些硬件特性对优化通信性能至关...
API文档通常在`README`文件中,或者单独的`docs`目录下,描述了如何导入库、调用函数以及参数的含义和使用方法。如果没有文档,可以通过阅读源代码来理解库的工作原理。 Python库的开发和使用遵循一定的最佳实践,...
STM32_W5500_HTTP例程是一个基于STM32F103微控制...此外,调试工具如STM32CubeIDE、串口终端等也是必不可少的。通过这个例程,开发者可以掌握如何在嵌入式系统中实现基本的网络通信功能,为后续的物联网项目打下基础。
17. Syslog:提供了系统日志功能,使程序能够记录日志信息到系统日志文件或远程日志服务器。 18. 数学函数:提供了标准数学库接口,例如三角函数、指数和对数运算等。 19. 算术函数:提供了大数运算、复数运算等...
- **帧处理**:GDB能够追踪程序调用栈中的每个函数调用,并且可以获取当前执行上下文的信息,如局部变量、参数等。 - **断点处理**:GDB支持在程序的任意位置设置断点,当程序执行到这些断点时会自动暂停,以便进行...
源码中的关键部分可能包括初始化函数,用于设置系统时钟、初始化GPIO和外设,以及显示更新函数,负责将计算得到的日期和时间数据显示在屏幕上。此外,还可能包含中断服务程序,当接收到外部信号时,如按键按下,进行...
常用函数有`tcgetattr()`获取当前设置,`cfmakeraw()`进行原始模式配置,`cfsetispeed()`和`cfsetospeed()`设置输入和输出波特率,以及`tcsetattr()`应用设置。 3. **读写操作**:利用`read()`和`write()`函数进行...