RT-thread Studio——基于STM32F407点灯小实验串讲

1.时钟配置部分

通过修改board.h里的宏定义去修改时钟,可以自己去修改,如下图,我用的是STM32F407探索者,主频168MHZ,新建工程后生成的board.h时钟用的是内部时钟线HSI,系统时钟168MHZ。

2.添加FinSH组件

可以直接在组件包勾选,非常方便

这个组件是用来调试的,让开发者能够很清晰地了解到系统的运行情况。

FinSH支持命令行模式(也就是msh),我们可以接入串口后在终端输入help去查看有哪些可使用的命令行

想了解这些指令具体是什么操作的话详见这个博主的文章RT-thread ---- FinSH 控制台_rtthread finsh-CSDN博客

3.内核组件

具体的功能实现如右上所示,可以简单地提一嘴其基本功能:

实时调度器作用于建立多个线程后令这多个线程同时运行(其实不是同时进行,CPU不能同时运行两件任务,只不过是交叉进行两个任务然后在我们视角看起来是同时进行的);线程管理用于管理线程的状态,如就绪态、运行态等等;线程间通信用于不同线程之间的交互;时钟管理可以用以去创建一些定时器,此处可以类比一下单片机的定时器,单片机是定时器TIM是硬件形式的,而RT-thread内核的定时器是软件形式的,更为方便,我们随时可以建立或删减定时器……

线程管理部分的作用功能具体地说,就是转换任务之间各种状态,然后让CPU实现任务的切换等等,任务的各种状态我也提一嘴:就绪态就是具备了在CPU运行的条件但还没运行的状态,原因是CPU现在有处于运行态的任务在运行,而运行态的任务会被中断等高优先级的任务打断而转变成挂起态,等中断执行完之后才继续运行……总之线程管理可以让任务状态实现转变。

时钟管理,我们主要用到的就是一个时钟节拍和定时器管理,时钟节拍涉及到系统时钟systick,一般默认10ms调动一次,我们也可以设置成1ms一次,它是RT-thread最小的时钟单位。定时器管理分为软件定时器和硬件定时器,硬件定时器用于时间特别严格敏感的情况下,软件定时器就是在我们操作系统之上建立的。

线程间同步:主要讲一下信号量的工作机制,信号量是一个内核对象,包含一个信号量值和一个线程等待队列,信号量值可以指可用的资源数目(如内存等),如果想要用这个资源就可以申请信号量,如果信号量大于零意味资源可用,线程将获得信号量,相应的信号量值减一。用完这个资源后就释放这个信号量以便其他线程获取这个资源。可以把信号量看作是一面旗帜,哪个线程先申请抢占到这个小旗子就可以先用资源。

然后提一嘴互斥量,是为了解决优先级调度反转的问题(优先级反转就是运行的时候可能存在低优先级的去申请信息量,然后忽略原高优先级线程申请信息量的情况)。其实互斥量就是互相排斥的信息量。

事件集:其实就是若干个标志位组成的,最多32个标志位,每个标志位代表一个事件,1代表发生了,0代表没发生。事件集用于一个线程发给另一个线程,告诉其发生了什么事情。【个人感觉有点像单片机里的寄存器】

进程间通信:包括邮箱和消息队列,主要用于传输信息(比如串口接收到数据要发送给别的部件使用)。线程可以把一份四字节的邮件发到邮箱里,而其他线程可以从邮箱里接收这些邮件。邮箱和消息队列的区别是邮箱只能发送四个字节(对32位处理系统而言),但是消息队列可以发不定长的字节,它两都可以缓存数据。

4.在RT-thread新建工程并实现点灯

如图所示,至于串口的选择可以按自己意愿来(通过看芯片原理图或者数据手册去查找具体哪个IO口),如果建好之后编译报错就换一个内核版本,我用的是4.1.0 的【内核版本的更新在SDK管理处找一下】

点灯程序和keil的差不多 就是需要注意的是像HAL_GPIO_WritePin()函数是在stm32f4xx_hal_gpio.h里的,虽然这个stm32f4xx_hal_gpio.h里面本身就会包含stm32f4xx_hal.h头文件,且也能跳转至stm32f4xx_hal.h这个文件,但我们依旧需要在main文件里添加stm32f4xx_hal.h头文件,这点和keil不太一样,还有要说一下GET_PIN()函数,这个函数是获取引脚编号的,和keil不一样的是在RT-thread里每个引脚都有对应的编号(如PF9对应89),一开始我因为不清楚这一点走了很多弯路,还有就是即使在Cubemx里配置了GPIO初始化也要在main里加上rt-pin-mode函数,如果依然有报错什么的注意检查一下头文件

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值