C/C++
文章平均质量分 77
嵌入式大杂烩
一位喜欢分享的嵌入式软件工程师
一位全网累计10万+粉丝的嵌入式博主
一位能源专业转做嵌入式的过来人
展开
-
嵌入式C编程新境界:解锁结构体保护绝技,让你的代码坚如磐石,无懈可击!
C/C++中不完全类型有三种不同形式: void、未指定长度的数组以及具有非指定内容的结构和联合。使用不完全类型的指针或引用,不需要知道类型的全部内容。比如:此时的array就是一个不完全类型的数组,一般这样的数组声明会放在.h中,而其定义放在.c中,在定义的时候在给出数组的具体长度,若之后有需要改变数组的长度时,直接改.c里的就可以,对外的.h就保持原样不用修改。用数组来说明可能还是有点不太好理解,下面我们用结构体的例子来做说明。原创 2024-07-24 23:12:45 · 753 阅读 · 0 评论 -
Github上有哪些热门的 C 语言项目?
在Github上,有许多高质量的C语言项目供学习和使用,本次来汇总一波,看看有没有你需要的。原创 2024-07-23 21:06:00 · 1093 阅读 · 0 评论 -
实用的嵌入式代码优化技巧与经验分享!
使用指针的方式写代码会比柔性数组的方式会繁琐一些,特别地,如果在释放内存的时候把顺序弄反了,则结构体里的指针成员所指向的内存就释放不掉,会造成内存泄露。使用内联函数替换重复的短代码,一方面,可以避免函数的回调,加速了程序的执行,利用指令缓存,增强局部访问性;尽可能把长的有依赖的代码链分解成几个可以在流水线执行单元中并行执行的没有依赖的代码链,提高流水线的连续性。在多重循环中,应当将最长的循环放在最内层, 最短的循环放在最外层,以减少 CPU 跨切循环层的次数。另一方面,查表法的代码往往比常规法要简洁些。原创 2024-03-12 09:00:00 · 966 阅读 · 2 评论 -
Linux POSIX消息队列用于线程间通信
在应用开发中,生产者,消费者的模型非常常见,一方产生数据并把数据放入队列中,而另一方从队列中取数据,先进先出。Linux系统中提供的消息队列一般应用于进行间通信,但也可以用于线程间通信。其中,POSIX消息队列可移植性较强,使用较广。本文介绍POSIX消息队列应用于线程间通信。例子:线程1不断给线程2发送字符串数据。应用:线程间通信/进程间通信。原创 2023-06-10 09:54:43 · 640 阅读 · 0 评论 -
Linux C语言时间相关知识总结!
实际开发中,经常要获取各种时间。原创 2023-06-10 09:35:23 · 451 阅读 · 0 评论 -
Linux多线程编程之线程安全!
在多线程环境中,多个线程在同一时刻对同一份资源进行写操作时,不会出现数据不一致。反之,则是线程非安全的。线程安全是程序设计中的术语,指某个函数、函数库在多线程环境中被调用时,能够正确地处理多个线程之间的公用变量,使程序功能正确完成。为了确保在多线程环境中的线程安全,就要确保数据的一致性。从字面上简单理解,原子是一种很微小的粒子;原子操作是不能再进一步细分的操作。原创 2023-06-10 09:35:42 · 322 阅读 · 0 评论 -
Linux多线程编程知识汇总!
进程是指正在运行的程序,它拥有独立的内存空间和系统资源,不同进程之间的数据不共享。线程是进程内的执行单元,它与同一进程内的其他线程共享进程的内存空间和系统资源。原创 2023-06-08 09:28:57 · 520 阅读 · 0 评论 -
谈谈嵌入式软件的兼容性!
大家好,我是杂烩君。嵌入式项目中,软件是一个不断迭代的过程,需要考虑各种兼容性。之前我们的项目,因为这方面考虑得比较少,导致项目中后期开发起来很被动。项目系统总体设计阶段,应尽可能地考虑到未来可以遇见的情况,覆盖到尽可能多的业务扩展。项目虽然分阶段开发,各个阶段完成的功能都不一样,总体设计要指向最终的需求。原创 2023-06-07 13:20:26 · 655 阅读 · 0 评论 -
分享嵌入式软件调试方法及几个有用的工具!
大家好,我是杂烩君。本次分享一些嵌入式软件的调试经验及一些有用的工具。需要说明的是:这不是一篇大神教你如何成为大神的文章,因为我还不是大神;而是一名普通嵌入式软件工程师从毫无经验到略有经验的一点调试总结,都很基础。我们常常说,软件三分写七分调。实际开发中,确实也是这样子的。我工作这几年了,对这体会也越来越深。每当需求一下来,我代码很快就可以写完,但是,调试需要花很多时间。这里需要明确的是, 调试的目的不仅仅是调通整个功能需求。调通功能是最基本的要求,还需要进行优化、完善逻辑、完善异常处理。原创 2022-04-24 21:27:12 · 3466 阅读 · 0 评论 -
嵌入式大杂烩周记 | 第 12 期
大家好,我是杂烩君。嵌入式大杂烩周记主要是一些实用项目学习分享,每周一篇,每篇一个主题。原创 2022-05-13 21:30:00 · 767 阅读 · 0 评论 -
分享几个实用的代码片段(附代码例子)
大家好,我是杂烩君。本次来分享几个实用的代码小片段。原创 2022-07-11 21:30:12 · 2985 阅读 · 0 评论 -
嵌入式并行多线程处理器,了解一下!
MC3172 是厦门感芯科技的一款32 位 RISC并行多线程实时处理器。基于RISC-V RV32IMC 指令集, 100%单周期指令, 最高200MHz主频, 3.37coremark/MHz。可以代替实时操作系统, 实现程序的模块化与复用性。相关资料可在感芯官网下载。链接:嵌入式开发,是软件+硬件结合,两者互补。如果硬件功能很强大,则软件可能可以设计得比较简单;如果硬件功能有限,则软件方面可能得考虑比较多的方面。原创 2022-07-21 21:31:19 · 1417 阅读 · 0 评论 -
分享一种修改配置文件的方法
平时,我们使用的配置文件可以是json、ini等这些标准格式,也可以是一些非标准格式。这些标准格式都有一些对应的库进行解析修改,比较方便。但是,有时候我们需要修改一些非标准格式的一些文件里的一些内容,可能就得自己想办法了。sed 工具是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行。在修改配置文件之前,需要重置一下,保证配置文件的格式正确。本次分享一种修改配置文件的方法,文章很短,但挺实用~原创 2022-08-01 23:11:18 · 1850 阅读 · 0 评论 -
嵌入式大杂烩周记 | 第 13 期
大家好,我是杂烩君。原创 2022-08-11 22:57:27 · 808 阅读 · 0 评论 -
分享一种你可能不知道的bug定位方法
在Linux下,一个程序崩溃时,它一般会在指定目录下生成一个core文件。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的。原创 2022-08-13 23:01:15 · 994 阅读 · 0 评论 -
分享几个实用的代码片段(第二弹)
大家好,我是杂烩君。本次我们再来分享几个实用的代码小片段。原创 2022-08-15 21:30:52 · 869 阅读 · 0 评论 -
嵌入式大杂烩周记 | 第 14 期
大家好,我是杂烩君。嵌入式大杂烩周记主要是一些实用项目学习分享,每篇一个主题。原创 2022-08-17 21:30:13 · 1013 阅读 · 0 评论 -
访问非法内存为什么不会出错?
大家好,我是杂烩君。上篇文章我们分享了一段代码:有位读者在朋友圈评论我的文章:(type * )0不是指向空地址吗?(type*)0->member不是访问非法内存了吗?为什么不会出错?这篇文章我们就来解释这个问题。原创 2022-08-20 21:45:21 · 962 阅读 · 0 评论 -
如何监控各个线程的资源占用情况?
大家好,我是杂烩君。嵌入式Linux开发中,有时候为了定位问题,需要查看某个进程的各个线程的运行情况。原创 2022-09-07 21:44:21 · 1338 阅读 · 0 评论 -
如何检测设备的联网状态?
大家好,我是杂烩君。嵌入式Linux开发中,有时候我们程序需要检测设备的联网状态。这里分享两种方法:方法一:创建一个socket client尝试去链接一个服务器。方法二:通过检测sysfs下的对应文件。原创 2022-09-18 21:30:20 · 1745 阅读 · 0 评论 -
C语言 | 数据抽象思想的应用
大家好,我是杂烩君。本次给大家分享一篇关于数据抽象的小短文:在往期文章:什么是不完全类型?中,我们清楚地知道了数据抽象的好处。这一篇再一起来看一个简单的小技巧。实际项目中,常常会有多个模块协同工作,各个模块之间会相互调用。两种声明方法:一种是在把对外提供的接口在本模块头文件中声明,其它模块需要调用时包含这个头文件就可以。另一种是调用者在调用之前使用extern进行声明。我比较倾向于第一种方法,严格把只在本模块文件中使用的函数使用static声明,供外部使用的函数在头文件里声...原创 2021-08-16 21:49:59 · 774 阅读 · 0 评论 -
C语言 | 几个宏定义特殊操作符的用法
大家好,我是杂烩君。这是篇基础知识文章,分享嵌入式C语言宏定义中特殊操作符的用法。#运算符 #号作为一个预处理运算符,可以把记号转换成字符串。例子:#include<stdio.h...原创 2022-03-16 21:30:00 · 1145 阅读 · 0 评论 -
C语言 | 编程小技巧(四)
无限循环优先选用for(;????,而不是while(1)在C语言中,最常用的无限循环语句主要有两种:while(1)和for(;;)。从功能上讲, 这两种语句的效果完全一样。那么,我们究竟该选择哪一种呢?其实,for(;;)语句运行速度要快一些。按照for的 语法规则,两个分号;分开的是3个表达式。现在表达式为空,很自然地被编译成无条件的跳转(即无条件循环,不用判断条件)。如代码for(;;)在M...原创 2019-09-05 11:36:37 · 947 阅读 · 0 评论 -
C语言 | 编程小技巧(三)
循环展开简单的循环可以展开以获取更好的性能,但需要付出代码体积增加的代价。循环展开后,循环计数应该越来越小从而执行更少的代码分支。如果循环迭代次数只有几次,那么可以完全展开循环,以便消除循坏带来的负担。例如:for(i=0; i<3; i++){ something(i);}展开为:something(0);something(1);something(2);这...原创 2019-09-04 16:09:31 · 881 阅读 · 0 评论 -
C语言 | 编程小技巧(二)
参数的书写要完整参数的书写要完整,不要贪图省事只写参数的类型而省略参数名字。如果函数没有参数,则用void填充。例如:voidSetValue(intwidth,intheight); // 良好的风格voidSetValue(int,int); // 不良的风格floatGetValue(void); // 良好的风格floatGetValue(); //...原创 2019-09-03 17:39:41 · 961 阅读 · 0 评论 -
C语言 | 关于C语言的main()函数的问题
在C语言中,main函数是程序的入口。其有四种写法,即:前面三种不带参数的都是比较常见的写法。第四种写法带的两个参数是什么意思呢?下面简单来介绍一下。首先,主函数不能被其他函数调用,...原创 2018-10-02 18:36:51 · 1018 阅读 · 0 评论 -
C语言 | 函数参数压栈的顺序是?
大家好,我是正念君。本公众号每天都会及时更新一些编程笔记、校招编程、计算机方面的知识以及一些干货等,欢迎关注!今天分享关于C语言函数参数压栈顺序的问题。按照日常习惯,C语言的函数参数压栈...原创 2018-10-07 23:18:55 · 4242 阅读 · 1 评论 -
C语言 | 找符合条件的数
题目一个10万以内的整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?代码方法一:#include <stdio.h>#include ...原创 2018-10-11 07:01:00 · 1421 阅读 · 0 评论 -
C语言 | 懂二进制
今天给大家分享一道CVTE(广州视源电子科技股份有限公司)的面试笔试题:题目:世界上有两种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)...原创 2018-10-12 07:01:00 · 821 阅读 · 0 评论 -
C语言 | 内存总结
今天给大家分享一份关于C语言内存的总结,文章较长,阅读PDF版效果更佳,本文的PDF文件及本文所用的代码可在后台回复关键字:内存总结或ZN02 获取,欢迎来撩。以下是正文:C语言程序需要...原创 2018-10-12 07:01:00 · 817 阅读 · 0 评论 -
C语言 | extern的用法
伴随着不同源文件变量和函数之间的相互引用以及相互独立的关系,产生了extern和static关键字。static的用法可以查看:static有几种用法?这节讲的是extern关键字的用法...原创 2018-10-13 07:01:00 · 1326 阅读 · 0 评论 -
C语言 | 指针的基本概念
我们平时定义的变量最终都会保存在内存里,内存的最小存储单位称为内存单元。通常,一个字节称为一个内存单元。而我们定义的变量就保存在这些内存单元里,为了正确地访问这些数据,必须为每个内存单元...原创 2018-10-19 06:25:00 · 805 阅读 · 0 评论 -
C语言 | 结构体内存对齐问题
对于一个结构体的字节数大家有没有遇到什么疑问呢?先看一个结构体:typedef struct Test{ char a1; int a2; char a3;short...原创 2018-10-20 06:30:00 · 755 阅读 · 0 评论 -
C语言 | 指针变量的运算
1前言指针变量也是可以进行运算的,如指针变量对其自身加上某个整数或减去某个整数,这在内存上体现为:相对这个指针向后偏移多少个单位或向前偏移了多少个单位,这里的单位与指针变量的类型有关。在...原创 2018-10-22 15:49:53 · 1229 阅读 · 0 评论 -
C语言 | 进制转换
1前言进制转换有如下几种常见情况:十进制转换为其他进制其他进制转换为十进制二进制转换为其他进制八进制转换为其他进制十六进制转换为其他进制2十进制转换为其他进制十进制转其他进制:取余法。下...原创 2018-10-24 06:30:00 · 2202 阅读 · 0 评论 -
C语言 | 数组与指针不等价
1前言数组与指针是不等价的,如:数组名不可以改变,而指向数组的指针是可以改变的。字符串指针指向的字符串中的字符是不能改变的,而字符数组中的字符是可以改变的。求数组长度时,借用数组名可求得...原创 2018-10-26 06:29:00 · 909 阅读 · 0 评论 -
C语言 | 关于有符号数与无符号数的一些总结
1有、无符号数之间的运算有符号数与无符号数之间的运算,编译器会进行隐式类型转换。请看如下代码:#include <stdio.h>int main(void){ un...原创 2018-10-30 06:06:00 · 917 阅读 · 1 评论 -
C语言 | 字符串循环右移
题目编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefgi”,如果n=2则移位后应该是“hiabcdefg”。解题思路右移n个,则后n个字符就会移动到字...原创 2018-11-01 06:06:00 · 5562 阅读 · 1 评论 -
C语言 | 指针函数与函数指针?
常持正念方圆梦;不忘初心总是春。1前言数组、指针,这两个词结合的顺序不同,其意义也不同。具体有何不同之处可移步至数组指针与指针数组?进行查看。同样的,函数、指针这两个词结合的顺序不同其意...原创 2018-11-08 06:06:00 · 744 阅读 · 0 评论 -
C语言 | 时间日期函数
常持正念方圆梦,不忘初心总是春。/********前言********/time.h是C/C++中的日期和时间头文件。用于需要时间方面的函数。下面分享time.h头文件中几个常用函数的用...原创 2018-11-16 23:56:39 · 3225 阅读 · 0 评论