FreeRTOS给予裸机编程的思考
临界段保护:不允许被打断的代码
在裸机开发中,一般不能被打断的就是:器件的时序初始化(你使用的时候在定时器初始化之前即可)、读取器件的数据(时序要求也很敏感,这个最容易忽略出错误)、计算一个重要的值(防止中断的时候使用的是旧的)
临界段保护是操作系统得一大特色,为了保护变量能正常改变,防止突发情况得产生(虽然概率低,但是一旦发生就完蛋)
但是我们在裸机开发中,其实没有遇到这方面的问题,原因是:工程太小、中断太少,简称自己不行呗,这是一个隐藏的bug,也许很难被发现,但是一旦被触发,那可能就是大错误了
解决方法:屏蔽中断(至于屏蔽哪些中断,需要自己判断),但是屏蔽中断的时间不能过长,一旦过长就会出问题,至于如何协调,自己选择判断
裸机开发中,我们会使用很多个全局变量,一旦有全局变量在中断和任务中使用的话,那么可能就会出现问题了,虽然几率很小,程序中的很多bug来源于全局变量的使用,全局变量的保护是一个难点也是重点
在任务操作某一个值的时候,需要关闭使用该值的中断,否则可能会遇见,还没有操作完,就进入中断了
FreeRTOS的关开中断的宏定义,关闭一定范围的中断,还有一些中断是太紧急的,不允许被打断
FreeRTOS的命名方式也是亮点,可以提高阅读性,变量命名(见面知意+变量的数据类型)、函数命名(返回值+函数位置+函数作用)
FreeRTOS的条件编译,选择性的使用某些功能也是一个亮点
FreeRTOS的队列或者信号量,你可以在裸机中使用数据结构的知识模拟出来一个简单的队列或者信号量,FreeRTOS的队列好处就是因为避免了冲突(关闭中断),因此你在裸机模拟的时候,也需要关闭一些不重要的中断,为了放置数据
FreeRTOS的任务通知思考,利用一个变量做了很多事情 ,定义一个任务通知值(全局),但是只能给一个任务发,但是你可以改变任务通知值的每一个位,这个场景适用于:A函数是一个遥控器,而B函数是电视,A给B发通知,并且只能给B发(也是为了保护,避免变量的滥用),按钮不同,B做出的反应不同,而这个按钮就是变量的每一位,并且把按钮写出枚举状态
FreeRTOS的事件标志组思考,类似于任务通知,但是事件标志组定义的变量可以是全局的,并且改变事件标志值得时候需要关闭中断,一个函数得执行需要有两个事情准备好了甚至多个,此时使用事件标志组很好
FreeRTOS给予裸机编程的思考相关推荐
- BSP板机支持包、linux启动分析、ARM裸机编程
文章目录 一.BSP 二.驱动 驱动的基本要素 三.启动分析 1.uboot 2.uboot的作用 3.uboot相关命令 关键的内容: 1)bootargs,启动参数 2)启动命令 3)修改启动延时 ...
- MCU裸机编程的状态机框架--第一部分
MCU裸机编程的状态机框架--第一部分 1 状态机的概念 1.1 状态机的要素 1.2 状态迁移表 1.3 状态机思路实现一个时钟程序 1.4 状态机应用的注意事项 1.5 更复杂的状态机 2 单片机 ...
- mini2440 裸机编程 -led
又重新做回了嵌入式,想把以前学到的东西从头复习一下.首先从裸机编程开始. 本系列使用的硬件环境是友善之臂的 mini2440,百问网的OpenJtag,所有程序在 linux gcc下编译, 具体硬件 ...
- 关于函数式编程的思考(1)
作者:李英杰,美团金融前端团队成员.欢迎大家一起来探讨FP 题外话:只是单纯地谈谈个人对函数式编程的理解,欢迎大家来一起探讨.也不会提及高阶函数与范畴学的内容,只聊一些很入门的问题.函数式编程的优点这 ...
- 应用编程与裸机编程、驱动编程的区别(Linux应用编程篇)
用嵌入式Linux硬件平台下的软件开发来说,我们大可将编程分为三种,分别为裸机编程.Linux驱动编程以及 Linux应用编程. 裸机编程: 一般把没有操作系统支持的编程环境称为裸机编程环境,譬如单片 ...
- 07 树莓派裸机编程,并在Windows MSYS2 QEMU模拟器中运行
作者 将狼才鲸 创建日期 2022-11-14 Gitee源码和工程地址:才鲸嵌入式 / 开源安防摄像机(嵌入式软件) CSDN文章地址:项目介绍:开源安防摄像机(嵌入式软件) 4)完整的环境安装步骤 ...
- 03 - 程序设计框架:裸机编程中应用层、中间层、驱动层划分
03-程序设计框架:裸机编程中应用层.中间层.驱动层划分 1.框架设计层次 <代码大全>第五章中,把程序设计分为四个层次: 软件系统,就是整个系统.整个程序 分解为子系统或包.比如我们可以 ...
- TQ210_裸机编程(一)——点亮LED灯
TQ210_裸机编程点亮LED灯 首先查看 TQ210 的底板原理图: 我们可以看到 两个 LED 分别接到 S5PV210 的 GPC0_3 和 GPC0_4 引脚. 这里用了 NPN 三极管,具有 ...
- S5PV210(TQ210)裸机编程
本文更多的是教会大家如何学习. 4.1 汇编学习 4.1.1 基础知识 4.1.2 ARM模拟器 4.2 S5PV210启动流程 4.3 点亮一个LED 4.4 串口 ...
最新文章
- 三星出了个AI黑科技,不只是“换脸”这么简单
- DJANGO获取用户访问IP
- iOS网络传输Delegate不被触发的本质原因
- 配置druid内置的log实现
- SAP ABAP 平台新的编程模型
- 写随笔写日记多参与评论
- 算法----并行算法
- Python 读取MODIS叶绿素-a浓度.nc文件
- 软件开发技术文档标准格式
- 你应该知道的,十二大CNN算法
- 沉没成本不是成本-----通俗解释几何分布与指数分布的无记忆性?
- 尚硅谷Javase项目一(家庭收支记账软件)
- 逐向双碳:绿色计算的误区与正确打开方式
- 3.1 电磁干扰EMI
- 《麻省理工学院公开课:人工智能》笔记三
- Go语言Cookie常用设置
- SAT考试填空习题(一)及答案
- 小象学院hadoop进阶
- linux limits.conf 生效,limits.conf生效问题
- 【数据库原理】关系-Relationship
热门文章
- 外包派遣3年华为,合同结束转正,转正后工资12k-15k,13薪,包三餐,值得去吗?
- C++实现十进制与十六进制转化
- android8.0模拟器没有root权限不能成功启用monitor导出文件的解决方法
- java 读者写者_Java实现生产者消费者问题与读者写者问题详解
- 前端面试题及答案整理(2022最新版)
- 重启网卡提示Bringing up interface eth0: Device eth0 does not seem to be present,delaying initialization.
- 组合逻辑中的竞争与冒险现象
- 从头开始写STM32F103C8T6驱动库(四)——编写延时函数,详解Systick
- 蓝牙APP接收数据并显示图像
- 换一个角度去感悟人生