freertos

基于HAL库手把手移植FreeRTOS10.4.1

情到浓时终转凉″ 提交于 2020-10-12 01:38:18
基于HAL库手把手移植FreeRTOS10.4.1 目录 基于HAL库手把手移植FreeRTOS10.4.1 (一)裸机工程创建 (二)移植FreeRTOS (一)裸机工程创建 使用STM32CubeMX创建裸机工程: 这里我是用的芯片是STM32F103RBT6,时钟主频为72MHz,配置时钟树: 配置调试串口1: 配置两个LED灯: 由于FreeRTOS使用系统嘀嗒定时器当作心跳,HAL库也使用了这个定时器,所以我们将HAL库的定时器改为其他,这里我该为了定时器4: 配置中断,注意这里一定要选择组4,也就是全部为抢占优先级: 取消掉systick的回调函数调用: 输出工程: (二)移植FreeRTOS FreeRTOS源码官网下载地址: https://www.freertos.org/ 解压FreeRTOS源码包有如下文件结构: 在Keil工程目录下新建FreeRTOS文件夹用于存放freertos的源码。 拷贝 FreeRTOS/Source/ 文件夹内的以下文件,放入keil工程目录FreeRTOS文件夹内,效果如下图: 在Keil中将FreeRTOS源码加入到工程内: 打开 stm32f1xx_it.c 文件,在头部添加FreeRTOS的三个函数导入: extern void xPortPendSVHandler ( void ) ; extern void

FreeRTOS学习(1)——FreeRTOS移植

北城余情 提交于 2020-10-07 03:54:25
为什么要让你的单片机裸奔? 什么是FreeRTOS? 首先看到两个概念: RTOS:实时操作系统,目前主流的嵌入式操作系统有:UCOS、FreeRTOS、LWIP、EMWIN、RT-Thread 等 FreeRTOS:FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要 也许在百度百科截取的这段解释不够接地气,通俗的解释就是更加有序的管理单片机的各个任务功能执行。 为什么要学习FreeRTOS? 采用嵌入式 实时操作系统 (RTOS)可以更合理、更有效地利用CPU的资源,简化应用软件的设计,缩短系统开发时间,更好地保证系统的实时性和可靠性 通常我们在写单片机程序的时候,都是将许多功能写成一个一个的函数,然后写在main函数中的while(1)里,与中断进行配合实现系统功能。这种情况就叫做 前后台系统 ,通常也称之为—— 裸奔 。但是加上了RTOS之后就是穿上了实时操作系统的衣服,更加合理,更加高级。 这里有一个关于竹林七贤之一——刘伶的故事: 有人去拜访刘伶,适逢他喝醉了酒,一丝不挂地在屋里乱晃,不禁讥讽道:“你也是礼教之人,如此行径成何体统?”刘伶一听,颇不以为然地反唇相讥:“我以天地为房屋,以房屋为衣裳,你怎么跑到我裤子里来权了?”客人听了瞠目结舌

基于iMXRT1052核心板设计的太阳能智能跟踪支架系统解决方案

萝らか妹 提交于 2020-10-02 13:25:12
随着中国光伏市场的日益成熟,技术不断提升,支架在整个电站中不仅仅是起到单纯的支撑作用,同时还可以大幅提升发电量,降低基础成本,因为同一地点一天内太阳高度角是不断变化的,所以光伏阵列在不同时间接收最大太阳辐射量的倾斜角度也是不断变化的。智能支架就是通过太阳能自动跟踪装置,使集能器的主光轴始终与太阳光线相平行,提高太阳能利用的控制设备。 一、结构组成 自动跟踪装置由传感器、方位角跟踪机构、高度角跟踪机构和自动控制装置组成。方位角跟踪机构由电源、方位角传感器、放大器、执行器组成。执行器由电机和传动齿轮组成。高度角跟踪机构由高度角传感器、放大器、执行器组成。控制单元由运算放大器、晶体管和继电器组成,并与照度传感器、方位角和高度角传感器及驱动电机连接。 二、方案实现: 1、UART:接传感器,传感器部分包括跟踪传感器和照度传感器,主要检测太阳由东往西视运动的偏转角度、太阳的视高度以及太阳的辐射强度。接lora数据传输采集数据。 2、IO:控制电机;当太阳光线发生倾斜时,传感器输出倾斜信号,该信号经放大后送入控制单元,控制单元经过对信号的处理分析指示执行器调整太阳能集能器,直到太阳能集能器对准太阳;当集能器表面有灰尘时可以控制雨刷喷水、清理集能器。 3、RS485:接上级 网关,发送状态信息并接收网关的指令,便于集中管理。飞凌iMXRT1052核心板将处理器功能管脚全部引出

操作系统产生死锁的原因和处理策略

