嵌入式开发星球
以培养优质嵌入式工程师为目的,持续分享优质嵌入式内容;答疑解惑,获取资源,可添加博主微信:18270720391;关注公众号:“嵌入式开发爱好者”,输入:“1024” 领取资料。
展开
-
嵌入式鸿蒙系统开发语言与开发方法分析
可复用的UI单元,可组合其它组件,如上述被@Component装饰的struct Hello。UI描述:声明式的方法来描述UI的结构,例如build()方法中的代码块。原创 2024-09-10 10:56:36 · 1308 阅读 · 0 评论 -
嵌入式Openharmony系统构建与启动详解
旨在构建统一的驱动架构平台,为驱动开发者提供更精准、更高效的开发环境,力求做到一次开发,多系统部署。为了实现这一目标,OpenHarmony 驱动框架:采用c语言面向对象编程模型构建,通过平台解耦、内核解耦,来达到兼容不同内核,统一平台底座的目的,从而帮助开发者实现驱动一次开发,多系统部署的效果。这个描述至少包含了以下3个关键的信息:原创 2024-09-08 23:09:52 · 3096 阅读 · 0 评论 -
嵌入式OpenHarmony源码基本原理详解
在3.0版本中,Lite系统(即轻量系统和小型系统)、标准系统各有一套独立的构建入口和上层的构建流程,但在3.2版本中,两者开始互相借鉴,取长补短并实现了融合统一;在3.0 版本中,标准系统的启动流程相对比较简单,但在3.1版本中,则引入了Randisk和TwoStages机制,标准系统的启动流程因此变复杂了,但安全性得到了提升;OpenHarmony 驱动框架的部分数据结构定义和局部的启动流程,在3.1版本中也有了不少调整和重构。原创 2024-09-08 12:02:53 · 566 阅读 · 0 评论 -
嵌入式鸿蒙系统openharmony编译方法详解
OpenHarmony 是由开放原子开源基金会()孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,基于开源的方式,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展。关于 OpenHarmony开源项目的技术架构、技术特性、系统类型以及详细特征等内容可以进入到 OpenHarmony的Gitee地址进行查看。原创 2024-07-07 22:48:16 · 218 阅读 · 0 评论 -
嵌入式linux系统中动态链接库实现详解
而第二个程序的foo函数为内存地址0x456这个位置,接下来第二个程序开始运行,CPU开始执行foo函数,由于第二个程序的foo函数在0x456,因此我们希望CPU能跳转到这里,但由于动态库中call指令后跟的是0x123这个内存地址,因此CPU执行foo函数时依然会跳转到第一个程序的foo函数。而如果CPU执行第二个程序中的foo函数,那么CPU同样会进行相对跳转,这不过这次跳转到的是第二个程序的got表,然后发现foo的地址是0x456,然后开始执行第二个程序中的foo函数。原创 2024-06-30 09:53:12 · 323 阅读 · 0 评论 -
嵌入式系统中静态库与动态库详解
链接器从表面看实际上是一个打包器,把各种目标文件,也就是你的代码和标准库打包起来,如果还有其它库也是一样的道理,经过链接会生成最终的可执行程序。这时的可执行程序中不再包含完整的动态库代码,而是只有一份参考文献,你可以想象一下,这里肯定保存了两项基本信息,依赖了哪个库,这个库保存在了哪里。由于你实现的加减乘除等函数非常好用,广受其它程序员的欢迎,因此你写的代码渐渐的变成了一种标准,所有程序员都遵循,标准库就是这么诞生的。程序的内存分为代码区、数据区、堆区和栈区,它们的布局是这样的,这里重点看代码区。原创 2024-06-30 09:38:49 · 157 阅读 · 0 评论 -
嵌入式系统中C/C++有仓颉语言对比分析
很多朋友也问我 “要不要入行鸿蒙?” 其实我很难给一个明确的答案,毕竟我也没有充分的调研数据,也不敢随意劝大家入行。“新” 意味着机遇,同样也意味着风险。在你有条件承担风险时,选择拥抱 “新” 没有任何问题,但在没有风险承担能力时,我的建议还是先学好一门主流的编程语言、开发框架、打好计算机基础,然后你再去学新出的编程语言就非常容易了。我还是很看好华为的,也期待国内的操作系统和计算机生态可以更强大。原创 2024-06-24 17:07:08 · 541 阅读 · 0 评论 -
高手学习技术何时开始突飞猛进分享
后来这个学期有点“误入歧途”的意思,入了 Machine Learning 的坑,记得当时花了好几个月刷完西瓜书和吴恩达机器学习课程的讲义(真佩服当时的毅力,都是英文和公式推导),后来想了想,ML/DL这个东西有点玄学,于是毅然决定成为一名做工程的程序员。大一下,转专业到计算机了,开始自学数据结构,算法和C++,部分看完了 数据结构与算法分析,并且把书上的数据结构实现了一遍,记得当时五月份给自己的flag是看完C++ Primer,然后每天上课看,晚饭吃完后也跑去七号楼刷书,最后囫囵吞枣似的看完了大部分。原创 2024-05-11 16:53:17 · 56 阅读 · 0 评论 -
嵌入式系统中AI可以提高开发效率方法
博主日常工作中也会接触到一些 shell 脚本、python 脚本、汇编语言,当看不懂的时候,直接贴给 chatGPT,他给出的解释一般都很合理,这种特殊性的东西百度是搜不到的,但是 chatGPT 可以给出很好的解释,甚至对代码逐行解释,真的很方便很好用。文生视频的 Sora 模型目前普通用户无法使用,但我们能看到 AI 能做的事情越来越多,大家还是要意识到 AI 对工作和日常生活产生的影响,我们要把 AI 用起来,避免自己落后于时代。原创 2024-04-21 23:02:08 · 386 阅读 · 0 评论 -
嵌入式STM32F407CET6移植OpenHarmony系统方法
文件末尾添加:export PATH=~/gcc-arm-none-eabi-10-2020-q4-major/bin:$PATH。编译完成文件输出在LiteOs源码目录下out/STM32F407_ATK_Explorer文件夹中。②点击connect to the target,下方会自动显示识别出来的芯片型号以及flash大小。⑤点击program verify并点击start,等待烧写并校验完成,你就能看到程序正在运行了。,在选择刚才我们说的Huawei_LiteOS.hex文件。原创 2024-04-13 22:18:05 · 252 阅读 · 0 评论 -
做一名嵌入式工程师需要掌握的知识是广还是精?
我用过STC、NXP、NUC、ST、TI等单片机,其实内部资源,最常用的无非就是GPIO、定时器、串口、ADC、IIC、SPI等等,也不多..就像等你做了开发5年以后,突然有一天,对指针是灵魂的理解,恍然大悟,卧槽,原来c语言也能实现面向对象的代码风格。做了单片机开发10年,虽然产品类型一直在变,但如果做多了,会发现,很多都是能够改改复用的,很多都是能够举一反三的。我程序对短按的定义,就是2秒以下,都是短按,2秒以上是长按,然后2秒以后,每个150ms,代表连续长按。原创 2024-04-09 23:41:49 · 387 阅读 · 0 评论 -
嵌入式中基于QT的开源串口调试工具
在开始软件设计之前,我们来简略地分析一下这样一个小软件其要包含的主要内容有哪些。我们认为软件需要如下几个方面的内容:串口参数的配置,我们希望串口号能够自动搜索,而相应的配置参数我们可以选择。发送数据的输入,对于本软件我们需要输入相应的数据以实现命令及消息的发送,所以我们需要设计数据的输入区域以及发送交互按钮等。接收信息的显示,作为调试工具,我们肯定希望能够一目了然地看到接收到目标设备发送过来的消息,所以我们需要一个显示区域来对接收的区域进行显示。原创 2024-04-06 22:44:49 · 286 阅读 · 0 评论 -
嵌入式开发过程中应该养成的习惯!
最近有一些读者来咨询:有什么需要注意的编程好习惯?给大家分享一下。不要被这几个字吓到,官方文档其实都是宝藏。一个成熟的技术诞生,可以没有博客没有书籍,但一定会有一个官方文档,毋庸置疑,它一定。编写官方文档的人,也通常就是这些技术或者软件的开发者,他们是对这些东西最了解的人,所以编写的文档不仅质量非常高,通常内容也都是最新的。因此,官方文档远比网上的各种博客和论坛等更适合入门学习。当我们遇到很多问题和技术细节的时候,认真将官方文档过一遍,你会发现很多问题和认识模糊的地方都会清晰起来。原创 2024-03-26 22:28:37 · 80 阅读 · 0 评论 -
嵌入式C++编程新手容易犯的 10 种编程错误
简单的总结一下 C++ 新手容易犯的一些编程错误,给新人们提供一个参考。原创 2024-02-15 21:48:47 · 923 阅读 · 0 评论 -
嵌入式中《C++之旅》阅读笔记
可以单独对user.cpp 和 Vector.cpp编译,生成.o文件,这是因为上述示例使用了#include操作,预处理器在遇到#include的时候,会将其中的内容完整的拷贝一份到相应的文件,这就导致每个.cpp都有头文件Vector.h的一个副本,代码体积膨胀不说,还增加了编译时间。的隐含意思是在编译阶段求值,对于一些求值操作,如果声明为constexpr,那么会编译器会尝试在编译阶段进行计算求值,如果求值成功,则用结果进行替换。自gcc5.1之后,字符串优化采用了新的机制,即SSO,其为。原创 2024-02-07 08:57:47 · 1088 阅读 · 0 评论 -
嵌入式系统中VSCode配置C/C++环境方法
以上就是对VSCode的介绍,并且配置了C/C++编译环境,后面实例代码都是在此编辑器的基础上进行编写,如果对VSCode感兴趣的小伙伴可以试着安装尝试一下进行开发。如果有对其他语言环境需求的小伙伴可以安装对应的扩展插件。后续我会对markdown编写以及远程链接Linux系统进行编译调试的方法进行介绍,有喜欢的小伙伴可以关注一下。原创 2024-01-31 10:37:52 · 900 阅读 · 0 评论 -
嵌入式Qt中实现http服务接收POST请求
嗨喽,大家好!以下知识点做个简单记录分享给小伙伴们!首先我们来理解几个概念。原创 2024-01-30 11:13:34 · 1182 阅读 · 0 评论 -
嵌入式中Qt5.7.1添加支持openssl方法
一定要选对Qt版本对应的openssl版本,由于开始选的openssl版本不对,导致编译Qt时出现很多错误。然后再把openssl相关的库libssl、libcrypto放在目标板下。将新生成的libQt5NetWork。版本:openssl-1.0.2g。原创 2024-01-29 16:49:54 · 805 阅读 · 0 评论 -
嵌入式中GUI开发选择QT的十大理由
Qt 支持不同的开发语言。2014年4月 ,跨平台的集成开发环境Qt Creator3.1.0发布,同年5月20日发布了Qt5.3正式版,至此Qt实现了对iOS、Android、WP等各平台的全面支持。QT具有完善的接口说明,对每一个类及类中接口和变量,都有详细的定义及说明,除此之外还有详细的示例代码。Qt有着丰富的接口,并且已经做了完美的封装,对开发者来说,十分友好,调用简单。在 Qt 中您可以体验前所未有的开发体验,它的设计开发模块能够让您更好的塑造,提升您的品牌形象,为您的作品达到一个质的跳跃。原创 2024-01-29 16:47:40 · 880 阅读 · 0 评论 -
嵌入式中C++必知必会之基础知识-常用关键(3)
由于union的成员共享同一块内存,最后赋值的成员的值会覆盖之前的值。在任何时候,union中只有一个成员的值是有效的,而其他成员的值将是未定义的。需要注意的是,extern "C"应该只用于C和C++之间的函数和全局变量的声明,而不应该用于类的定义和成员函数。其中,dataType是要存储的数据类型,memberName是位域成员的名称,numBits是分配给该成员的位数。在C++中,struct是用于定义自定义数据类型的关键字,它是一种用户定义的数据结构,可以包含不同类型的成员变量和成员函数。原创 2024-01-29 16:39:01 · 1071 阅读 · 0 评论 -
嵌入式C++必知必会之基础知识-常用关键字(2)
的语法中,n是指定的对齐字节数,可以是1、2、4、8等,表示结构体或类的成员变量将按照n字节对齐。是一个关键字,用于修饰变量,告诉编译器该变量的值可能在程序流程之外被意外修改,因此编译器不应该对该变量进行优化(如缓存变量值或重排指令顺序)。由于x的值为10,断言条件为假,程序会终止执行,并显示断言失败的信息,如文件名、行号、条件表达式等。无论指针指向的对象类型大小是多少,指针本身的大小都是固定的。运算符是一个非常有用的工具,用于在编程中确定数据类型和变量的大小,特别是在处理内存分配、结构体、数组等场景中。原创 2024-01-29 16:35:02 · 746 阅读 · 0 评论 -
嵌入式C++必知必会之基础知识-常用关键字(1)
Hello,大家好!我是木荣。。作为一名攻城狮,扎实的基本功是解决问题及完成工作中任务的重要前提。没有良好的基本功作为铺垫,一味的追求知识的宽度是毫无意义,知其然更要知其所以然。因此,在平时和小伙伴们聊天时,在谈到学习技术方面的问题,我会告诉他们注重基本功。所以,最近文章会总结一些日常编程工作中常用的重要基本知识点,根据平时工作中常用的也是重要的知识点逐步展开。为了提高阅读的舒适性,不会像其他博主的什么万字长文,一篇讲解完成,那样即浪费时间,篇幅过长记住的知识点也不会很多。原创 2024-01-29 16:21:40 · 910 阅读 · 0 评论 -
嵌入式系统中C++基础知识精髓
大家好,我在工作经常发现小伙伴们遇到一些C++的问题都是对基础知识不熟悉或理解混乱所导致的。正所谓万丈高楼平地起,作为一名合格的程序员来说,没有良好的基本功很难达到一定的高度。而工作中大部分编程问题都是基本功不扎实所导致,所以决定花些时间来整理C++相关的基本知识和基本概念供大家参考理解,每一个知识点都结合相关的代码进行验证。本文基本上涵盖了C++最常用的知识点,希望对小伙伴们有所帮助。原创 2024-01-29 16:07:06 · 848 阅读 · 0 评论 -
嵌入式中如何把C++代码改写成C语言代码
多继承也是可以改的,将多个基类的成员全部拷到子类里,遇到重复的成员名,则在前面加上前缀来区别,当然这个指的是基类之间有相同的,如果是派生类和基类之间有重名的,则会覆盖基类。第一种方法,对于类的数目很少的情况还可以,如果类的数目比较多,全部理解源代码,然后重写就很耗时间,而且很容易出错,更甚者,如果遇到大的项目想全部理解源代码几乎是不可能的。C++与C最大的区别,就是C++中的类的概念和特性,将C++改为C的问题,就转换成如何将类化去的问题。类的析构函数是由系统调用的,在C中则要显式调用。原创 2023-11-05 20:06:04 · 283 阅读 · 0 评论 -
嵌入式中C++ 编程习惯与编程要点分析
另一个问题是static成员变量的定义。static成员变量必须在类外部进行定义:class Aprivate://①//②注意①是声明,②才是定义,定义为变量分配了内存。原创 2023-10-28 15:15:42 · 160 阅读 · 0 评论 -
基于LiteOS的智慧农业案例实验分享
LiteOSLiteOS源码GitHub仓库链接:其源码一级目录结构如下:其内核包括任务管理、内存管理、时间管理、通信机制、中断管理、队列管理、事件管理、定时器等操作系统基础组件,可以单独运行。Huawei LiteOS是一个支持多任务的操作系统。在Huawei LiteOS中,一个任务表示一个线程。其任务是抢占式调度机制,同时支持时间片轮转调度方式。高优先级的任务可打断低优先级任务,低优先级任务必须在高优先级任务阻塞或结束后才能得到调度。创建任务示例:左右滑动查看全部代码>>>原创 2023-10-24 21:53:43 · 535 阅读 · 0 评论 -
实用的嵌入式 C 程序!建议收藏
在学习和工作开发的时候,经常需要使用到各种各样不太常用的操作,这种情况一般是自己手动写一些小程序来处理。因为它们不太常用,所以经常用了又没保存,等到下一次在使用的时候又需要重写,这样的非常浪费时间和精力。所以想在这里统一记录一下,以备下次重新使用。代码以实用为主,如果缺陷,欢迎指出。原创 2023-10-03 17:28:07 · 169 阅读 · 0 评论 -
嵌入式C 语言函数宏封装妙招
函数宏,即包含多条语句的宏定义,其通常为某一被频繁调用的功能的语句封装,且不想通过函数方式封装来降低额外的弹栈压栈开销。a = b;b = tmp但上述的宏具有一个明显的缺点:当遇到ifwhile等语句且不使用花括号仅调用宏时,实际作用范围在宏的第一个分号后便结束。即a = b和b = tmp均不受控制语句所作用。因此,在工程中,一般使用三种方式来对函数宏进行封装,分别为{}和({})。下文将一一对三种方式进行分析,比较各自的优劣点。综上,在{}和({})这三种函数宏的封装方式之中,应尽可能不使用{}原创 2023-10-03 17:10:55 · 230 阅读 · 0 评论 -
嵌入式软件架构基础设施设计方法
统一的软件基础设施的前提,就是声明统一的基础数据类型和宏,以克服不同的硬件平台和编译器的差异性。比如下面是我从开源项目EventOS中摘录出来的代码,不见得很完整,只能代表在我在项目里需求。编译器相关的宏定义。使用宏,屏蔽掉编译器的差异,会#else#endif一些常用的数据结构。这些数据结构,与硬件和编译器无关,是在代码中频繁使用,并在多个模块间共享的数据结构,有必要将其提升至基础设施的层面进行支持,以避免各个模块,对同一个数据类型,进行不同的定义带来的数据转换问题。原创 2023-10-03 16:35:42 · 587 阅读 · 0 评论 -
嵌入式系统中C++内存管理基本方法
ue4的内存管理主要是通过FMalloc类型的GMalloc这一结构来完成特定的需求,这是一个虚基类,它定义了malloc,realloc,free等一系列常用的内存管理操作。其中,Malloc的两个参数分别是分配内存的大小和对应的对齐量,默认对齐量为0。原创 2023-10-03 15:50:58 · 183 阅读 · 0 评论 -
探索国产嵌入式Python解决方案的方法(开源)
但他们仍然选择了 PikaPython, 他们可能选择 PikaPython 的原因,就在于 PikaPython 为用户提供了更优质的支持,其在整合碎片化生态,降低移植难度等方面做出了卓越的贡献。他们希望通过 PikaPython,大家能够获得额外的收益。他们指出,虽然MicroPython作为嵌入式Python的先驱,但在整合碎片化的生态系统以及降低移植的门槛上,其并未作出足够的努力。此前,嵌入式软件非常碎片化,每个厂商都有自己的解决方案,但随着硬件的发展,嵌入式领域将逐渐向模块化和高级化的方向发展。原创 2023-08-06 11:34:54 · 494 阅读 · 0 评论 -
数据结构中队列的操作方式,一目了然
队列是一个线性的数据结构,并且这个数据结构只允许在一端进行插入,另一端进行删除,禁止直接访问除这两端以外的一切数据,且队列是一个先进先出的数据结构。如上图,队列就像一个两端相通的水管,只允许一端插入,另一端取出,取出的球就不在水管里面了,而先放入管中的球就会先从管中拿出。请牢记这句话:队列是一个先进先出的数据结构。原创 2023-07-07 22:37:15 · 863 阅读 · 0 评论 -
嵌入式中C++开发的基本操作方法
可以区分内部函数和对外开放的函数,对于前者,我们可以随意修改,只要保证外部接口一致就可以。c++中,修饰的局部变量是真真的常量,会被编译器放在符号表中,类似于宏,不占用内存,符号表类似。c语言中:认为结构体是一个数据类型的集合,不是一种新的数据类型,所以在定义结构体变量前要加上。c语言:const修饰的局部变量是一个只读变量,可以通过地址去修改其值,不可以通过变量名修改。c++中:认为struct是一种新的数据类型的声明,可以直接使用结构体名来定义变量。c语言中:返回一个具体的数值,是一个常量。原创 2023-06-30 15:00:24 · 736 阅读 · 0 评论 -
人工智能助力嵌入式工程师发展
/设置 GPIO_Pin_5 为点亮LED的引脚。原创 2023-05-05 08:04:11 · 205 阅读 · 0 评论 -
物联网系统中常见的通信协议分析
但是在物联网中,HTTP也扮演着重要的角色。基于XMPP的应用具有超强的可扩展性,经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。总之,CoAP是一种可靠、高效的物联网通信协议,它可以帮助设备在低功耗、低带宽和低延迟的环境中进行通信,并且可以通过查询资源状态、触发事件等方式与其他设备进行交互。因此,MQTT协议是物联网应用中最常用的一种协议,它能够帮助设备之间进行高效地通信,并为物联网应用提供了一个可靠、安全的消息传递机制。原创 2023-05-02 22:15:24 · 1176 阅读 · 0 评论 -
把数组里面数值排成最小的数
关系3: a( 10^m - 1)/( 10^n - 1) < y < b( 10^m -1)/( 10^k -1) => a/( 10^n - 1)< b/( 10^k -1) => a*10^k - a < b * 10^n - b =>a*10^k + b < b * 10^n + a => a < b。综上所述,得出假设不成立,从而得出结论:对于排成的最小数字,不存在满足下述关系的一对字符串:a > b,但是在组成的数字中a出现在b的前面。因此排成的最小数字中,不存在上述假设的关系。原创 2023-03-02 22:32:36 · 368 阅读 · 0 评论 -
linux系统中利用QT实现视频监控的基本方法
常见的视频监控和视频直播就是使用RTMP 和 RTSP 流媒体协议等。RTSP (Real-Time Stream Protocol)由 Real Networks 和 Netscape 共同提出的,基于文本 的多媒体播放控制协议。RTSP 定义流格式,流数据经由 RTP 传输;RTSP 实时效果非常好,适 合视频聊天,视频监控等方向。原创 2023-01-22 18:48:38 · 4992 阅读 · 4 评论 -
linux系统中利用QT实现车牌识别的方法
很多车牌方案商都有成熟的车牌识别技术,他们是靠这个吃饭的,不开源。当然网上也有一些开 源的车牌识别算法可以参考,但是我们 Qt 教程里不是讲车牌识别算法,因为过于复杂,内容多。所以本教程也是使用方案商提供的接口来做车牌识别,例程比较简单,百度 AI 接口车牌识别 率非常高,毕竟能让别人花钱的东西是不一样的。下面就让我们使用 Qt 来调用百度 AI 车牌识 别的接口来做个例子吧车牌识别基本操作如下:1、介绍百度车牌识别功能申请,及简单介绍调用流程。2、用 Qt 编写示例程序。原创 2023-01-22 18:33:00 · 2569 阅读 · 0 评论 -
linux系统中使用QT实现APP开发的基本方法
在QT C++提供了像QStackedWdget 与 QTableView 这种控 件可以方便的切换页面,但是这种切换页面的方法比较生硬,不能像手机一样滑动,往往这种 界面就会给用户较差的体验感。在 Qt C++编程滑动屏幕界面这方面里,笔者也参考过许多网上的文章。发现很多都是使用 QPainter 结合 QMouseMove 事件来重绘屏幕或者移动屏幕的,这种方式代码量较长,而且不容 易移植。很多都是固定了界面的页数及大小,不能使用布局等等。原创 2023-01-22 17:20:15 · 3290 阅读 · 2 评论 -
linux系统中利用QT实现语音识别项目的操作方法
AI音箱对传统音箱主要有两大块的技术区别,一块是语音信号的前处理,包括回声消除、波速成型、音源定位、降噪、去混响、自动语音电平控制这块是偏硬件的控制。还有一块是智 能语音交互,包括语音关键词搜索、本地语音识别、声纹识别、语音合成。写上面的这些是让读者了解一下专业AI音箱方案与开发板实现的语音识别的差别在哪里。说明语音识别项目的基本操作过程:1、熟悉百度语音技术账号申请,及简单介绍调用流程。2、用QT编写示例程序。流程如下,录制音频后,发送调用百度语音识别API接口,识别并返回结果。原创 2023-01-22 10:27:21 · 3159 阅读 · 1 评论