4.启用CAN组件,并在示例/rt-thread设备驱动示例中打开can device。 5.在drivers目录下添加drv_can.c 和drv_can.h文件 这两个文件在下面这个目录中: X:\RT-ThreadStudio\repo\Extract\RT-Thread_Source_Code\RT-Thread\4.0.3\bsp\stm32\libraries\HAL_Drivers 6.添加官方示例 /* * 程序清单:这是一个 CAN...
tid = rt_thread_create("main", main_thread_entry, RT_NULL, RT_MAIN_THREAD_STACK_SIZE, RT_MAIN_THREAD_PRIORITY, 20); RT_ASSERT(tid != RT_NULL); #else rt_err_t result; tid = &main_thread; result = rt_thread_init(tid, "main", main_thread_entry, RT_NULL, main_stack, sizeof(...
tid = rt_thread_create("main", main_thread_entry, RT_NULL, RT_MAIN_THREAD_STACK_SIZE, RT_THREAD_PRIORITY_MAX /3,20); RT_ASSERT(tid != RT_NULL); #else rt_err_tresult; tid = &main_thread; result = rt_thread_init(tid,"main", main_thread_entry, RT_NULL, main_stack,sizeof(ma...
以串口设备为例,不管下层是 STM32、GD32 还是别的平台的,只要都是串口设备,都对接到 RT-Thread 的串口设备类——如图所绘,多个硬件对象对接同一个父类对象接口。同理,从设备驱动框架层到IO设备管理接口层,又是多对一,又是再一次的屏蔽差异,再一次的抽象。——面向对象的思想贯穿其中。 RT-Thread 文档中心...
RTM_EXPORT(rt_assert_handler);#endif /* RT_DEBUG */ 问题解决 .config - RT-Thread Configuration...
RT_ASSERT(thread!=RT_NULL);/*disable interrupt*/temp=rt_hw_interrupt_disable();/*it's current thread, it should be RUNNING thread*/if(thread ==rt_current_thread) { thread->stat = RT_THREAD_RUNNING | (thread->stat & ~RT_THREAD_STAT_MASK);goto__exit; ...
rt-thread 驱动篇(一) serialX 框架理论 前言 苦串口驱动久矣! 现状 串口驱动三种工作模式:轮询、中断、DMA。 轮询模式占用CPU最高,但是实现也是最简单的;DMA 占用 CPU 最少,实现也是最麻烦的;中断模式居中。 原串口驱动有以下几个问题: 1. 中断模式,接收有缓存,发送没缓存...
然后接下来检查init_tick参数的合法性RT_ASSERT(timer->init_tick<RT_TICK_MAX/2);这里利用了init_tick是一个无符号32bit变量的溢出回归的特性(无符号32位整数的表示范围:0到0xffffffff)设计的一个技巧。其中定时器最大的定时值必须小于RT_TICK_MAX /2,另外RT_TICK_MAX是与init_tick类型想同的一个32bit的...
上文说到 RT-Thread 对临界区的处理方式有多种,其中已经分析了关闭调度器和屏蔽中断的方式,本文就来学学另外的线程同步方式。
1staticvoidwakeup_init(void)2{3 wakeup_event = rt_event_create("wakup", RT_IPC_FLAG_FIFO);4 RT_ASSERT(wakeup_event != RT_NULL);56 bsp_register_wakeup(wakeup_callback);7}PM_SLEEP_MODE_TIMER对应的是 STM32L475 的 STOP2 模式,并在进入之前打开了 LPTIM1。我们希望停留在PM_SLEEP_MODE_TI...