RTOS
文章平均质量分 78
iChamber
这个作者很懒,什么都没留下…
展开
-
不需要移植,在keil上打个勾就让stm32跑起操作系统
初识keil5,不得不说自动化配置的强大,建个新工程基本不需要各种粘贴复制文件夹,以前一直担心直接拷贝模板工程会同时拷贝很多垃圾文件,现在就完全不需要担心了。keil5的使用这里不赘述,这次的主题主要是仅仅使用keil软件就让STM32跑起操作系统,不需要所谓的移植。说起让MCU跑操作系统,总让新手望而生畏,让高手觉得没必要,浪费资源,其实如果给MCU添加操作系统就像添加一个GPIO外设一样简单,原创 2016-11-12 22:02:42 · 13843 阅读 · 9 评论 -
CMSIS-RTOS 复用Multiplex
复用Multiplex复用是用来限制访问临界代码区的线程个数,举个例子,对于存储空间的访问仅仅可能只支持几个受限的调用。osSemaphoreId multiplex;osSemaphoreDef(multiplex);void thread1 (void){ multiplex =osSemaphoreCreate(osSemaphore(multiplex), FIVE_TOKEN翻译 2016-11-20 21:52:37 · 1484 阅读 · 0 评论 -
CMSIS-RTOS 信号量的使用Using Semaphores
信号量的使用Using Semaphores前面说过信号量包含较多的OS调用,所以它拥有广泛的同步应用,这也就导致了它可能是RTOS里面最难理解的部分。在本节,我们将看看信号量的一些普遍应用,这些应用摘自“信号量小书”(Allen B. Downey著),这本书可以免费下载,链接在本书的最后部分。发送信号Signaling两个线程之间的同步是信号量最简单的使用方式:osSemaphoreId sem翻译 2016-11-20 21:50:30 · 1942 阅读 · 0 评论 -
CMSIS-RTOS 信号量Semaphores
信号量Semaphores和信号类似,信号量也是一种同步多个线程的方式,简单来讲,信号量就是装有一些令牌的容器。当一个线程在执行过程中,就可能遇到一个系统调用来获取信号量令牌,如果这个信号量包含多个令牌,线程就会继续执行,同时信号量令牌的数量就会减一。如果此时信号量中没有令牌,线程就会被置于等待状态,直到出现一个可用的令牌。在线程执行的任何位置,它都可以给信号量增加一个令牌。信号量用来帮助访问程序资翻译 2016-11-20 20:40:06 · 5231 阅读 · 2 评论 -
CMSIS-RTOS 中断处理Interrupt Handling
RTOS中断处理Interrupt Handling在RTOS中使用信号来触发线程间的行为是比较简单和高效的,而对于Cortex-M微控制器来讲,从中断源获取信号来触发线程同样是一种重要的方式。虽然在中断服务程序ISR中运行一段代码也可以,但在RTOS系统中,在中断运行的时间越短越好,因为太长的时间会延长定时器的节拍,并破坏RTOS内核。系统节拍运行的优先级在NVIC中是最低的,因此任何中断服务程序翻译 2016-11-20 19:02:40 · 4756 阅读 · 0 评论 -
CMSIS-RTOS 多重实例化Multiple Instances
为了简便起见,从这篇文章开始,题目不再增加ARM官方《CMSIS-RTOS教程》几个字。多重实例化Multiple InstancesRTOS的一个有趣功能就是可以针对一个线程进行多个实例化,例如你可以基于一个线程代码创建多个用于控制UART的实例,此时,每个UART的实例都会管理一个不同的UART硬件。首先我们要创建线程结构体,并设置线程实例个数为2:osThreadDef(thread1, o翻译 2016-11-20 13:52:56 · 2445 阅读 · 2 评论 -
CMSIS-RTOS 时间管理之时间延迟Time Delay
时间管理 Time Management此RTOS除了可以把你的应用代码作为线程运行,它还可以提供一些时间服务功能,使用这些功能你就可以访问RTOS的一些系统调用。时间延迟Time Delay在所有的时间服务功能中,最基本的一个就是延时函数。它可以在你的应用中提供非常简单易用的延时功能。也许你会觉得CMSIS-RTOS已经占用了5k字节的代码量,但是在非RTOS的应用中,我们也常会用到一些延时循环、翻译 2016-11-20 13:58:46 · 6633 阅读 · 0 评论 -
CMSIS-RTOS 时间管理之虚拟定时器Virtual Timers
虚拟定时器Virtual TimersCMSIS-RTOS API里有几个向下计数的虚拟定时器,它们实现计数完成时用户的回调功能。每个定时器都可以配置成单次计数或重复计数模式,它们可以在定义定时器结构体的时候被创建:osTimerDef(timer0, led_function);在上面的代码中给定时器定义了一个名字timer0,并同时定义了回调函数led_function,紧接着必须对这个定时器进翻译 2016-11-20 14:26:49 · 7804 阅读 · 1 评论 -
CMSIS-RTOS 时间管理之空闲线程Idle Demon
空闲线程Idle DemonCMSIS-RTOS提供的最后一个定时器服务函数并不是一个真正的定时器,但是这里是最合适讨论它的地方。如果在我们的RTOS程序里没有任何线程正在运行,或者准备运行(举个例子,所有的线程都处于等待延时函数中),那么RTOS就会利用空闲的运行时间调用一个“Idle Demon”的线程,这个函数同样位于RTX_Conf_CM.c文件里面,空闲线程拥有一个低优先级,只有在没有其他翻译 2016-11-20 16:18:58 · 4188 阅读 · 0 评论 -
CMSIS-RTOS 线程间通信 Inter-Thread Communication
线程间通信 Inter-Thread Communication前面我们已经学习了如何把你的应用代码设计成独立的线程,以及如何访问RTOS的时间服务函数。在实际的工程应用中,线程间的通信是必不可少的,任何一个RTOS都会支持几种通信方式来连接各种不同的线程。CMSIS-RTOS API支持的通信方式有:信号(signals),信号量(semaphores),互斥锁(mutexes),邮箱(mailb翻译 2016-11-20 16:31:29 · 7012 阅读 · 0 评论 -
为什么要用CMSIS RTOS
CMSIS RTOS是ARM官方推出的RTOS API,很多人认为它就是RTX,实际上它只是封装了RTX,以后还可能封装freeRTOS,uc/os等等第三方OS。它有哪些优势呢?下面是我开始研究它的原因:集成在keil中,没有所谓移植概念。针对任何MCU都可以一键添加(试想一下,如果你将来用的不是STM32,那么移植OS是不是还是那么容易);占用资源极小。大约5kB,而且针对cortex系列A原创 2016-11-20 14:31:29 · 18697 阅读 · 0 评论 -
ARM官方《CMSIS-RTOS教程》之线程的管理和优先级Thread Management and Priority
这篇文章咱也开始尝尝鲜,用Markdown编辑,主要是三个原因: 1. 原来每次写一段都要拖到网页最下面点击保存草稿,这个MD编辑器保存按钮在上面,很方便; 2. MD右侧有预览,不用每次切换到博客刷新去看; 3. 写完一大篇文章已经很累了,还要回头用鼠标挨个搞段落、加粗等等,干脆在写文字的时候顺带完成就省事了,如果不去搞段落别人阅读起来又很头大。 此外在翻译ARM官方翻译 2016-11-13 10:46:41 · 6282 阅读 · 0 评论 -
ARM官方《CMSIS-RTOS教程》之创建线程Creating Threads
一旦RTOS开始运行,就会有很多系统调用来管理和控制活跃的线程。默认情况下,main()函数自动被创建为第一个可运行的线程。在第一个例子里我们使用main()函数创建了其他线程,并且随后让main()结束运行。然而我们还可以让main当成一个真正的thread使用。首先,我们需要获取它的ID号。此时,我们第一个要调用的RTOS函数就是osThreadGetId(),这个函数返回当前运行thread翻译 2016-11-13 10:26:35 · 27960 阅读 · 2 评论 -
CMSIS-RTOS 交汇Rendezvous
交汇Rendezvous一种更常规的信号量通信形式叫做交汇,交汇确保两个线程同时到达某个确定的执行点,除非两个线程都到达这个交汇点,否则它们都不会继续运行。osSemaphore arrived1, arrived2;osSemaphoreDef(arrived1);osSemaphoreDef(arrived2);void thread1(void){ Arrived1 = osSem翻译 2016-11-20 21:54:03 · 1300 阅读 · 0 评论