FreeRTOS与uCOS II均为嵌入式实时操作系统,各有优劣,本文为你仔细分析。
V5是STM32F407IGT6,V6是STM32F429BIT6,V7是STM32H743XIH6 模板下载: V5-600_uCOS-III实验_程序移植模板(3.08.00).rar V6-600_uCOS-III实验_程序移植模板(3.08.00).rar V7-600_uCOS-III实验_程序移植模板(3.08.00).rar uC/Probe V4.8.0下载: 链接:https://share.weiyun.com/5RkuszI 密码:8t7pqa
Micrium Software提供了 RTOS 解决方案系列,俗称ucos全家桶,其中最为出名的就是 ucOS-II 和ucOS-III,于 2016 年成为 Silicon Labs 的一部分。
V5是STM32F407IGT6,V6是STM32F429BIT6,V7是STM32H743XIH6 模板下载: V5-800_uCOS-II实验_程序移植模板(2.93.00).rar (6.01MB) V6-800_uCOS-II实验_程序移植模板(2.93.00).rar (5.84MB) V7-800_uCOS-II实验_程序移植模板(2.93.00).rar (14.99MB) uC/Probe V4.8.0下载: 链接:https://share.weiyun.com/5RkuszI 密码:8t7pqa
模板下载: 链接:https://pan.baidu.com/s/1_4z_Lg51jMT87RrRM6Qs3g 提取码:2gns
1.什么是操作系统? 操作系统是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。介于APP和硬件之间。
上一次我们说过,在裸机编程中,通过while(1)大循环来按顺序执行我们的程序,除了中断之外,后面的程序是不可能打断前面的程序来执行的。而在我们的uC/OS III操作系统中,各个任务是完全独立的,各个任务具有自己的优先级,通常按照优先级高低来依次执行,其他的暂时不多说。今天主要说一下任务的创建与管理,还有消息队列。
博主最近在搞 Sensor hub,跑的是 FreeRTOS,所以来学一学 FreeRTOS。
前面我们所有的实验都是跑的裸机程序(裸奔),从本章开始,我们开始介绍UCOSII(实时多任务操作系统内核)。
俗话说万事开头难,学习一门新的知识,难的往往不是知识本身,而是如何快速上手,需要什么资料和开发环境。一旦上手后,深入的学习就相对容易些了。
首先比较主流的操作系统有UCOSII、FREERTOS、LINUX等,UCOSII的资料相对比其余的两个操作系统的资料是多很多的。
目前比较主流的操作系统有UCOSII、FREERTOS、LINUX等,UCOSII的资料相对比其余的两个操作系统的资料还是非常全面的。
skyeye安装:ubuntu12.0432 llvm2.8 skyeye1.3.3 http://blog.chinaunix.net/uid-26963688-id-3267351.html 当中有几处是错误的,改动后的不带图的步骤例如以下: Ubuntu 12.04 LTS 32bit 1G DRAM 2 cores + skyeye-1.3.3_rel.tar.gz 开发编译环境准备: 首先安装skyeye的依赖包 sudo apt-get install libgtk2.0-dev pkg-config libatk1.0-dev libpango1.0-dev libfreetype6-dev libglib2.0-dev libx11-dev binutils-dev libncurses5-dev libxpm-dev autoconf automake libtool python-dev llvm 安装步骤: 1. 解压源文件:tar xvf skyeye-1.3.3_rel.tar.gz 安装的这个版本号的skyeye并不能正确执行,主要是执行ucos4skyeye的时候会出现skyeye.conf的配置信息不对的现象。换成了 2. 配置skyeye:./configure (在解压后的目录中) 3. 编译第三方文库:make lib -j2(用两个核) 4. 编译skyeye:make -j2 5. 安装skyeye库文件:make install_lib 6. 安装skyeye:make install 7. 执行skyeye:在opt/skyeye/bin文件夹下:./skyeye_main.py 8. 測试hello world应用程序: 首先切换到/opt/skyeye/testsuite/arm_hello文件夹下 然后执行:/opt/skyeye/bin/skyeye_main.py -e arm_hello,进入skyeye命令行模式 然后执行start命令,执行arm_hello应用程序 终端将打印架构信息。同一时候探出串口窗体 终端中执行run命令。串口会不停的打印出helloworld
说明: 1、去年微软宣布收购ThreadX,但是没有公布后续策略,uCOS全家桶进入开源免费后,ThreadX也宣布正式加入。 2、微软未来四年将投资50亿美元到物联网上,收购Express Logic是该战略的一部分。 3、ThreadX的产品涵盖了各种领域,包括NASA的多个太空探测项目,飞机自动驾驶仪系统,火星侦察轨道器等。 4、ThreadX及其所有中间件的安全认证等级,至今没有一款小型RTOS可以与其匹敌。 (1)医疗 - FDA510(k),IEC-62304 Class C,IEC-60601,ISO-14971 (2)工业 - UL-1998,IEC-61508 SIL 4 (3)运输/铁路 - EN50128 SIL 4,BS50128, 49CFR236,IEC-61508 (4)航空航天设备 - DO-178B,ED-12B,DO-278 (5)汽车 - IEC-61508 ASIL D (6)核应用 - IEC-61508 (7)家电 - UL/IEC 60730/60335 各种安全等级基本都达到了最高。 像工业级安全认证IEC61508,ThreadX满足最高等级SIL4,而SafeRTOS,embOS,uCOS-II都只是SIL3。 5、github地址:https://github.com/azure-rtos 6、官网地址:https://azure.microsoft.com/zh-cn/services/rtos/#overview 随着uCOS和ThreadX全家桶都开源,其它RTOS影响是巨大的,还没有开源的,可能也要加入开源大浪了。
3.9.0是源码版本,可以看到全部源码,也方便学习;后续的版本都是提供lib库文件,不再提供源码了。
笔记一: 今天粗略的看了一下周立功关于uc/osII在lpc2104上的移植方面的说明,这之中印象最深的应该是irq中断和软中断方面的处理,由于arm芯片的特殊性(拥有7种处理器模式),即每种处理器模式都有自己的堆栈,这样在处理堆栈的时候就会相应的麻烦一些。 在 响应异常时,该移植计划在初始代码里面比在没有操作系统的初始代码多了irq的处理,移植里面的irq处理多了由汇编语言编写的对任务环境的保存,没操作 系统的中的任务环境的保存都是由在产生irq中断是用c语言声明的__irq关键字来完成了,移植中irq中断不能采用__irq关键字,因为c语言不能 保证堆栈结构,而uc/osII必须要保证堆栈结构。除此之外,相对于没操作系统的初始代码,基本上是没有什么改变。 在uc/osII的任务切换 中,采用了arm里面的软中断指令swi来执行,对于非中断性的任务切换(如挂起和等待信号量的时候)uc/osII是采用了宏os_task_sw() 来执行的,然后联系到osctxsw()函数来完成任务切换,而遇到中断情况时在返回是需要任务切换是则采用了osintctxsw()来执行的,在周立 功的移植当中,他把osctxsw()与osintctxsw()合二为一了,统一采用osintctxsw()来实现。之所以这样搞的原因是任务进行切 换的时候,都必须进入软中断的状态,而对于软中断的异常响应代码已经将任务的环境变量进行了保存,从而也不需要像osctxsw()里面规定的那样对将环 境变量进行保存。 这是我看今天看了移植说明后所理解的东西,当然还得细致的对代码进行分析,特别是osintctxsw()代码的分析,虽然移植的代码大体是遵从了uc/osII的编码规范,但对于arm的多种处理器模式移植代码有特别的改变,以实现cpu时间和ram的利用。
ucos是一款在嵌入式系统上应用的实时操作系统,为了调试和学习(我们部门负责DSP、MCU、ARM到服务器的各种程序),有必要再windows下面模拟运行,我在一个德国网站上找到了一份移植过的代码,经过我的小小修改,已经可以用VS2010和Dev-C++(MinGw编译器)上编译运行。
之前推出了H7-TOOL的RTOS Trace功能,已经支持RTX5,ThreadX,uCOS-III,uCOS-II和FreeRTOS,特色是不需要目标板额外做任何代码,实时检测RTOS任务执行情况,支持在线和脱机玩法,效果是下面这样的:
周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 视频版: https://
从ThreadX开源那会起,就一直想深入研究这个系统,因为实在是太强了,所以还是非常想通过教程的形式推荐给大家。
从ThreadX开源那会起,就一直想深入研究这个系统,因为实在是太强了,所以还是非常想通过教程的形式推荐给大家。 但这个里面有个很大的问题,开源不等于免费,但我依然决定还是做教程,即使是他们后期没有免费让厂家使用,我清晰的记得当时的想法很简单,不能老是守在自己的一亩三分地,得走出舒适区,没有什么能比学习超高质量代码能更加提高自己了。这一坚持就是6个月,几乎每次周报都会给大家介绍本周的进展,其中GUIX的研究到了近期才有所突破,成功打通字库,图库和主题存储到QSPI Flash和标准SPI Flash的各种花式玩法,真是太不容易了。。。其实早期emWin的研究也这样的,而且还没有源码,各种玩法真是一点一点抠出来的,不断的测试观察现象来推理工作机制。现在大家很多看起来简单的操作,当时花了很多时间去研究。 按照预定计划,这个月底出FileX首版教程,下个月出NetX教程。 最后想说的是,对于我自己来说,非常喜欢倒腾各种RTOS,从uCOS-II,uCOS-III,RTX4,FreeRTOS,embOS到RTX5,而且板子配套的例子中也是各种RTOS的花式玩法案例。但是这次ThreadX来了,小型RTOS的巅峰之作,再次激起了深入涉猎的欲望。不把它研究透彻了,誓不罢休。学习下这种新的设计理念,真的是太有必要。
往期周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 2022年最后一期周报
说明: 1、emWin底层中最重要的一个优化就是16bpp绘制,特此为其增加DMA加速,已经支持RA8875和ili9488。 2、使用中务必将emWin任务设置为除了空闲任务,统计任务以外的最低优先级,这样就可以有效的发挥DMA的优势,CPU可以解放出来处理其他任务。 操作说明: 1. 所有界面支持按键操作 (1)K2按键用于控件焦点的切换,切换时,所选择的控件会出现浅色边框 (2)K3按键用于进入下一个界面 (3)摇杆的OK键用于选择相应控件后,触发控件所对应的的操作。 2. 如果使用电阻触摸操作的话,请运行V5开发板emWin教程第三章中的触摸校准程序,此程序会将触摸参数保 存到EEPROM中,然后再运行此工程即可。电容屏无需校准。 3. 采用触摸方式操作界面时,如果进入到没有按钮控件的界面时,可以点击屏幕中间部分进入下一页。 4. 界面大小自适应主流分辨率,比如480*272,800*480,480*320。 注意事项: RTX版的例子使用MDK4.74,其它uCOS-III和FreeRTOS不限制,只要支持F407即可。 例程下载:
https://www.bilibili.com/video/BV1ss4y1f7MV
最近项目开发需要用到ucos,之前有听说过,但没用过,之前一直从事的与Linux相关的开发工作,基于应用的学习,所以本文偏向于应用的认知,只具备以下的认知即可进行开发啦,OS,其实都差不多。
一、背景知识: (1)中断延迟:从中断触发到执行中断服务程序的第一条指令这段时间就是中断延迟时间。
周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 【实战技能视频】基于硬件垂
这25个安全漏洞被统称为BadAlloc,是由内存分配整数溢出( Integer Overflow)或环绕错误(Wraparound)引起的。攻击者可以利用这些漏洞导致系统奔溃,并在受感染的IoT和OT系统上远程执行恶意代码。
论坛原始地址(持续更新):http://www.armbbs.cn/forum.php?mod=viewthread&tid=99514 第14章 ThreadX调度锁,任务锁和中断锁(调
事件是一种实现任务间通信的机制,主要用于实现多任务间的同步,但事件通信只能是事件类型的通信,无数据传输。与信号量不同的是,它可以实现一对多,多对多的同步。即一个任务可以等待多个事件的发生:可以是任意一个事件发生时唤醒任务进行事件处理;也可以是几个事件都发生后才唤醒任务进行事件处理。同样,也可以是多个任务同步多个事件。
队列又称消息队列,是一种常用于任务间通信的数据结构,队列可以在任务与任务间、中断和任务间传递信息,实现了任务接收来自其他任务或中断的不固定长度的消息,任务能够从队列里面读取消息,当队列中的消息是空时,读取消息的任务将被阻塞,用户还可以指定阻塞的任务时间 timeout,在这段时间中,如果队列为空,该任务将保持阻塞状态以等待队列数据有效。当队列中有新消息时,被阻塞的任务会被唤醒并处理新消息;当等待的时间超过了指定的阻塞时间,即使队列中尚无有效数据,任务也会自动从阻塞态转为就绪态。消息队列是一种异步的通信方式。
说明: 1. 开发板Web服务器的设计可以看我们之前发布的史诗级网络教程:链接。 2. 需要复杂些的Web设计模板,可以使用我们V6开发板发布的综合Demo:链接。 3. 教程中使用的是花生壳免费版,免费版仅支持电信用户,每个月1GB的流量,实际测试几天,稳定性还行。收费版没有这些限制。 4. 现在已经用了快两年的花生壳收费版,比较稳定,基本没有死机现象。 5. 不管是免费版本的花生壳还是收费版的,有时候会提示需要实名认证,可以不用管。现在还没有强制必须执行。如果长期使用的话,建议做一下认证,认证过程也比较简单。 6. 注册了花生壳后会免费给一个域名,通过这个域名配合花生壳就可以实现内网透传了,无需公网IP,现在由于IPv4地址资源枯竭,运营商给客户的基本都是内网IP。 7. 利用花生壳,可以通过手机或者电脑很方便的访问开发板建立的Web服务器,从而可以做一些有意思的外网远程监控。 =================================== 专题教程下载:
最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第35章 STM32F407的FSMC总线应用之驱动AD760
写在前面 最近的更新频率有些慢,因为有许多东西在网上是有大量资料的,所以我想尽量多写一点带有思考性的,或者是遇到的一些问题,少写一些同质化的东西。另外,我也尽量多写一些项目实战相关的东西,争取每个礼拜至少一次更新。
本章教程为大家讲解uCOS-III操作系统版本的二代示波器实现。主要讲解RTOS设计框架,即各个任务实现的功能,任务间的通信方案选择,任务栈,系统栈以及全局变量共享问题。同时,工程调试方法也专门做了说明。
摘要 : 数据手套在人机交互中提供了一种有效的人机交互手段,从数据手套的理论出发,本论文利用一些硬件设备以及软件开发环境,设计了一款可以与机械臂、虚拟手等终端交互的数据手套。硬件设备包括弯曲度传感器、MPU6050六轴传感器、HC-05蓝牙串口通信模块、TFT显示屏、STM32F103最小系统开发板,数据手套软件开发平台为Keil uVision5,所用的开发语言为C语言,在系统调试的时候用到了匿名四轴上位机和串口调试助手,用来对MPU6050六轴传感器和弯曲度传感器进行调试,此外在整个系统中移植了UCOS-II嵌入式实时操作系统,保证了数据在传输时的实时性和高效性。实现了数据手套对五轴机械臂的控制以及人手到虚拟手的动作映射。
一些初学者,以及刚工作不久的工程师都有这样的疑惑,今天就来分享一下这个话题:该不该用RTOS?
H7-TOOL发布固件V2.22, 增加FreeRTOS/uCOS2 Trace,加强RTT和CAN助手,脱机烧录增加比亚迪,上海芯圣51, TI, S32K3, 钜泉光电等 ---- H7-TO
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第76章 STM32H7的FMC总线应用之驱动AD7606
本章节为大家讲解高效的事件触发框架实现方法,BSD Socket编程和后面章节要讲解到的FTP、TFTP和HTTP等都非常适合使用这种方式。实际项目中也推荐大家采用这种方式,不过仅适用于RTOS环境,比如RTX、FreeRTOS或者uCOS-III均可,裸机方式不支持。
如果在ucos中使用浮点数,尽量使用__align(8) 对齐,否则串口打印浮点数会乱码,比如:
我只是来分享自己的UCOS学习资料的,,顺便叨叨 ,自己是看着任哲的书一点一点学的,,, 自己大四的时候学的UCOSii,,但是好像学了之后,就只有一次真正使用过它,,在使用网络模块ENC28J60的时候..... 对于当时自己还没学的时候,一直很纳闷什么是操作系统哈,,是什么原因让人们去编写操作系统程序,,到底是为了解决什么问题,而写的操作系统 其实最贴近人的例子就是自己的电脑啦,,,和自己的没有操作系统的单片机程序(俗称"裸机")做比较 自己的电脑能一边看视频,一边听歌,一边打字,一边聊天,一边下东西.
第1期:ATM机 配套例子: V6-900_STemWin提高篇实验_ATM机(uCOS-III) V6-901_STemWin提高篇实验_ATM机(FreeRTOS)
配套例子: V6-902_STemWin提高篇实验_酿造机过程演示(uCOS-III) V6-903_STemWin提高篇实验_酿造机过程演示(FreeRTOS)
我们在一个项目小组做一个相对较复杂的工程时,意味着你不再独自单干。而是和小组成员分工合作,这就要求小组成员各自负责一部分工程。比如你可能只是负责通讯或者显示这一块。这个时候,你就应该将自己的这一块程序写成一个模块,单独调试,留出接口供其它模块调用。最后,小组成员都将自己负责的模块写完并调试无误后,由项目组长进行组合调试。像这些场合就要求程序必须模块化。模块化的好处是很多的,不仅仅是便于分工,它还有助于程序的调试,有利于程序结构的划分,还能增加程序的可读性和可移植性。
配套例子: V6-908_STemWin提高篇实验_监护仪界面设计(uCOS-III) V6-909_STemWin提高篇实验_监护仪界面设计(FreeRTOS)
领取专属 10元无门槛券
手把手带您无忧上云