当前位置: 首页 > news >正文

单片机编程原则

多任务编程的概念

在这里插入图片描述
方式一:实时操作系统(不建议新手使用)
方式二 :裸机多任务模型
在这里插入图片描述
逻辑多任务的基本原理
在这里插入图片描述
把三个任务分别分为一个一个的片段 然后先执行任务一的第一个切片 执行第二个任务的第一个片段 执行第三个任务的第一个片段 然后再返回执行第一个任务的第二个片段 接着循环 达到右边彩色条纹的效果 如果把任务分足够多的片段 执行的速度够快 就可以认为三个任务并行执行
裸机多任务模型
在这里插入图片描述
第一个阶段是初始化 GPIO EXTI等外设和其他的初始化 第二个阶段是任务的执行注意在任务的执行中不能调用延时函数PAL_Delay 就是让CPU在多个任务中切换让三个任务达到同时并行执行 第三个阶段是中断函数执行阶段 也不能调用延时函数

裸机多任务练习 LED闪灯

在这里插入图片描述
按下按钮后灯闪烁的速度变化 一共有三个挡位 由之前的代码可知 要在while中不断调用readbit这个函数 读取按键的状态 然后led闪灯也是要在while 就是两个并行的任务在while中
在这里插入图片描述
按键的检测本来是要在while上用if语句检测两个变量previous和current 但是使用了PAL库直接调用函数
在这里插入图片描述
只需要把按钮的初始化的句柄传入即可
闪灯模式的切换 定义一个变量blinkmode
在这里插入图片描述
闪灯的程序
在这里插入图片描述就是调用一个writebit的函数写0就亮起 写1就熄灭 然后再亮起和熄灭之间增加一个延时函数
根据闪灯变量来切换闪灯模式
在这里插入图片描述
但是这个进程远远超过了进程的时间限制 5ms 所以要改造这个函数在这里插入图片描述
创建一个状态变量为stage stage=0就为灯熄灭 stage=1就为灯亮起 然后在这两个状态中来回切换就是灯的亮灭进程
亮起就调用GPIOC write bit函数写reset 熄灭就写入set
那么如何编写超时的函数?
在这里插入图片描述
这个函数是用来获取时间的 就是单片机开启的一瞬间开始计时 0 1 2 3 …

http://www.lryc.cn/news/232023.html

相关文章:

  • 开源短剧付费变现小程序源码系统+在线开通会员+在线充值 带完整的搭建教程
  • 基于Python机器学习、深度学习技术提升气象、海洋、水文领域实践应用能力
  • 电商平台为什么需要及时部署ssl证书?
  • 卡码网语言基础课 | 12. 位置互换
  • 用DOM来读取XML时要注意的一些概念
  • openresty安装配置,执行shell脚本
  • 解决Dockerfile中 Could not initialize class sun.awt.X11FontManager错误
  • Kubernetes(k8s)进阶
  • [Vue 配置] Vite + Vue3 项目配置和使用 NProgress
  • Android MQTT开发之 Hivemq MQTT Client
  • 【Maven教程】(十一):使用 Maven 构建 Web应用 —— 使用 jetty-maven-plugin 进行测试、使用 Cargo 实现自动化部署~
  • 番外 2 : LoadRunner 的安装以及配置
  • win10正确配置tensorRT环境
  • C++初阶-模板初阶
  • 基于Python实现汽车销售数据可视化【500010086】
  • dist.init_process_group() 卡住超时导致报错
  • RESTFul API:真是让人又爱又恨
  • 【洛谷 P1478】陶陶摘苹果(升级版)题解(多重集合+贪心算法)
  • 使用WebSocket实现网页聊天室
  • 《如何控制 LLM 的输出格式和解析其输出结果?》
  • 《网络协议》07. 其他协议
  • 高压放大器设计要求有哪些内容
  • 1700亿烧光,利润暴跌78%!外媒:中芯国际不是麒麟9000S的代工厂
  • 简单理解路由重分发(用两路由器来理解)
  • 什么是等保测评?
  • 21、Flink 的table API与DataStream API 集成(1)- 介绍及入门示例、集成说明
  • (免费领源码)Java#SpringBoot#mysql高校实验室资产管理系统85189-计算机毕业设计项目选题推荐
  • 高效能人士的七个习惯
  • 【前端】使用json-server报错
  • 【Git企业开发】第七节.多人协作开发