在设计之初我们希望通过调试程序完成我们需要的代码设计,这些都需要我们进行调试,进入degug模式,往往系统运行起来我们无法判断程序运行哪一步因此需要通过打印功能显示关键步骤的程序运行节点,同样在rt-thread操作系统中依然可以进行此过程 的代码实现。下面就此进行讨论。
作为打印函数它提供了我们对应的函数接口,我们调用时其实与printf是相同的用法,但是看底层的函数描述我们就知道其实还是存在差异的。
首先粘贴出函数的实际项目中的用法:
rt_kprintf(the producer generates a number: %d\n, array[set%maxsem]); 运行起来我们看到相应的打印结果
相比于之前我们接触到的重定义函数,rt_kprintf定义为:void rt_kprintf(const char *fmt, ...)
下面我们看一下具体函数的描述(看注释):
void rt_kprintf(const char *fmt, ...){ va_list args; rt_size_t length; static char rt_log_buf[rt_consolebuf_size]; va_start(args, fmt); /* the return value of vsnprintf is the number of bytes that would be * written to buffer had if the size of the buffer been sufficiently * large excluding the terminating null byte. if the output string * would be larger than the rt_log_buf, we have to adjust the output * length. */ length = rt_vsnprintf(rt_log_buf, sizeof(rt_log_buf) - 1, fmt, args); //计算长度 if (length > rt_consolebuf_size - 1) length = rt_consolebuf_size - 1;#ifdef rt_using_device if (_console_device == rt_null) //判断控制台设备是否为空 { rt_hw_console_output(rt_log_buf); } else { rt_uint16_t old_flag = _console_device->open_flag; _console_device->open_flag |= rt_device_flag_stream; rt_device_write(_console_device, 0, rt_log_buf, length); //设备写线程 _console_device->open_flag = old_flag; //控制台设备状态 }#else rt_hw_console_output(rt_log_buf); 0 //控制台输出buf#endif va_end(args);}rtm_export(rt_kprintf); 其中包含的几个线程大家可以自行观看官方文件库。
光纤通信设备有哪些?光纤从设备什么意思?
浅析基于微流控技术的外泌体分离方法
徕卡发布M卡口人像定焦镜头,由8片6组镜片构成拥有f/1.5大光圈
AI先生李彦宏不断推动教育公平 帮助大山孩子近距离感受科技的魅力
激光焊锡设备的意义和应用前景
RT-Thread操作系统打印函数概述
基于CD4011的简易AM收音机制作电路原理图
vivo Y52s 5G新机曝光:搭载天玑720
M12连接器3芯使用寿命决定因素是什么
2017年LTE网络十亿设备将面BYOD安全威胁
电源变压器简易设计
一江春水向东流
三维数据的问题何时才能解决呢?
iPhone8什么时候上市?iPhone8最新消息:iPhone8即将上市,iPhone8摄像头升级,或搭载杀手级AR技术
如何成为LabVIEW漏洞修复高手?掌握这些调试技巧就行!
2020年我国工业互联网将会呈现出怎样的发展趋势
基板的测试及评估
Real World CTF技术论坛将启 极客嘉年华重磅来袭
颜值与音质兼得,南卡N2S真无线蓝牙耳机体验报告测评
印度市场份额上升 OPPO和vivo强势复苏