RT_Thread学习笔记__应用函数

一、线程

—>定义线程控制块指针:static rt_thread_t xxx_thread = RT_NULL;(xxx自定义)
—>线程函数声明:static void xxx_thread_entry(void* parameter);(xxx自定义)
—>创建线程:rt_thread_create();

//创建线程
	key_thread =                          /* 线程控制块指针 */
	rt_thread_create("receive",               /* 线程名字 */
				     key_thread_entry,   /* 线程入口函数 */ 
				     RT_NULL,             /* 线程入口函数参数 */
				     512,                 /* 线程栈大小 */
				     3,                   /* 线程的优先级 */
				     20);                 /* 线程时间片 */
	if(key_thread != RT_NULL)
		rt_thread_startup(key_thread); //启动线程,开启调度
	else
		return -1;

—>重映射串口到 rt_kprintf 函数,在board.c文件下添加如下代码(注意串口初始化)

void rt_hw_console_output(const char *str)
{
	/* 进入临界段 */
  rt_enter_critical();

	/* 直到字符串结束 */
  while (*str!='\0')
	{
		/* 换行 */
    if (*str=='\n')
		{
			USART_SendData(CUSTOM_USARTx, '\r'); 
			while (USART_GetFlagStatus(CUSTOM_USARTx, USART_FLAG_TXE) == RESET);
		}

		USART_SendData(CUSTOM_USARTx, *str++); 				
		while (USART_GetFlagStatus(CUSTOM_USARTx, USART_FLAG_TXE) == RESET);	
	}	

	/* 退出临界段 */
  rt_exit_critical();
}

—>延时函数:rt_thread_delay(xx);(xx自定义)

二、信号量

—>定义信号量控制块指针:rt_sem_t xxx_sem = NULL;
—>创建信号量线程:rt_sem_create();

xxx_sem = rt_sem_create("xxx_sem", 0, RT_IPC_FLAG_FIFO);
	if(xxx_sem != RT_NULL)
		rt_kprintf("信号量创建成功!\r\n");

—>释放信号量:rt_sem_release(xxx_sem);
—>获取信号量:rt_sem_take();

rt_sem_take(test_sem,	/* 获取信号量 */
                RT_WAITING_FOREVER); 	/* 等待时间:一直等 */

三、邮箱

—>定义邮箱控制块指针:rt_mailbox_t xxx_mail = NULL;
—>创建信号量线程:rt_mb_create();

xxx_mail = rt_mb_create("xxx_mail", /* 邮箱名字 */
                            10,         /* 邮箱大小 */
                            RT_IPC_FLAG_FIFO);/* 信号量模式 FIFO(0x00)*/
  if (xxx_mail != RT_NULL)
    rt_kprintf("邮箱创建成功!\n\n");

—>邮件发送:rt_mb_send();

rt_err_t uwRet = RT_EOK;

uwRet = rt_mb_send(xxx_mail, (rt_uint32_t)&USART_RX_Cmd);  //USART_RX_Cmd为数组名
    if(RT_EOK == uwRet)
      rt_kprintf ( "邮箱消息发送成功\n" );
    else
      rt_kprintf ( "邮箱消息发送失败\n" );

—>邮件接收:rt_mb_recv();

rt_err_t uwRet = RT_EOK;
char *r_str;

uwRet = rt_mb_recv(test_mail, /* 邮箱对象句柄 */
                      (rt_uint32_t*)&r_str, /* 接收邮箱消息 */
                      RT_WAITING_FOREVER);/* 指定超时事件,一直等 */
    
      if(RT_EOK == uwRet) /* 如果接收完成并且正确 */
      {
        rt_kprintf ( "邮箱的内容是:%s\n\n",r_str);		
        LED1_TOGGLE;       //LED1	反转
      }
      else
        rt_kprintf ( "邮箱接收错误!错误码是0x%x\n",uwRet);	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值