STMCU小助手
发布时间:2022-11-30 15:00
|
引言在嵌入式开发中,只要你使用实时操作系统,那么使用信号量可以说必不可少。我们常使用信号量进行同步或互斥。( L9 a I4 s& C" H 6 W: b2 t$ i# M* Y/ R+ Z 信号量介绍( W! h. a! g, H5 H7 } 信号量(semaphore)是一种用于提供不同进程之间或者一个给定的不同线程间同步手段的原语。信号量多用于任务间的同步与互斥。信号量在FreeRTOS中分为三种:计数型信号量、二值信号量和互斥信号量。! e. o4 z& A% F$ {6 i( ]1 O 1.同步:处理竞争就是同步,安排进程执行的先后顺序就是同步,每个进程都有一定的个先后执行顺序。' q5 C0 j2 @" O# T5 ~* ? 2.互斥:互斥访问不可共享的临界资源,同时会引发两个新的控制问题(互斥可以说是特殊的同步)。: P0 O, z5 b! n/ n) |+ v 3.竞争:当并发进程竞争使用同一个资源的时候,我们就称为竞争进程。 二值信号量顾名思义就是信号量取值只有0和1的信号量,但他与互斥信号量不同,他没有优先级继承机制,也不是获取和释放均只能在同一个任务里进行。在实现任务间同步中,使用的非常广泛。% l0 _6 G( Y5 i7 h/ @2 Y 准备, M6 {2 t2 M: f 硬件- w: {, ^7 p9 l+ F 1.STM32F103开发板 2.LED灯 软件* X# S Y. D d+ e! [- M 1.Keil 5 2.STM32CubeMX1 d- R3 e5 {3 G6 h- O 3.串口调试助手! f# {8 W- H' Z3 E ; a- P. a2 N8 }' i( S 功能设计! p- k+ ]7 K3 G( R0 [ 需求设计& M% v8 E9 S+ y% b" R 设置两个任务和一个信号量。 任务1运行时会令LED1闪烁,并串口发送01,当运行4次任务1后,任务1会释放二值信号量。( }& h6 r* v% p+ i& v* {/ A2 O 任务2首先获取二值信号量,如果获取失败任务进行调度。当获取到信号量时,任务2会执行LED2闪烁,并串口发送02。 实现任务1 每运行四次,任务2运行一次。+ p3 U9 ?% a6 e J7 |( F 软件实现 1.信号量定义8 @- t) Z0 W6 ~4 b% U+ C 下面的程序目的是创建了一个二值信号量。
# L1 o# K3 n& a \& N6 d 2.任务1 主要是每次执行一次闪烁和串口发送01,当执行第四次的时候,释放信号量。9 }! y) }1 O! W0 x
& R/ [$ p5 Y1 `; q: }' Q 3.任务2+ _' Y7 d3 t0 ?9 U* ~& b 任务2主要执行的是,当获取的信号量时,LED2翻转,并串口发送02。
3 u/ H$ v* f5 |/ W J" x# m9 H+ v7 F+ S! J( V6 A9 Y 现象* ^" g( a1 | Q: g9 \5 V 实现的现象是LED1始终在翻转,串口始终发送01,当执行四次上述现象的时候。LED2翻转并串口发送02. 0 D) |. Y- F4 c / d/ w: f% g% Z- M+ _8 c8 {! y
4 X# e. z) T' E1 }, V 转载自: 跋扈洋 ) l0 h j# E ]* ~& ?" n3 o) j + @& D: T( N0 h8 r& M, C $ n# |# x3 ?# j7 m* ^+ r |
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
Keil-MDK 在线调试设置断点的高级用法
请教下STM32N6570 怎么把分辨率改成320x240并可以全屏显示
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理
使用STM32 MCU和MPU连接PDM数字麦克风
分享STM32资料-采用 STM32U031R8 MCU 的 STM32 Nucleo-64 开发板,官方资料,数据手册等资料
HRTIM 指南
使用 STM32 的 DWT 单元监控内存
DAC,COMP,HRTIM Fault 功能的使用
微信公众号
手机版