51单片机-STM32-RTOS
文章平均质量分 77
51单片机-STM32-RTOS
小熊coder
机载系统和机载软件开发与适航
展开
-
配置CLion用于STM32开发
最近有用到。原创 2024-07-06 22:56:06 · 1678 阅读 · 0 评论 -
VxWorks环境搭建与学习:vxworks6.8和workbench3.2
VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。良好的持续能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据一席之地。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。原创 2024-07-06 22:20:54 · 2838 阅读 · 0 评论 -
嵌入式开发中的硬件滤波器设计和软件滤波设计
各种传感器信号多多少少会携带一些噪声信号,那么通过滤波器就能够更好的降低和去除噪声,还原真实有用信号。滤波器是一个电路,其去除或“过滤掉”频率分量的特定范围。换句话说,它将信号的频谱分离为将要通过的频率分量和将被阻隔的频率分量。如果您对频域分析没有太多经验,您可能仍然不确定这些频率成分是什么,以及它们如何在不能同时具有多个电压值的信号中共存。让我们看一个有助于澄清这个概念的简短例子。假设我们有一个由完美的5kHz正弦波组成的音频信号。原创 2023-08-27 20:20:41 · 2474 阅读 · 1 评论 -
RTOS不同任务共享全局变量问题
既然不修改 update_flag,并且 update_flag 一开始的值为 0,那么 update_flag 就是一个不会改变的值,当然就是死循环!所以,在这种情况下,就需要程序员显式的告诉编译器,update_flag 是一个会发生改变的值,所以不要尝试做这样的优化。根据之前的分析,在添加的这段代码中,while() 循环中有其他代码读取了这个变量,编译后的代码会从内存中再次读取她的值。群友在群里咨询的一个问题:Freertos 里高优先级的任务中改变了全局变量值,低优先级的任务中循环等待值的改变;原创 2023-07-03 22:54:26 · 2540 阅读 · 0 评论 -
终于把系统调用给整明白了~
*本篇文章主要阐述以下两部分:**1.什么是系统调用?2.系统调用的实现?主要以Linux 操作系统和IA-32处理器举例,高级语言以C语言为例,同时也会掺杂一些其它操作系统和处理器。原创 2023-07-03 22:49:21 · 1322 阅读 · 0 评论 -
嵌入式软件兼容性有哪些注意事项
已剪辑自: https://mp.weixin.qq.com/s/sxiyEs7rFBJgNXdzMWAoSA网上有许多关于代码的段子,比如:想要不被别人代替,代码要越乱越好。当版本迭代的时候,经手这个项目的人通常会崩溃,如果这个时候,你还没有离职,你也一样会崩溃,因为你可能已经不认识自己的代码了。项目系统总体设计阶段,应尽可能地考虑到未来可以遇见的情况,覆盖到尽可能多的业务扩展。项目虽然分阶段开发,各个阶段完成的功能都不一样,总体设计要指向最终的需求。原创 2023-07-03 22:35:56 · 460 阅读 · 0 评论 -
嵌入式中实现应用层和硬件层分层管理
以STM32为例,打开网络上下载的例程或者是购买开发板自带的例程,都会发现应用层中会有stm32f10x.h或者stm32f10x_gpio.h,这些文件严格来时属于硬件层的,如果软件层出现这些文件会显得很乱。使用过Linux的童鞋们肯定知道linux系统无法直接操作硬件层,打开linux或者rt_thread代码会发现代码中都会有device的源文件,没错,这就是驱动层。原创 2023-07-03 22:18:05 · 537 阅读 · 0 评论 -
简单介绍虚拟化技术vs容器化
笔者对虚拟化不太了解,也没有具体使用过,基本都是从网上了解的,只是简单说一下个人理解。虚拟化是一个广泛的定义和概念,核心是对资源的抽象,是把有限的、固定的资源根据不同需求进行重新规划以达到最大利用率的策略,就叫做虚拟化。虚拟化依赖软件来模拟硬件功能并创建虚拟计算机系统。这使 IT组织能够在单个服务器上运行多个虚拟系统以及多个操作系统和应用。由此带来的好处包括规模经济和更高的效率。简单来讲,虚拟化是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。原创 2023-06-24 22:00:56 · 623 阅读 · 0 评论 -
智能汽车虚拟化(Hypervisor)技术详解
在众多的资源隔离技术中,虚拟化是安全可靠、弹性灵活的优选方案,是软件定义汽车的重要支撑技术。某厂家智能座舱域控制器产品,如图 9 和图 10 所示,基于高通 8155、瑞萨 R-Car H3 处理器,采用 QNX Hypervisor,搭载 QNX Host、 Android P/R/S Guest OS, 可配置输出最多 6 块高清大屏独立显示,集成了娱乐系统、液晶仪表、车身控制、DMS、APA 等功能,支持独立四音区、多屏互动和音视频分享,集成度高,在长城、长安、宇通客车等多款车型上适配量产。原创 2023-06-24 21:55:01 · 2252 阅读 · 0 评论 -
虚拟化技术的分类及介绍
宿主模型当然也有缺点,由于物理资源由宿主机操作系统控制,VMM得要调用宿主机操作系统的服务来获取资源进行虚拟化,而那些系统服务在设计开发之初并没有考虑虚拟化的支持,因此,VMM虚拟化的效率和功能会受到一定影响。此外,在安全方面,由于VMM是宿主机操作系统内核的一部分,因此,如果宿主机操作系统内核是不安全的,那么,VMM也是不安全的,相应地运行在虚拟机之上的客户机操作系统也是不安全的。这一类虚拟机运行的是进程级的作业,所不同的是这些程序所针对的不是一个硬件上存在的体系结构,而是一个虚拟体系结构。原创 2023-06-24 21:51:47 · 1211 阅读 · 0 评论 -
嵌入式软件可靠性设计的编程要点?
这里声明了拥有30个元素的数组,不幸的是for循环代码中误用了本不存在的数组元素SensorData[30],但C语言却默许这么使用,并欣然的按照代码改变了数组元素SensorData[30]所在位置的值, SensorData[30]所在的位置原本是一个LCD显示变量,这正是显示屏上的那个值不正常被改变的原因。每帧字节数越多,发生误码的可能性就越大,无效的数据也会越多。这是因为MDK的整数是按照补码存储的,正数的补码与原码相同,在这种情况下,原码和补码是一致的,不但起不到冗余作用,反而对可靠性有害。原创 2023-05-02 10:27:55 · 287 阅读 · 0 评论 -
嵌入式中程序错误如何处理?
可将出错字符串和其它信息组合输出到用户界面,或保存到日志文件中,如通过fprintf(fp, “somecall failed(%s)”, strerror(errno))将错误消息打印到fp指向的文件中。若(a)调用这些函数时不带终止状态,或(b)main函数执行了无返回值的return语句,或© main函数未声明返回类型为整型,则该进程的终止状态未定义。该函数首先输出由msg指向的字符串(用户自己定义的信息),后面紧跟一个冒号和空格,然后是当前errno值对应的错误类型描述,最后是一个换行符。原创 2023-04-18 22:56:36 · 361 阅读 · 0 评论 -
一文搞懂交叉编译,Windows和Linux的交叉编译
在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念:体系结构(Architecture)、操作系统同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例来说,我们常说的x86Linux平台实际上是Intel x86体系结构和Linux for x86操作系统的统称;原创 2023-04-05 19:42:54 · 10395 阅读 · 2 评论 -
单片机中常用的轻量级校验算法
通过MD5算法进行加密,文件就可以获得一个唯一的MD5值,这个值是独一无二的,就像我们的指纹一样,因此我们就可以通过文件的MD5值来确定文件是否正确,密码进行加密后也会生成MD5值,论坛就是通过MD5值来验证用户的密码是否正确的。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。CRC有多种变体,比如:CRC-1、 CRC-5-USB、 CRC-8、 CRC-16、 CRC-32、 CRC-64等。原创 2023-04-01 23:58:30 · 312 阅读 · 0 评论 -
嵌入式 RTOS 程序设计的 5 个实战技巧
一旦创建了数据流图,就很容易开始对应用程序进行编码。这无疑会在一段时间内顺利进行,但我发现如果开发人员不花时间预先仔细定义任务和消息接口,它可能会导致返工。虽然数据流图通常显示数据如何通过应用程序传播,但它并不一定要求定义数据结构。目标是预先检查每个消息队列,然后为这些消息构建结构。这很重要,因为它将定义消息的外观,而且还将有助于任何底层模块的接口的外观。阀门 ID阀门状态阀门所需的时间定义阀门状态的面罩准时清单归根结底,做事的方式总是不止一种,一种不一定比另一种更好。原创 2023-04-01 23:55:37 · 297 阅读 · 0 评论 -
同样是软件开发,为什么没有嵌入式软件架构师
已剪辑自: https://mp.weixin.qq.com/s/mKQ_d8mfau-JB04v-_coWg大家好,今天分享一篇关于嵌入式软件架构师的文章,文中的 “我” 为作者本人。希望对从事嵌入软件开发的你有所启发。我从事嵌入式软件开发有6、7个年头,bsp,驱动,应用软件,android hall,framework 等都有涉猎。平时除了关注嵌入式行业的发展,也多少对 Web,后台服务端,分布式等方向的技术有一些关注。近期有萌生换个行业方向的想法,想做做后台服务器相关的开发,由于之前工作中并没有这方原创 2023-03-19 22:32:37 · 516 阅读 · 1 评论 -
代码是如何控制硬件的?
在单片机内部IO寄存器的数据口连接到D触发器的D管脚(实际上还有其他电路,用来增大驱动能力等),D管脚下面有小三角的管脚是时钟信号管脚,当时钟信号上升沿来临时,D触发器D端口的数据将输出到Q端口,Q端口是连接着外部的管脚的。我们是用电脑的键盘来输入的指令,每一个指令都对应一个ASCII码,而这里的ASCII码就是有序的电压的高低(或电流的有无,下面只提电压的高低),即我们输入的是电压的高低,你所看到代码是这些电压的高低控制显示器所显示的图像,其实电脑也不知道它是什么,只知道这样显示。那什么又是逻辑实现。原创 2023-03-19 22:18:59 · 785 阅读 · 0 评论 -
嵌入式开发:周期调度和代码执行时间理解
已剪辑自: https://mp.weixin.qq.com/s/gaT7D1IgkBxxEOj-DNaLPw汽车嵌入开发中,我们常常听到这样的名词:1ms Task、5ms Task、10ms Task…试问:"1ms Task是说这个任务要执行1ms吗?"本文,带着这个疑问,展开讨论。程序员按照需求,负责写代码,这些代码最终被CPU执行,进而控制执行器,以此达到预期功能。如果想要达到预期功能,对应的功能代码就要被CPU执行,多长时间执行一次呢?:这取决于具体的功能。原创 2023-03-19 22:04:25 · 1158 阅读 · 0 评论 -
RTOS应用中的几种调度策略
但使用RTOS有许多优势,例如简化应用集成,支持任务抢占调度,当开发人员使用复杂的32位微控制器,且可以获取足够的Flash和RAM空间时,使用RTOS开始变得有意义。调度程序基于时钟监控任务时间,任务处于相关优先级,按照先进先出的原则执行分配到的时间片,时间到了,即使当前任务还没有完成,任务也将CPU时间传递给下一个任务。任务按优先级排序,并且是事件驱动类型的,一旦正在运行的任务完成,或者任务主动调用OS服务放弃CPU,就绪运行的优先级最高的任务才可以获得CPU使用权。任务切换比中断占用更多的时间。原创 2023-03-07 17:50:11 · 1091 阅读 · 0 评论 -
数十种嵌入式 C 语言代码优化的经验和方法
在最近的一个项目中,我们需要开发一个运行在移动设备上但不保证图像高质量的轻量级JPEG库。期间,我总结了一些让程序运行更快的方法。在本篇文章中,我收集了一些经验和方法。应用这些经验和方法,可以帮助我们从执行速度和内存使用等方面来优化C语言代码。尽管在C代码优化方面有很多的指南,但是关于编译和你使用的编程机器方面的优化知识却很少。通常,为了让你的程序运行的更快,程序的代码量可能需要增加。代码量的增加又可能会对程序的复杂度和可读性带来不利的影响。原创 2023-03-07 16:58:21 · 670 阅读 · 0 评论 -
基于RTOS的软件开发理论
软件开发,大多数人依靠的是经验,缺乏理论,比如遇到问题知道怎样改可以修复问题,但不明白深层原因。有些阶段,选择高校的理论教程读读,比网红博主拼凑的技术总结,更能醍醐灌顶,提高水平。。原创 2023-02-19 21:12:35 · 483 阅读 · 0 评论 -
嵌入式开发打印,我放弃了printf
一个功能全面的printf、sprintf、snprintf等等都会有较大的代码量,同样标准C库的也是一样的,对于一些资源比较紧张的MCU等可能一个标准函数就占用了一大半的Flash等ROM区,一个库函数实现比主体代码还耗资源,这样在嵌入式中是不应该的。对于snprintf,可以在标准库源码上进行相关功能的删减即可,由于篇幅有限,这里就不过多介绍了,网络上资源也是一大把,感兴趣的朋友可以自行搜索一下。需要注意一点,snprintf返回的是预写字符串长度,而非最终写入到strbuff中的字符个数。原创 2023-01-19 21:19:42 · 664 阅读 · 0 评论 -
嵌入式开发既要代码小,又想速度快,该如何优化?
所谓程序模块化,不仅是要将整个程序划分成若干个功能模块,更重要的是,还应该注意保持各个模块之间变量的相对独立性,即保持模块的独立性,尽量少使用全局变量等。在程序中一般不进行非常复杂的运算,如浮点数的乘除及开方等,以及一些复杂的数学模型的插补运算,对这些即消耗时间又消费资源的运算,应尽量使用查表的方式,并且将数据表置于程序存储区。在程序化设计过程中,对于经常使用的一些常数,如果将它直接写到程序中去,一旦常数的数值发生变化,就必须逐个找出程序中所有的常数,并逐一进行修改,这样必然会降低程序的可维护性。原创 2023-01-19 21:07:28 · 481 阅读 · 0 评论 -
RT-Thread操作系统的FreeRTOS兼容层
这是一个针对RT-Thread国产操作系统的FreeRTOS操作系统兼容层,可以让原有基于FreeRTOS操作系统的项目快速、无感地迁移到RT-Thread操作系统上,实现在RT-Thread操作系统上无感的使用FreeRTOS的API,同时可以使用RT-Thread的丰富组件。项目基于FreeRTOS V10.4.6版本。1.1 RT-Thread的其他RTOS兼容层。原创 2023-01-19 20:52:17 · 700 阅读 · 0 评论 -
如何专业地命名嵌入式软件版本?
*希腊字母版本号(rc):**此版本号用于标注当前版本的软件处于哪个开发阶段,当软件进入到另一个阶段时需要修改此版本号。该版本相对于α版已有了很大的改进,消除了严重的错误,但还是存在着一些缺陷,需要经过多次测试来进一步消除,此版本主要的修改对象是软件的UI。**日期版本号(20201228):**用于记录修改项目的当前日期,每天对项目的修改都需要更改日期版本号。此版本表示该软件在此阶段主要是以实现软件功能为主,通常只在软件开发者内部交流,一般而言,该版本软件的Bug较多,需要继续修改。原创 2022-12-26 22:59:30 · 439 阅读 · 0 评论 -
ARM9和STM32什么关系?
经典的 s3c2410 其实就是一款基于 ARM920T 内核的处理器,继S3C2410之后的S3C2416、 S3C2440等可以说学习嵌入式Linux的同学都知道他们的存在,包括市面上很多Linux开发板和资料都是基于这几款处理器而设计。**2.处理器架构(系列)**自ARMv6架构开始,ARM根据处理器的性能和应用场景把处理器进一步划分为:Cortex-M、 Cortex-R、 Cortex-A三种不同类别的处理器系列。ARM9是早期的ARM处理器,STM32算是这些年流行的处理器。原创 2022-12-18 19:53:40 · 1390 阅读 · 0 评论 -
代码是如何控制硬件的?
简单来说,就是软件指令通过操作寄存器,控制与、或、非门搭建的芯片电路,产生、保存高低电平信号,实现相应的逻辑,最终通过IO、串口等输出。要想更清楚的了解软件控制硬件的原理,就要明白cpu的框架及工作原理。原创 2022-12-10 23:23:56 · 9204 阅读 · 1 评论 -
单片机开发中,传感器的数据处理算法
已剪辑自: https://mp.weixin.qq.com/s/Yy7ysMXoeokW2g_yaqsw3w。这个算法,保留传感器数据流中最近的K个数据,返回它们的平均值。加权平滑:平滑和均衡传感器数据,减小偶然数据突变的影响。抽取突变:去除静态和缓慢变化的数据背景,强调瞬间变化。简单移动平均线:保留数据流最近的K个数据,取平均值。下面,具体介绍一下这3种处理方法。原创 2022-12-10 22:48:13 · 735 阅读 · 0 评论 -
STM32 | hex文件、bin文件、axf文件的区别?
在STM32开发中,经常会碰到hex文件、bin文件与axf文件,这些都是可以烧写到板子里运行的文件。这三个文件有什么区别呢?axf文件、hex文件与bin文件都是可以运行在我们的stm32上的,它们都存储了编译器根据源代码生成的机器码,根据应用场合的不同,它们又有所区别。axf文件是编译默认生成的文件,不仅包含代码数据,而且还包含着调试信息,在MDK里进行debug调试用的就是这个文件。命令窗口也是可以通过命令来编译我们的STM32程序的(前提是配好环境变量,否则得到编译工具所在的路径下进行编译)。原创 2022-12-10 22:38:15 · 3527 阅读 · 0 评论 -
单片机硬件和软件延时、RTOS相对延时和绝对延时
已剪辑自: https://mp.weixin.qq.com/s/-RPLQn4KO9Aqu1fpfZeOKA前不久有个读者在问关于延时的问题,大概就是问:软件延时和硬件延时是啥意思?做项目时他俩有什么区别?今天就来讲讲关于硬件延时和软件延时的内容,以及它们的区别。延时的种类很多,先给大家普及一下延时相关概念和分类。指利用具有计数功能的硬件进行延时。比如:定时器(Timer)、 实时时钟(RTC)、 系统滴答定时器(SysTick)等具有计数功能的硬件。相对硬件延时而言,软件延时就是写一段软件代码,通过消原创 2022-12-06 21:07:17 · 1369 阅读 · 0 评论 -
硬件接口和软件接口
首先,让我们看看接口的概念。接口一词的英文原文是interface,原本就是一个计算机科学词汇。韦伯词典中的解释:其中名词形式的解释为:“独立系统之间的边界,信息跨越边界传送”。用户界面:人机界面(user interface,UI)软件接口:代码之间、软件硬件之间的接口(software interface)硬件接口:线缆、插头、插座等等如果按动词解释,则是指通过接口进行连接与信息交换的行为。一般1和2都会视为软件系统的接口,本文着重介绍的也是这两类接口技术的发展。原创 2022-11-30 11:02:01 · 8936 阅读 · 0 评论 -
硬件定义软件?还是,软件定义硬件?
指令是软件和硬件的媒介,指令的复杂度决定了系统的软硬件解耦程度。按照单位计算(指令)的复杂度,处理器平台大致分为CPU、协处理器、GPU、FPGA和ASIC。从左往右,单位计算越来越复杂,灵活性越来越低。任务在CPU运行,则定义为软件运行;任务在协处理器、GPU、FPGA或ASIC运行,则定义为硬件加速运行。原创 2022-11-30 10:39:49 · 1400 阅读 · 0 评论 -
软件和硬件之间的数据交互接口
传统的非硬件缓存一致性总线,是需要软件驱动显式的控制设备来进行数据交互的。通过梳理软硬件接口的演进,逐步给出软硬件接口的定义。原创 2022-11-30 10:36:17 · 6314 阅读 · 0 评论 -
软件和硬件中的调用
图1 分层的API调用。原创 2022-11-30 10:33:53 · 2260 阅读 · 0 评论 -
基于优先级的时间片轮转调度算法(C语言实现)
已剪辑自: http://www.demodashi.com/demo/15341.html。原创 2022-11-26 18:38:02 · 2675 阅读 · 2 评论 -
嵌入式开发中的防御性C语言编程
嵌入式产品的可靠性自然与硬件密不可分,但在硬件确定、并且没有第三方测试的前提下,使用防御性编程思想写出的代码,往往具有更高的稳定性。防御性编程首先需要认清C语言的种种缺陷和陷阱,C语言对于运行时的检查十分弱小,需要程序员谨慎的考虑代码,在必要的时候增加判断;防御性编程的另一个核心思想是假设代码运行在并不可靠的硬件上,外接干扰有可能会打乱程序执行顺序、更改RAM存储数据等等。原创 2022-11-21 21:33:14 · 566 阅读 · 0 评论 -
分享一个通用的嵌入式驱动层
https://mp.weixin.qq.com/s/bzPg5SremHDeIiguzvUVFA原创 2022-11-17 22:32:22 · 565 阅读 · 0 评论 -
玩RTOS这么久,一问原子操作,蒙了~
指令的执行不能被打断,内存的访问也需要保持没有干扰。LOCK前缀只能附加在下面的指令之前,并且只适用于那些目标操作数是内存操作数的指令格式:ADD,ADC,AND,BTC,BTR,BTS,CMPXCHG,CMPXCH8B,CMPXCHG16B,DEC,INC, NEG,NOT,OR,SBB,SUB,XOR,XADD和XCHG。在ARM架构下,没有LOCK#指令,其具体实现如下:## ARMv6之前 早期的ARM架构是不支持SMP的,这些单核架构的CPU实现原子操作的方式就是通过关闭CPU中断来完成的。原创 2022-11-17 22:28:20 · 768 阅读 · 0 评论 -
单片机ADC常见的几种滤波方法
已剪辑自: https://mp.weixin.qq.com/s/ObtCPcxnBmpr3mR7NPkB7Q。然而,我们单片机ADC采集的模拟量基本都会经过“滤波”处理才能使用,下面给大家分享一些常见的ADC滤波算法。如今传感器的种类越来越多,数量也越来越多,而这些传感器很多都会用到模拟量,模拟量就离不开ADC。原创 2022-11-17 22:19:55 · 932 阅读 · 0 评论 -
嵌入式5个RTOS程序设计建议
一旦创建了数据流图,就很容易开始对应用程序进行编码。这无疑会在一段时间内顺利进行,但我发现如果开发人员不花时间预先仔细定义任务和消息接口,它可能会导致返工。虽然数据流图通常显示数据如何通过应用程序传播,但它并不一定要求定义数据结构。目标是预先检查每个消息队列,然后为这些消息构建结构。这很重要,因为它将定义消息的外观,而且还将有助于任何底层模块的接口的外观。阀门 ID阀门状态阀门所需的时间再说一次,它可能会期待:归根结底,做事的方式总是不止一种,一种不一定比另一种更好。原创 2022-11-07 22:57:57 · 419 阅读 · 0 评论