- 博客(368)
- 资源 (1)
- 收藏
- 关注
原创 分享一个代码生成器编写思路!
大家好,我是杂烩君。中,李先静前辈提到一点:让电脑去做单调重复的工作。这点让我很受启发,在工作中需要这类重复性的工作时,我也会编写代码生成器来帮我处理。最近,又完成了一个代码生成器的开发,一键生成大部分原本需要靠体力输出的相似代码,极大地提高了开发效率。业内知名的代码生成器有很多,如:STM32CubeMX生成STM32基础库代码、project_generator生成器生成基础工程、protoc生成protobuf协数据格式代码等。
2024-09-16 13:38:22 214
原创 嵌入式C编程新境界:解锁结构体保护绝技,让你的代码坚如磐石,无懈可击!
C/C++中不完全类型有三种不同形式: void、未指定长度的数组以及具有非指定内容的结构和联合。使用不完全类型的指针或引用,不需要知道类型的全部内容。比如:此时的array就是一个不完全类型的数组,一般这样的数组声明会放在.h中,而其定义放在.c中,在定义的时候在给出数组的具体长度,若之后有需要改变数组的长度时,直接改.c里的就可以,对外的.h就保持原样不用修改。用数组来说明可能还是有点不太好理解,下面我们用结构体的例子来做说明。
2024-07-24 23:12:45 729
原创 低功耗嵌入式软件设计的要点!
硬件产品,低功耗设计是提升产品竞争力的关键因素之一。低功耗设计的具体实现方式涉及到多个部分:硬件设计、软件设计、散热设计等方面。本篇文章我们着重关注设计的一些要点。
2024-07-15 23:26:19 728
原创 工具 | 强大的Shell脚本静态分析工具
ShellCheck是一个广受欢迎的开源工具,专为Shell脚本开发者设计,旨在帮助发现并修正脚本中的错误。它能够静态分析bash、sh、ksh和dash等多种Shell脚本,通过提供详细的警告和建议,帮助开发者提高脚本的可靠性和可维护性。ShellCheck不仅检查语法错误,还能识别出潜在的逻辑错误、不规范的编码习惯以及安全漏洞,是Shell脚本开发过程中的得力助手。Github地址:https://github.com/koalaman/shellcheck。
2024-07-14 23:05:38 431
原创 嵌入式软件如何记录用户行为?
的例子:我们基于Linux C,使用POSIX线程(pthread)来创建单独的线程,并使用POSIX消息队列来接收来自其他线程的开机次数及按键埋点事件。同时,我们将使用。
2024-07-14 23:02:22 824
原创 Zephyr 会成为物联网时代RTOS的佼佼者?
Zephyr RTOS是Linux基金会下的一个开源项目,以其高效、灵活、安全的特点,在实时操作系统领域崭露头角,成为物联网设备开发的首选之一。基于Apache 2.0许可。官网:https://www.zephyrproject.org/代码仓:https://github.com/zephyrproject-rtos/zephyr。
2024-07-06 00:33:14 1327
原创 常用的Git commit 提交规范!
在我们嵌入式开发中,版本管理工具Git已经成为不可或缺的一部分。Git帮助我们记录代码变更历史,提供了强大的代码协作开发功能。初学时,我们基本都是按照下面的格式这么来写commit信息的吧?甚至有些公司的commit信息也很随意也类似于上面这样的。这样的commit信息包含的信息比较有限,不利于后续的版本追溯。其实,为了确保团队成员能够更高效地协作,并且保持代码库的整洁和有序,需要团队各成员遵循达成一致的commit提交规范。
2024-07-04 21:45:57 732
原创 C语言开发调试利器 | Sanitizer检测器
Sanitizer是由Google发起的开源工具集,用于检测内存泄露等问题。链接:https://github.com/google/sanitizers/wiki/它包括了AddressSanitizer、MemorySanitizer、ThreadSanitizer、LeakSanitizer等多种工具。这些工具最初是LLVM项目的一部分,后来也被GNU的GCC编译器支持。
2024-04-07 22:39:15 1219
原创 如何快速开发一个上位机?aardio了解一下
我们的资料仓库下面之前有一位小伙伴留言:杂烩君之前偶然间知道aardio这么一个工具,但没有实际去了解过。本期花点时间来了解、学习一下aardio,看看aardio是不是如这位朋友所说的这是一个不错的工具。
2024-03-17 10:24:47 2317
原创 嵌入式处理器微架构与指令集
作为最低的授权等级,拥有使用授权的用户只能购买已经封装好的ARM处理器核心,而如果想要实现更多功能和特性,则只能通过增加封装之外的DSP核心的形式来实现(当然,也可以通过对芯片的再封装方法来实现)。3、ARM和苹果的渊源很深,当年苹果是ARM的创始股东之一,后来苹果陆续卖掉了ARM的股票,再后来苹果基于ARM的架构开始大搞自研芯片。系统设计,低耗电节能,非常适用移动通讯领域。内核层级的授权是ARM公司设计出不同的微架构,其他芯片公司可以购买这些微架构,再添加一些自己的一些外设模块,就可以设计出一个芯片。
2024-03-15 11:00:00 1143
原创 汇总嵌入式中一些实用的辅助工具!
之后又重新自研,不仅支持 C/C++,还支持 C#,Lua 语言,在发掘 C/C++ 空指针、越界、未初始化、C#空引用、Lua变量未初始化等比较有效。轻量高效:小熊猫C++基于QT和C++语言开发,使用内置的轻量级代码分析器进行智能语法分析,运行时无需大量的内存和CPU资源,在低配置机器上也能获得流畅的运行体验。生产力提升:通过集成自动缩进、智能代码补全、智能语法高亮和实时语法检查等功能,小熊猫C++提供了流畅的代码编辑体验,可以大幅度提升代码编写的效率。、可视化的、对比及合并工具。
2024-03-14 08:30:00 763
原创 学嵌入式要学到什么程度才好找工作?
智能家居行业应用的相关技术可能有:WiFi蓝牙等无线通信、MQTT等物联网相关协议、物联网操作系统、物联网安全、传感器数据采集处理、物联网云平台等。机器人行业应用的相关技术可能有:传感器数据采集处理、电机控制、ROS机器人操作系统、规划与运动控制、WiFi蓝牙等无线通信、图像识别、语音识别等。理解整体框图、掌握基础外设如:GPIO、UART、TIM、ADC、DAC、I2C、SPI的裸机编程及相关原理、应用。再学习Linux下的应用开发知识:多线程编程、多进程编程、文件I/O编程、网络编程等。
2024-03-13 12:00:00 537 1
原创 实用的嵌入式代码优化技巧与经验分享!
使用指针的方式写代码会比柔性数组的方式会繁琐一些,特别地,如果在释放内存的时候把顺序弄反了,则结构体里的指针成员所指向的内存就释放不掉,会造成内存泄露。使用内联函数替换重复的短代码,一方面,可以避免函数的回调,加速了程序的执行,利用指令缓存,增强局部访问性;尽可能把长的有依赖的代码链分解成几个可以在流水线执行单元中并行执行的没有依赖的代码链,提高流水线的连续性。在多重循环中,应当将最长的循环放在最内层, 最短的循环放在最外层,以减少 CPU 跨切循环层的次数。另一方面,查表法的代码往往比常规法要简洁些。
2024-03-12 09:00:00 934 2
原创 来了解一下较受欢迎的Git可视化管理工具!
大家好,我是杂烩君。Git版本管理工具是我们日常开发中常用的工具,熟练使用它可以提高我们的工作效率。老司机们常常使用命令行的方式进行操作,新手可借助可视化工具来进行过渡,命令行与可视化工具结合使用来加深对Git的熟悉程度。
2024-03-11 11:00:00 470
原创 超轻量的嵌入式数据库!
是一款超轻量级的嵌入式数据库,专注于提供嵌入式产品的数据存储方案。与传统的基于文件系统的数据库不同,FlashDB 结合了 Flash 的特性,具有较强的性能及可靠性。如今,物联网产品种类越来越多,运行时产生的数据种类及总量及也在不断变大。FlashDB 提供了多样化的数据存储方案,不仅资源占用小,并且存储容量大,非常适合用于物联网产品。:是一种非关系数据库,它将数据存储为键值(Key-Value)对集合,其中键作为唯一标识符。TSDB 数据具有时间戳,数据存储量大,插入及查询性能高。
2024-03-10 11:00:00 623
原创 8个很受欢迎的 C 语言项目
xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。是一种轻量级的数据交换格式。,是Google公司开发的一种数据格式,类似于XML能够将结构化数据序列化,可用于数据存储、通信协议等方面。zlog在效率、功能、安全性上大大超过了log4c,并且是用c写成的,具有比较好的通用性。的缩写,即初始化文件。
2024-03-09 12:27:18 1488
原创 汇总一些常用的终端工具!
在各种远程登录工具中,Putty是出色的工具之一,Putty具有完全免费、小巧绿色、无需安装、操作简单等特点。的SSH/Sftp/Shell/Telnet/Serial 客户端,支持 Windows、Linux 和 macOS。集SSH工具、服务器管理、远程桌面加速的良心软件,同时支持Windows,macOS,Linux。集成本地文件管理器,支持移动到、复制到、复制自、删除、重命名、新建文件/目录等。集成sftp、scp客户端,支持下载、上传、删除、重命名、新建文件/目录等。** 的 SSH 客户端。
2024-03-06 00:51:14 1624
原创 C语言 | 可测试性软件设计要点!
方式一,因为有一个数据是在函数内部从flash中读取的,所以这个数据我们不太方便进行控制,而能控制的只有参数b。那么,这样子,我们在调用测试时,测得就不是很全,也不能灵活地控制测试路径。设计的软件可测试性强,我们就能在开发阶段进行充分地测试,在开发阶段尽可能多地解决一些逻辑上的问题,从而保证更高质量地软件交付。方式二,计算所依赖的数据都通过函数参数留出来了,我们可以很方便地对函数进行测试,可以很方便地输入不同的数据组合。所以,之后写代码,写之前,有必要先想清楚,这个模块最后要怎么进行自测?
2024-03-06 00:21:07 68
原创 C语言,日志调试法的一些规则!
当我们的函数设计有多个功能函数模块的时候,当某个模块出现问题时,这个时候我们只是关心此模块,那么可以先把其他模块的日志功能关闭掉,只是打开关心模块的日志。使用日志动态过滤控制功能可以动态地调整日志地输出,但前提是项目使用地日志组件具备这样的能力。这样我们就可以在日志文件里通过模块标签来筛选某个模块的日志,提高我们定位问题的效率。在Release版本中,可能需要减少日志输出或者去掉一些不必要的日志,需要一个开关来进行切换。分支判断中,各执行分支需要加上对应的日志信息,可以帮助我们准确地知道程序执行的走向。
2024-03-05 00:18:20 353
原创 嵌入式中,升级时涉及的协议兼容性问题?
大家好,我是杂烩君。越来越多的硬件产品,硬件构成不仅仅是集成在一块板子上,而是多块控制板协同工作。此时,就会涉及到多块板之间的通信(有线/无线通信),就会涉及到到通信协议。很多时候,我们都会自定义一些协议。我们在软件迭代过程中,可能会涉及到板间交互的数据的升级,比如新增数据。新增的某个数据属性上属于某个数据集合,比如与某个结构体是同类数据,理论上为了程序设计得更合理些,应该把这个数据加在已有的结构体里面。但是,这可能会涉及到兼容性问题。
2024-03-03 23:17:44 735
原创 推荐一个嵌入式静态代码扫描工具!
TscanCode是腾讯研发的静态代码扫描工具,最早的版本是基于 cppcheck 二次开发。之后又重新自研,不仅支持 C/C++,还支持 C#,Lua 语言,在发掘 C/C++ 空指针、越界、未初始化、C#空引用、Lua变量未初始化等比较有效。静态代码扫描是指无需运行被测代码,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。同样的,也有运行时诊断的工具,如Valgrind等。
2023-10-14 21:09:10 576
原创 这些必备VSCode插件,让嵌入式开发更上一层楼!
在嵌入式开发领域,选择一款合适的开发工具至关重要。而VSCode作为一款轻量级、强大的编辑器,已然成为开发者的首选。本文将推荐一些实用的、与我们嵌入式开发相关的VSCode插件。
2023-10-14 21:02:49 2833 1
原创 CMake的基础知识,看这篇就够了!
CMake 是一个跨平台的安装(编译)工具。CMakeList.txt是一个与平台无关的、用于定制编译流程的文件。CMake 靠的是 CMakeLists.txt 文件来生成Makefile文件。Hello系列 | Shell编程必备简明基础知识。下面简单了解CMakeLists.txt简单的规则及一些示例。CMakeLists.txt中只有字串和字串数组两种变量。定义变量通过 set命令来定义,使用变量时在外面加上 ${} 符号即可。# 定义变量# 使用变量")① 注释使用符号 #。
2023-06-16 12:09:08 2029
原创 Makefile的基础知识,看这篇就够了!
大家好,我是杂烩君。本次我们来介绍关于Makefile的一些知识。什么是make、Makefile?make是一个 构建工具,主要用于C/C++项目。Makefile是一个编译脚本,使用 make 工具解释Makefile(makefile)文件中的指令(编译指令)进行我们的项目编译。在Linux环境下进行开发,工程源文件较少时,直接使用gcc进行编译。源文件较多及工程复杂时,就可以使用 Makefile(makefile) 来对我们的工程进行管理,然后使用 make 工具解释Makefile(m
2023-06-15 10:57:37 2017
原创 Shell编程的常用知识,看这篇就够了!
大家好,我是杂烩君。在Linux下进行开发,对于一些繁杂的、需要重复性进行的工作,我们都有必要写一些shell脚本来完成这些繁杂的工作。
2023-06-14 09:33:58 514
原创 Linux POSIX消息队列用于线程间通信
在应用开发中,生产者,消费者的模型非常常见,一方产生数据并把数据放入队列中,而另一方从队列中取数据,先进先出。Linux系统中提供的消息队列一般应用于进行间通信,但也可以用于线程间通信。其中,POSIX消息队列可移植性较强,使用较广。本文介绍POSIX消息队列应用于线程间通信。例子:线程1不断给线程2发送字符串数据。应用:线程间通信/进程间通信。
2023-06-10 09:54:43 604
原创 Linux多线程编程之线程安全!
在多线程环境中,多个线程在同一时刻对同一份资源进行写操作时,不会出现数据不一致。反之,则是线程非安全的。线程安全是程序设计中的术语,指某个函数、函数库在多线程环境中被调用时,能够正确地处理多个线程之间的公用变量,使程序功能正确完成。为了确保在多线程环境中的线程安全,就要确保数据的一致性。从字面上简单理解,原子是一种很微小的粒子;原子操作是不能再进一步细分的操作。
2023-06-10 09:35:42 299
原创 Linux多线程编程知识汇总!
进程是指正在运行的程序,它拥有独立的内存空间和系统资源,不同进程之间的数据不共享。线程是进程内的执行单元,它与同一进程内的其他线程共享进程的内存空间和系统资源。
2023-06-08 09:28:57 502
原创 谈谈嵌入式 C 语言踩内存问题!
除了数据存储区之外,多申请12个字节。自定义申请内存的函数自然是要兼容malloc的使用方法。返回值自然要返回数据存储区的地址。
2023-06-07 22:50:11 601
原创 谈谈嵌入式软件的兼容性!
大家好,我是杂烩君。嵌入式项目中,软件是一个不断迭代的过程,需要考虑各种兼容性。之前我们的项目,因为这方面考虑得比较少,导致项目中后期开发起来很被动。项目系统总体设计阶段,应尽可能地考虑到未来可以遇见的情况,覆盖到尽可能多的业务扩展。项目虽然分阶段开发,各个阶段完成的功能都不一样,总体设计要指向最终的需求。
2023-06-07 13:20:26 623
原创 多进程编程知识汇总,附代码例子!
进程是指正在运行的程序,它拥有独立的内存空间和系统资源,不同进程之间的数据不共享。进程是资源分配的基本单位。线程是进程内的执行单元,它与同一进程内的其他线程共享进程的内存空间和系统资源。线程是调度的基本单位。操作系统根据不同的场景提供了不同的方式,消息队列、共享内存、UNIX域套接字、管道、信号量。内核中的一个优先级队列,多个进程通过访问同一个队列,在队列当中添加或者获取节点来实现进程间通信。
2023-06-05 22:03:59 350
原创 经验 | 初学者注意这几点,可以少走一些弯路!
这位小伙伴全面阅读某个模块的代码时,没有做一些自己的学习、理解记录,这就会导致看了后面部分,又忘了前面部分。我们刚开始切入某个陌生的项目,并且代码量比较大的情况下,在阅读代码的过程中,很有必要做一些阅读笔记,便于自己反复阅读(有些代码不看好几遍可能理解得不透彻)的时候加深一些理解。做笔记得方式可以是写一些注释描述、流程图、思维导图等。
2022-11-01 22:12:36 1174 2
原创 嵌入式设备AP配网实例分享
大家好,我是杂烩君。上一篇笔记我们分享了,这篇我们分享一下配网。在这之前,建议阅读往期相关笔记:下面我们来简单分享基于阿里生活物联网平台的AP配网实例。
2022-10-20 21:30:33 1396
原创 嵌入式Linux单板连接飞燕物联网平台
大家好,我是杂烩君。最近,我们的设备连接的云平台需要切到阿里的飞燕平台,做个笔记记录下。阿里的物联网平台有好几个:物联网平台生活物联网平台(飞燕平台)城市物联网平台它们的应用场景不一样。其中,物联网平台的入口是最容易找到的,网上大多数demo都是基于物联网平台。而本篇笔记我们是基于生活物联网平台(飞燕平台)来记录的。阿里的生活物联网平台是面向消费级生活智能设备的平台。平台入口:开发文档:下面我们使用基于嵌入式Linux单板系统的设备一步一步地连接飞燕平台。
2022-10-18 21:30:32 1588
原创 如何检测设备的联网状态?
大家好,我是杂烩君。嵌入式Linux开发中,有时候我们程序需要检测设备的联网状态。这里分享两种方法:方法一:创建一个socket client尝试去链接一个服务器。方法二:通过检测sysfs下的对应文件。
2022-09-18 21:30:20 1710
JSON天气数据包解析
2018-02-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人