生来就可爱ヽ(ⅴ<●) 提交于 2020-10-01 17:57:21
作者:Cyapirear 素材来源:华为开发者论坛 产生死锁的原因 当进程需要以独占的方式访问资源时,可能会发生死锁(Deadlock)。死锁是指两个或以上进程因竞争临界资源而造成的一种僵局,即一个进程等待一个已经被占用且永不释放的资源。若无外力作用,这些进程都无法向前推进。 产生死锁的根本原因 是系统能够提供的资源个数比要求该资源的进程数要少。 产生死锁的基本原因 可以分为两类:资源竞争和进程推进顺序不合理。 在资源竞争场景下,系统所拥有的资源是有限的,不能满足每个进程的需要。 例子: A有纸,B有笔 A:你不给我笔,我就写不了作业 B:你不给我纸,我就写不了作业 彼此僵持不下…… 多个程序同时运行时,进程推进顺序不合理。 例子: A要前进2步,到桌子前,再后退2步。 但如果执行顺序不合理:A先后退,就永远到不了桌子前,触发不了后续动作,就会死锁。 产生死锁的必要条件 产生死锁的四个必要条件: 互斥条件 涉及的资源是非共享的,即一次只能有一个进程使用。如果有另一个进程申请该资源,那么申请进程必须等待,直到该资源被释放。 不剥夺条件(非抢占) 进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自行释放。 占有并等待(部分分配) 进程每次申请它所需要的一部分资源。在等待一新资源的同时,进程继续占用已分配到的资源。 环路条件(循环等待)

10月1日后,GitHub用main替代master

≡放荡痞女 提交于 2020-09-29 06:31:26
转自:开源中国 GitHub 官方表示,从 2020 年 10 月 1 日起,在该平台上创建的所有新的源代码仓库将默认被命名为 "main",而不是原先的"master"。 值得注意的是,现有的存储库不会受到此更改影响。 早在今年 6 月份,受美国大规模的 “Black Lives Matter”运动影响,为了安抚愈演愈烈的民众情绪,GitHub 就宣布将替换掉 master 等术语,以避免联想奴隶制。现如今,在外界一些声音的催促下,这一举措则终于要正式落地了。 除 GitHub 外,为了避免带有所谓的“种族歧视色彩”,许多科技巨头或知名软件也都调整了自己的业务和产品,以平息社会舆论。包括有:MySQL 宣布删除 master、黑名单白名单等术语;Linus Torvalds 通过了 Linux 中避免 master/slave 等术语的提案;还有 Twitter 、GitHub、微软、LinkedIn、Ansible、Splunk、OpenZFS、OpenSSL、JP Morgan、 Android 移动操作系统、Go 编程语言、PHPUnit 和 Curl 等宣布要对此类术语进行删除或更改。同时,IBM、亚马逊、微软也都接连调整面部识别平台业务,以防加深歧视或遭受指责。 且最初在 Git 中写下“master”一词的开发者 Petr Baudis 也于 6

FreeRTOS学习笔记 (7)FreeRTOS的软件结构

折月煮酒 提交于 2020-08-20 05:27:07
我是从 FreeRTOS 官方的文档《Mastering the FreeRTOS Real Time Kernel》开始学习它的,代码和参考手册都用的 9.0.0 版本。我还没有用过其它的 RTOS, 所以也无意评价它的优缺点。当然,它无疑是一个优秀而且很流行的嵌入式 RTOS. 要上手也很快,本篇我就记录一下如何将 FreeRTOS 的代码加到已有的工程里面,作为一个备忘参考(网上也能随便搜到很多关于怎么使用 FreeRTOS, 怎么创建任务等等的文章。在我的学习笔记系列里面这部分内容倒不是首要的,因为我想分享的是从我对 FreeRTOS 代码的分析和实践了解到它是怎么工作的,带来了什么好处)。 文件组成 从 freertos.org 网站上可以找到下载源代码包的链接。以我用的 v9.0.0 代码为参考,它的根目录下有6个C源文件: croutine.c event_groups.c list.c queue.c tasks.c timers.c 这些文件是 FreeRTOS 的核心代码,有的还是可选的。然后是两个子目录: include 和 portable . include 目录下的头文件包含了系统核心用到的宏定义,以及编程用到的 API 数据结构、函数原型等。在 portable 目录下的文件提供一些会被 FreeRTOS 核心代码调用的函数

思维导图整理Linux进程描述符

放肆的年华 提交于 2020-08-17 13:25:47
[导读] 内核是怎么工作的,首先要理解进程管理,进程调度,本文开始阅读进程管理部分,首先从进程的抽象描述开始。抽象是软件工程的灵魂,而对于Linux操作系统而言,更是将抽象思想体现的淋漓尽致。本文从抽象建模的角度来对Linux进程描述符进行个人解读,同时也参考了内核文档,一些网络信息。 注:代码基于linux-5.4.31,是一个最新的长期支持稳定版本。 整理匆忙,限于水平,文章中错误一定很多,真诚恳请有这方面擅长的朋友帮忙指出,不甚感激! 进程的基本概念 进程 or 线程 or 任务? 进程 :进程是一个正在运行的程序实例,由可执行的目标代码组成,通常从某些硬媒介(如磁盘,闪存等)读取并加载到内存中。 但是,从内核的角度来看,涉及很多相关的工作内容。 操作系统存储和管理有关任何当前正在运行的程序的其他信息:地址空间,内存映射,用于读/写操作的打开文件,进程状态,线程等。 进程是正在执行的计算机程序的实例。它包含程序代码及其当前活动。取决于操作系统(OS),进程可能由同时执行指令的多个执行线程组成。基于进程的多任务处理使您可以在使用文本编辑器的同时运行Java编译器。在单个CPU中采用多个进程时,使用了各种内存上下文之间的上下文切换。每个过程都有其自己的变量的完整集合。 但是,在Linux中,如果不讨论线程(有时称为轻量级进程),进程的抽象是不完整的。 根据定义