rtt|RT-thread笔记

动态创建在堆中分配空间,静态创建在栈中分配空间.
系统最小执行时间为一个节拍.
系统最小执行单位是线程.

1.修改系统时钟

//drivers/board.h中其中单位为MHz#define BSP_CLOCK_SOURCE("HSE")//HSI:内部时钟源 HSE:外部时钟源 #define BSP_CLOCK_SOURCE_FREQ_MHZ((int32_t)8)//外部时钟参数:默认0,根据晶振设置 #define BSP_CLOCK_SYSTEM_FREQ_MHZ((int32_t)100)//主频

2.内核启动 系统启动文件:
./libraries/CMSIS/Device/ST/STM32xxxx/Source/Templates/gcc/startup_stm32xxxx.S
启动流程:startup_xx.S --> entry() --> rtthread_startup() -->系统初始化 --> 创建线程 -->线程调度。
3.线程的五种状态 初始态(RT_THREAD_INIT)、就绪态(RT_THREAD_READY)、运行态(RT_THREAD_RUNNING)、挂起态(RT_THREAD_SUSPEND)、关闭态(RT_THREAD_CLOSE)。
4.线程状态间切换 rtt|RT-thread笔记
文章图片

5.线程常用函数(线程分配的空间 一定要大于线程函数所使用的内存)
rt_thread_create()//创建动态线程 rt_thread_init()//创建静态线程rt_thread_startup()//开启线程 rt_thread_delete()//删除动态线程释放内存 rt_thread_detach()//释放静态线程内存 rt_thread_yield()//让出处理器资源 rt_thread_control()//控制函数可修改:优先级、开关线程、绑定CPUrt_thread_sleep()//睡眠--节拍数 rt_thread_delay()//延时--节拍数 rt_thread_mdelay()//延时--毫秒rt_thread_self()//返回调用当前程序的线程句柄 rt_schdduler_sethook()//查看线程调度关系rt_tick_get()//获取当前系统时钟节拍

6.一些常用的宏定义
1.底层驱动配置:./rt_thread/components/drivers/include/driverseg:serial.h中可以修改串口波特率等参数。
2.系统节拍设置:rtconfig.hRT_TICK_PER_SECOND 1000eg:这里设置为1000则标识一个系统节拍时间为1/1000秒,即一个系统节拍时长为1ms。
3.
7.定时器使用
rt_timer_create()//创建定时器 rt_timer_delete()//删除定时器rt_timer_start()//开启定时器 rt_timer_stop()//关闭定时器rt_timer_detach()//静态定时器不再使用时使用rt_timer_control()//定时器 设置定时时间、 //获取定时时间、 //触发方式(单次、循环)、 //读取定时器状态。rt_hw_us_delay()//高精度延时

8.线程间同步 临界区:多个执行单元都会执行到的代码区域.
竟态:多个执行单元同时执行临界区会产生竟态.
9.信号量使用(每次获取信号量都要记得释放信号量)
rt_sem_create()//创建动态信号量//名字小于8个字符 rt_sem_delete()//删除动态信号量rt_sem_init()//创建静态信号量 rt_sem_detach()//脱离静态信号量内存rt_sem_trytake()//尝试获取 等同于take的RT_WAITING_NO rt_sem_take()//获取信号量 ==> value-- #define RT_WAITING_FOREVER持续等待 #define RT_WAITING_NO不等待rt_sem_release()//释放信号量 ==> value++

10.互斥量(信号量可由不同线程释放,互斥量只能由同一线程释放)
rt_mutex_create()//创建动态互斥量 rt_mutes_delete()//删除动态互斥量rt_mutex_init()//创建静态互斥量 rt_mutex_detach()//释放静态互斥量内存rt_mutex_take()//获取互斥量获取和释放互斥量都有同一个线程完成操作 rt_mutex_release()//释放互斥量

11.事件集 事件只与线程相关,时间间相互独立、事件仅用于同步不提供数据传输、事件无排队性。
由32位无符号数的位控制。
recv接收事件 执行完之后,send发送下一个事件。
rt_event_create()//创建动态事件集 rt_event_delete()//删除动态事件集 释放内存rt_event_init()//初始化静态事件集 rt_event_detach()//脱离静态事件集rt_event_send()//向事件集发送事件,唤醒对应的挂起的线程 rt_event_recv()//从事件集中接收事件

12.IO设备
设备类型:
rt_device_class_char,字符设备
rt_device_class_clock,块设备
rt_device_class_netlf,网络设备
rt_device_class_MTD,存储设备
rt_device_class_CAN,CAN设备
rt_device_class_RTC,RTC设备
rt_device_class_sound,音频设备
rt_device_class_graphic,图形化设备
rt_device_class_I2CBUS,I2C总线设备
rt_device_class_USBDevice,USB从机设备
rt_device_class_USBHost,USB主机设备
【rtt|RT-thread笔记】rt_device_class_SPIBUS,SPI设备
rt_device_class_SPIDevice,SPI从机设备
rt_device_class_SDIO,SDIO总线设备
rt_device_class_Timer定时器设备
rt_device_class_miscellaneous杂项
rt_device_class_sensor,传感器设备
rt_device_class_touch触控设备
rt_device_clase_unknown其他设备
rt_device_create()//创建动态设备 rt_device_destroy()//销毁设备rt_device_ops()//操作方法集合rt_device_register()//注册设备 rt_device_unregister()//注销设备 并不会释放内存,需要destroy 来释放内存常用访问设备函数: rt_device_find()//查找设备 rt_device_open()//打开i设备 rt_device_read()//读取数据 rt_device_write()//写入数据 rt_device_control()//控制设备 rt_device_set_rx_indicate()//接收回调函数 rt_device_set_tx_complete()//发送回调函数 rt_device_close()//关闭设备具体操作: rt_device_init() rt_device_open() rt_device_close() rt_device_read() rt_device_write() rt_device_control()

13.串口配置
配置串口时,用rt_device_control(name,cmd,arg)
name通过find获取的串口句柄
cmdRT_DEVICE_CTRL_CONFIG;
arg是一个serial_configure类型的结构体 ,系统默认是:RT_SERIAL_CONFIG_DEFAULT
如果要开启DMA
注意在board.h中宏定义 BSP_UART1_RX_USING_DMA。
14.注意事项 1.注意在rtt的i2c中系统没有将从机地址左移1位,故需要手动左移一位。
如:从机地址是0x40,在定义rt_i2c_msg 的add时,add = 0x40 >> 1;

    推荐阅读