RT-thread中实现rt_kprintf

rt_kprintf的作用

可以在代码中使用 RT-Thread 提供的打印函数 rt_kprintf() 进行信息打印,从而获取自定义的打印信息,方便定位代码 bug 或者获取系统当前运行状态等。

比如在初始化的时候系统会通过rt_kprintf打印当前操作系统的版本信息

void rt_show_version(void)
{
    rt_kprintf("\n \\ | /\n");
    rt_kprintf("- RT -     Thread Operating System\n");
    rt_kprintf(" / | \\     %d.%d.%d build %s\n",
               RT_VERSION, RT_SUBVERSION, RT_REVISION, __DATE__);
    rt_kprintf(" 2006 - 2019 Copyright by rt-thread team\n");
}

实现rt_kprintf需要哪几步

需要实现一个发送字符串的函数,函数名必须是rt_hw_console_output,不能是其他的。rt_hw_console_output可以写在任意一个.c文件中。比如usart.c 或者 main.c

开始需要进入临界段,因为打印的时候希望一次性打完,而不是分批打印。进入临界段CPU的控制权就不会被剥夺。

在\n之前需要加上\r,这是官方网站中有所提示注意的。

image-20201021200308996

void rt_hw_console_output(const char *str)
{
  rt_enter_critical(); //进入零阶段
	while(*str != 0)
	{
		if(*str == '\n')
		{
			USART1_PutChar('\r');	
		}
		USART1_PutChar(*str++);
	}
	rt_exit_critical();
}

为什么这个函数写在哪个.c文件都能被找到

实际中发现无论这个函数放在哪个.c文件中,最后都能被发现且成功执行。有大佬回答了这个问题,可以移步这儿查看

在linux的驱动代码中经常可以看到__weak去修饰一个函数或者变量,大多是用来修饰函数。

它的作用有两个:

1.weak 顾名思义是“弱”的意思,所以如果函数名称前面加上__weak 修饰符,我们一般称这个函数为“弱函数”。加上了__weak 修饰符的函数,用户可以在用户文件中重新定义一个同名函数,最终编译器编译的时候,会选择用户定义的函数,如果用户没有重新定义这个函数, 那么编译器就会执行__weak 声明的函数,并且编译器不会报错。

2.__weak 在回调函数的时候经常用到。这样的好处是,**系统默认定义了一个空的回调函数,保证编译器不会报错。同时,如果用户自己要定义用户回调函数,那么只需要重新定义即可,不需要考虑函数重复定义的问题,**使用非常方便

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RT-Thread是一个实时操作系统,可以在嵌入式系统上运行。要在RT-Thread使用多个串口,并使用rt_kprintf函数打印输出,您可以按照以下步骤进行操作: 1. 配置串口设备:在RT-Thread的配置文件(rtconfig.h),找到`RT_SERIAL_DEVICE`宏定义。如果需要使用多个串口,可以将该宏定义的值设置为串口设备的数量,例如`#define RT_SERIAL_DEVICE 2`表示有两个串口设备。 2. 初始化串口设备:在应用程序初始化的地方,通过调用`rt_device_init`函数初始化每个串口设备。例如,如果有两个串口设备,可以使用以下代码初始化它们: ```c rt_device_t serial1, serial2; serial1 = rt_device_find("uart1"); serial2 = rt_device_find("uart2"); rt_device_init(serial1); rt_device_init(serial2); ``` 3. 打开串口设备:在需要使用串口的地方,通过调用`rt_device_open`函数打开相应的串口设备。例如,如果要使用第一个串口设备,可以使用以下代码打开它: ```c rt_device_open(serial1, RT_DEVICE_FLAG_RDWR); ``` 4. 使用rt_kprintf函数打印输出:在需要打印输出的地方,可以使用rt_kprintf函数来代替标准库的printf函数。例如,使用以下代码在第一个串口设备上打印输出: ```c rt_kprintf("Hello, RT-Thread!\n"); ``` 通过上述步骤,您可以在RT-Thread使用多个串口,并使用rt_kprintf函数进行打印输出。请确保配置文件和代码的串口设备名称与实际硬件一致,并根据需求进行相应的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值