C语言
文章平均质量分 62
西邮小菜机
这个作者很懒,什么都没留下…
展开
-
C语言中的位段操作—嵌入式学习(实习篇)
位段的用法原创 2022-05-16 16:53:58 · 673 阅读 · 1 评论 -
嵌入式软件面试高频基础——C语言
一、构造函数与析构函数用法与区别构造函数:是一种特殊的方法,一个类也可以有很多构造函数,可以根据其参数不同或者参数类型不同来区分,也就是重载。可以为对象成员赋初始值。常常与new运算符一起使用在创建对象的语句中。析构函数:对象所在的函数已调用完后,系统自动调用析构函数。进行清理善后工作。二、内联函数和宏定义区别1、内联函数和普通函数相比可以加快程序的运行速度,因为不需要进行函数切换,在编译时内联函数可以直接被镶嵌到目标代码中,而宏只是一个简单的替换,在预处理阶段被换到主函数中。2、内联函原创 2022-04-26 23:15:31 · 1990 阅读 · 4 评论 -
结构体大小计算以及sizeof与strlen的区别
内存对齐这个知识点面试问的几率特别高,赶紧学一下吧,书到用时方恨少!!!一、结构体求大小这里主要还是联合体求大小,应为结构体大小在前面已经记录过了,本质还是内存对齐。联合体如何求占用内存大小:1.找到占用字节最多的成员; 2.union的字节数必须是占用字节最多的成员的字节的倍数,而且需要能够容纳其他的成员。typedef union { long i; int k[5]; char c;}D其中占用字节最大的数据类型是long,但是这里还有整型的数原创 2022-03-29 23:19:35 · 727 阅读 · 2 评论 -
linux中有名管道与匿名管道的实现
一、匿名管道多用于父进程与子进程之间的通信,用到的频率很高,挺重要的。定义一个大小为2的数组、使用pipe函数将其变为匿名管道的两端,fd[0]:代表读端、fd[1]:代表写端。子进程和父进程根据功能分别关闭读或写端。当然是使用read和write函数来对管道的数据进行读写,下面这个函数的功能就是父进程给子进程传输hello world,子进程读后把字符串发送到标准输出上。如下图可以看到结果是正确的。使用完都关掉、养成好习惯。int pipe(int filedes[2]);..原创 2022-03-28 21:17:37 · 746 阅读 · 0 评论 -
linux C-文件API介绍与使用
文件的基础操作,通俗易懂。原创 2022-03-27 22:09:48 · 857 阅读 · 2 评论 -
linux多线程——互斥量实现同步
静态初始化互斥量,也可以调用函数动态初始化。使用到的函数有pthread_mutex_lock,给资源上锁,和mutex_unlock,给资源解锁,可以实现同步访问,避免竞争。#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<pthread.h>pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;void *func(voi.原创 2022-03-26 23:50:36 · 817 阅读 · 0 评论 -
linux多线程——基础知识+实现
在Linux中利用C语言实现多线程。利用函数pthread_create()、pthread_exit()、pthread_join()。一、pthread_create()#include <pthread.h>int pthread_create( pthread_t *restrict tidp, //新创建的线程指向的内存单元。 const pthread_attr_t *restrict attr,原创 2022-03-26 00:53:33 · 2228 阅读 · 0 评论 -
简述指针和引用的区别与使用场景
引用:相当于给变量起了一个别名,但是他的内部实现还是依靠指针来完成的。指针:指针是一个变量,用于保存另一个变量的内存地址。需要使用*运算符将指针取消引用,以访问其指向的内存位置。差异:1、指针可以重新分配,但是引用不可以,引用的赋值只在初始化时完成。指针三心二意、引用从一至终。2、引用与其变量共用同一个内存地址,但是指针有自己的内存地址。3、指针可以为NULL,但是引用不可以。4、指针可以间接传值,而引用不可以。使用场景1、使用链表或者树等数据结构时使用指针。2、如果数据原创 2022-03-24 00:52:36 · 2276 阅读 · 0 评论 -
内核线程与用户线程区别、同步互斥的实现原理——详解
内核线程与用户线程区别、同步互斥的实现原理原创 2022-03-14 22:41:01 · 1250 阅读 · 0 评论 -
堆和栈的区别——详解
一、程序内存划分基础补充一个程序所占用的内存主要分为一下几部分:栈、堆、文字常量区、代码区、全局区。1.1 栈区 一般由编译器自动分配和释放,存放函数的变量、局部变量等。执行函数时内部局部变量在栈上创建,函数执行完成后栈上所占用的资源自动释放。栈运算在处理器的指令集上,效率高,但分配容量有限。1.2 堆区可以人为动态分配,程序在调用malloc和new时根据需求申请,但也要人为的使用free或delete进行释放。使用起来灵活,但效率不高。如果不人为的释放容...原创 2022-03-13 22:05:28 · 7112 阅读 · 2 评论 -
C语言生成可执行文件的过程——预处理、编译、汇编、链接。学习笔记
程序想要运行起来必须经过四个步骤:预处理、编译、汇编、链接。一、预处理将代码中的注释、宏定义、条件编译、包含头文件插入等。宏仅仅是文本替换,不会计算。二、编译编译是程序构建的核心部分,编译成功后生成汇编代码,编译就是对预处理后的文件进行词法分析、语法分析、语义分析以及优化。。。词法分析:将代码分割为一个个记号,记号通常是关键字、标识符、特殊符号等等。将他们最后放到对应表中。语法分析:将词法分析产生的符号进行解析,然后将其构成语法树。...原创 2022-03-12 20:13:53 · 3207 阅读 · 0 评论 -
ucos源码分析--基础概念
ucosiii源码分析基础概念篇。原创 2022-02-28 21:47:26 · 1155 阅读 · 0 评论 -
new与malloc的区别、struct与class的区别
C++中new与malloc的区别、struct与class的区别原创 2021-11-18 15:25:48 · 934 阅读 · 0 评论 -
判断链表是否有环,并判断环的入口以及环的长度
一、判断链表是否带环判断链表是否带了环有很多种方法,最简单且高效的一种就是双指针,双指针在算法中很重要,只需要设置一快、一慢的指针,判断他两个是否会相遇就可以得出链表是否带环。int judge(node *head){ if(!head&&!head->next) { printf("链表为空!"); } node *p,*q; p=head->next; q=head->next; while(q&&q->next)原创 2021-11-17 13:48:50 · 500 阅读 · 0 评论 -
两种单链表的逆置详解
这里链表的逆置是个有点难理解的问题,但是学会了后就很简单,下面我来记录一下我在学习链表逆置问题的收获。一、头插逆置void reverse(node*head){ node*p; p=head->next; //需要把头节点的下一个置为零 head->next=NULL; while(p) { q=p; p=p->next; q->next=head->...原创 2021-11-17 13:14:41 · 465 阅读 · 0 评论 -
单片机通信——spi、iic、uart
uart,iic,spi原理即对比 由图可见,数据在总线和uart之间还是并行传输的,但是两个设备之间的uart之间就采取了单线的传输,在传输的前,还会自动的添加起始位、奇偶校验位、停止位。具体的传输过程如下图...原创 2021-11-16 21:50:36 · 3485 阅读 · 0 评论 -
链表必会知识--适合快速复习
链表的四种创建方法,链表的删除、插入、求中间值、测长等操作。原创 2021-11-16 20:13:24 · 995 阅读 · 1 评论 -
stm32+TB6612驱动直流电机
因为单片机的不可以直接的驱动电机,所以需要在他们之间加上一个电机的驱动模块,之前的文章里面用过L298N电机驱动模块,现在再给大家推荐一个新的电机驱动模块,他比L298N好用许多,而且占用体积小,发热也少。TB6612可以一次驱动两个直流电机,输出PWM也很简单,下面就是通过实验对TB6612电机进行介绍。一、TB6612电机驱动模块 先介绍一下TB6612电机驱动模块的引脚功能,VM:最大接15V电源,我一般使用12V直流电源供电。VCC采用3.3V或者5V供电。...原创 2021-11-12 13:23:05 · 24343 阅读 · 8 评论 -
一文搞懂Linux下的文件的标准输入、标准输出、输出重定向问题
Linux下一切皆文件,所谓的终端那个黑框也可以视为一个文件,在Linux驱动开发中各个设备也可以被认为是文件操作,所以文件的操作很重要。我们通常将键盘叫做标准输入设备、将显示器叫做标准输出设备,下面由几个例子来解释文件的标准输入、标准输出、输出重定向。一、命令行下的标准输入、标准输出、输出重定向 在命令行中可以使用echo命令将想输的字符串输出在终端上,结果如下:lzn@ubuntu:~$ echo abcdefdgabcdefdg 这就是...原创 2021-11-11 22:19:15 · 5679 阅读 · 1 评论 -
计算结构体的大小-数据对齐、提高读取性能与可移植性,利用空间换时间
大家学习C语言的时候基本都遇到过求结构体大小的问题吧,刚刚开始肯定都想着直接把结构体的各个因子相加起来就好了,但是这样确实是错误的,虽然有时候结果是对的。想得到结构体的大小可以使用sizeof()这个函数,当然也可以自己进行计算,下面就分享一下我的方法。一、数据对齐 首先我们先了解一下什么是数据对齐,在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在...原创 2021-11-02 03:28:32 · 203 阅读 · 0 评论