自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 资源 (8)
  • 收藏
  • 关注

原创 嵌入式面试汇总(更新中)

答:extern答:可以,在不同的C文件中以static形式来声明同名全局变量。可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错这个函数有太多的错误了,以至让人不知从何说起了:1)ISR 不能返回一个值。如果你不懂这个,那么你不会被雇用的。2) **ISR 不能传递参数**。如果你没有看到这一点,你被雇用的机会等同第一项。3) 在许多的处理器/编译器中,浮点一般都是不可重入的。

2023-08-19 16:27:02 478

原创 嵌入式面试7

答:extern答:可以,在不同的C文件中以static形式来声明同名全局变量。可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错这个函数有太多的错误了,以至让人不知从何说起了:1)ISR 不能返回一个值。如果你不懂这个,那么你不会被雇用的。2) **ISR 不能传递参数**。如果你没有看到这一点,你被雇用的机会等同第一项。3) 在许多的处理器/编译器中,浮点一般都是不可重入的。

2023-08-09 17:06:55 404

原创 嵌入式面试7---进程or线程or同步

重定向:文件标识符是从0到9结束的整数,指明了与进程有关的特定数据流源。解析:首先,父进程fork后,给父进程返回子进程pid,此时为真,逻辑或语句不再执行,但是fork出的子进程是复制的父进程,此时PC程序指针也在当前位置,而且子进程的返回值是0,逻辑或语句为假,继续执行,注意此时进入子进程,多以子进程fork出孙子进程,不论子进程返回的是孙子进程的pid,还是孙子进程返回的是0,已经没有代码了,程序停止,main函数结束。管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递。

2023-08-07 20:45:47 650

原创 嵌入式面试6---操作系统原理

具体来说,当高优先级任务正等待信号量(此信号量被一个低优先级任务拥有着)的时候,一个介于两个任务优先之间的中等优先级任务开始执行,这就会导致一个高优先级任务在等待一个低优先级任务,而低优先级任务却无法执行类似死锁的情形发生。优先级天花板策略:给每个信号量设置一个优先级天花板,优先级天花板的值大于所有使用该信号的任务的优先级,当某个任务得到该信号量时,将其优先级置为优先级天花板的值。优先级继承策略:进程调度算法对获取到临界资源的进程(A)增加其优先级为所有等待该资源的进程中的最高优先级。

2023-08-07 20:45:16 718

原创 嵌入式面试5 -makefile shell

===

2023-08-07 20:44:45 813

原创 嵌入式面试4 Linux编程

答:Linux一切皆文件,那么作为一个设备文件,它的操作方法接口封装在struct file_operations,当我们写一个驱动的时候,一定要实现相应的接口,这样才能使这个驱动可用。实现的接口有read,write,ioctl,遵循的框架有字符设备的注册与销毁,模块的注册与销毁。// (以文件尾为基准偏移0字节)将文件内部指针放到文件最后面,便于获取文件总长度。答:系统的暂停程序,按任意键继续,屏幕会打印,”按任意键继续。// 读取文件指针的位置,得到整个文件字符的个数。,使得他们就像本地函数一样。

2023-08-07 20:44:10 516

原创 嵌入式面试3

1.线程与进程的区别和联系?线程是否具有相同的堆栈?dll是否有独立的堆栈?进程是死的,只是一些资源的集合,真正的程序执行都是线程来完成的,程序启动的时候操作系统就帮你创建了一个主线程。每个线程有自己的堆栈。DLL中有没有独立的堆栈,这个问题不好回答。因为DLL中的代码是被某些线程所执行,只有线程拥有堆栈,如果DLL中的代码是EXE中的线程所调用,那么这个时候是不是说这个DLL没有自己独立的堆栈?如果DLL中的代码是由DLL自己创建的线程所执行,那么是不是说DLL有独立的堆栈?

2023-08-07 20:43:31 492

原创 嵌入式面试2

第四个意思a是一个指向整型 数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数 是不可修改的,同时指针也是不可修改的)。Bit fields是被扔到C语言死角的东西,它保证你的代码在不同编译器之间是不可移植的,同时也保证了的你的代码是不可重用的。我最近不幸看到 Infineon为其较复杂的通信芯片写的驱动程序,它用到了bit fields因此完全对我无用,因为我的编译器用其它的方式来实现bit fields的。

2023-08-07 20:42:20 771

原创 嵌入式面试题1

理论上是这样的,首先是i在相对0的位置,占8位一个字节,然后,j就在相对一个字节的位置,由于一个位置的字节数是4位的倍数,因此不用对齐,就放在那里了,然后是a,要在3位的倍数关系的位置上,因此要移一位,在15位的位置上放下,目前总共是18位,折算过来是2字节2位的样子,由于double是8 字节的,因此要在相对0要是8个字节的位置上放下,因此从18位开始到8个字节之间的位置被忽略,直接放在8字节的位置了,因此,总共是16字节。的p[]数组为函数内的局部自动变量,在函数返回后,内存已经被释放。

2023-08-07 20:41:38 607

原创 c/c++面试题

c/c++

2023-07-28 15:21:47 104

原创 rt-thread In function `_sbrk_r‘: sbrkr.c:(.text._sbrk_r+0xc): undefined reference to `_sb 修改

Console-Error: 请启用libc组件。

2023-07-08 17:37:36 293

原创 rt-thread串口与库函数串口例程

在应用程序调用 rt_device_write() 写入数据时,如果底层硬件能够支持自动发送,那么上层应用可以设置一个回调函数。解析数据线程会尝试读取一个字符数据,如果没有数据则会挂起并等待信号量,当串口设备接收到一个数据时会触发中断并调用接收回调函数,此函数会发送信号量唤醒线程,此时线程会马上读取接收到的数据。串口接收不定长数据需要用户在应用层进行处理,一般会有特定的协议,比如一帧数据可能会有起始标记位、数据长度位、数据、终止标记位等,发送数据帧时按照约定的协议进行发送,接收数据时再按照协议进行解析。

2023-07-08 09:33:43 605

原创 rt-thread简单设备驱动编写

RT-Thread 的设备模型是建立在内核对象模型基础之上的,设备被认为是一类对象,被纳入对象管理器的范畴。每个设备对象都是由基对象派生而来,每个具体设备都可以继承其父类对象的属性,并派生出其私有属性,下图是设备对象的继承和派生关系示意图。rt_device_control函数。驱动创建和注册相关函数原型。

2023-07-07 20:36:24 436

原创 linux网络编程笔记

可以设置的选项有:(O_APPEND,O_ASYNC,O_DIRECT,O_NOATIME,O_NONBLOCK)网络编程中对于数据的输入/输出的方式:阻塞IO、非阻塞IO、信号驱动、多路复用。非阻塞IO:和阻塞IO相反,不会等待数据到来,如果没有数据到来直接返回失败。函数本身其实并不会阻塞,而是因为里面的参数而阻塞,例如文件描述符。信号驱动:当文件描述符有数据到来时其实会产生一个信号:SIGIO。而这个信号的产生需要设置文件描述符的属性:O_ASYNC。思考:当文件描述符产生了信号后,这个信号发给谁?

2023-06-22 20:24:31 92

原创 linux网络编程笔记2----------tcp

struct sockaddr *addr:存放连接对象的IP地址和端口号。先建立连接,连接成功后就可以正常通信,如果有任何一方断开,通信都会结束。客户端的套接字,服务器的套接字依旧是监听套接字,可以继续监听连接请求。ACK 确认位,ACK=1表示有效,无值表示无效。如果还有连接请求,就可以再继续返回新的套接字。SYN 同步位,表示请求连接,一般为1。FIN 取消位,表示请求断开,一般为1。int flags:发送标志,默认填0。发送连接请求给对方,等待对方建立连接。思考:连接成功后返回的套接字是谁的?

2023-06-22 20:23:31 50

原创 linux网络编程笔记--tcp/udp

OSI模型在发送的过程中:数据从应用层出发,每经过一层就会在数据后面加上这一层的"头",除了最后的物理层。OSI模型在接收的过程中:数据从物理层传入,每经过一层就会去掉一层的"头",最后到的应用层就只剩数据了。const struct sockaddr *addr:存放要绑定的IP地址和端口号的结构体的地址。int af:要转化的地址类型(AF_INET:IPv4 / AF_INET6:IPv6)linux下的网络通信使用的是套接字,那么根据使用通信协议不同,创建的套接字也不同。

2023-06-22 20:22:01 112

原创 c语言哈希表简单实现

除留取余: 对于有M个数值的无序数列,用小于M的最大质数来做除数,把余数当成key(键值)给定表格M,可以通过函数 f(x) 来快速定位该表中某一个数据。把表中的数值以键值的形式映射到表中。然后可以直接通过键值来查找到该数据。哈希表(散列表), 用来定位的函数 f(x)称为哈希函数(哈希映射)假设有10000个数的无序数列,建立哈希表,快速查找其中的某一个数值。冲突:通过哈希函数以后,得到键值是同一个,那么这个时候称为冲突。如果要排除相同键值的数,可以采用链表的方式继续遍历。散列表也被称为哈希表。

2023-05-08 08:36:43 115

原创 linux io操作------标准IO输入输出函数之get与put系列

int size:要获取的字符串的长度(size最好多设置一位,因为fgets默认最后一个字节会给’\0’)因为gets没有定义缓冲区的大小,容易造成缓冲区溢出,导致段错误,但在某些编译器中可以使用。putc和fputc可以向指定文件中输出,但如果没有正常关闭文件,是无法保存到文件中去。思考:如果文件中没有数据,使用getc或fgetc去获取一个字符,结果会如何?结果:不会阻塞,因为文件没有行缓冲机制,返回值为-1,因为定位相当于在文件末尾。int c:要输出的字符,可以是ASCII码,也可以是字符数据。

2023-05-06 14:22:37 486

原创 linux 标准io笔记+简单的账户管理系统

这里的字符串指的是字符型数组,如果填字符型指针,那么这个指针必须指向的是可写入数据的内存地址。结果:前一个字符串不能拆分,后一个字符串可以拆分,因为前一个字符串在获取hello这部分时,练习:做一个简单的管理系统,有注册功能,将数据保存到一个文件里面,运行程序都能读取文件内容。思考:设两个文件分别有24字节和21字节,按每块5字节的方式读取5块数据,返回值为多少?思考:设buf中有24字节和21字节两种情况,按每块5字节的方式写入5块数据,结果如何?const char *path:要打开的文件的路径名。

2023-05-06 10:00:39 77

原创 linux--文件io笔记+练习--复制一个文件

结果:打开失败,因为open里的参数只是决定打开文件后以什么方式去操作,实际还要根据文件可支持的操作来决定。但它和文件夹有本质的区别,文件夹是包含的关系,文件夹里面包含了文件,系统打开文件夹,找到里面的文件。而目录是索引关系,,目录里面记载了文件的索引信息,系统通过目录里保存的文件索引去找到文件进行操作。linux下的所有文件都有三组权限:文件所有者、所有者同组成员、不同组成员对文件的操作权限。在打开文件后,后续的所有操作都是根据文件描述符来进行,这个文件描述符就代表这个文件。

2023-05-05 09:15:06 232

原创 数据结构笔记--二叉树的删除节点、排序

比键值小的数值放在它的左边,把比键值大的数值放在它的右边。从数列第一个元素开始,相邻两个元素做对比,把较大的数值放在后面,第一个轮结束。使用一个下标或者指针指向首元素,然后遍历数列,找到最大或者最小值所在的位置,把整个数列看成是已排序和未排序两个部分,然后每次从未排序的数列中取出第一个。第一次插入时,会把整个数列的第1个元素看成已排序数列,即一开始已排序数列中。当二叉树的节点没有比较复杂的数据或者子链表时,一般都会使用节点替换的。元素依次与已排序中的数值做比较,然后插入到对应的位置。第1次,比较n-1次。

2023-04-28 14:14:54 251

原创 #数据结构笔记----栈、队列、

完全二叉树中,除最后一层以外,第x层的节点个数 2^(x-1),最后一层。申请了一段连续的内存(数组),front始终指向第一个存入的数据,链式队列与链表非常相似,在单链表的情况下进行尾插和头删方法。完全二叉树是满二叉树的最后一层从右往左连续删除节点造成的。满二叉树中,第x层的节点个数是 2^(x-1);//指向堆空间的内存(数组)树:某一个节点有多个后驱节点,但只有一个前驱节点。并且子节点的数值与根节点的数值有明显的比较关系。//当前队列中元素的个数。右子树上的所有数据,一定比根节点的数值大。

2023-04-28 14:04:02 46

原创 数据结构笔记-双向链表

/如果循环时删除掉了pos指针指向的节点,那么循环结束的执行语句 pos->member.next 会报错。在这个宏定义中,pos在每次循环结束后重新赋值了,所以不会出现 pos删除后 报错的情况。//这个for循环中不能删除节点,因为它在每次循环结束以后,要再一次用到pos指针。双向: 链表中任意一个节点有2个指针,一个指针指向前驱节点,一个指针指向后驱节点。(2)把指针域封装成结构体,通过指针域结构体的链式连接,循环: 链表中的末尾节点的后驱节点是 head 头结点。/usr 查找的目标文件夹。

2023-04-24 15:09:49 64

原创 数据结构笔记

i+=3) —> 运行时间只与n的大小相关,那么它的时间复杂度仍然是 O(n);线性表: 多个相同数据类型的元素组成的有限序列,每个元素(除首尾外)有唯一的前驱节点和后驱节点。运行时间与两个值相关,当n的数值增加时,左侧运行的次数 1/2 * x^2 数值也会增加,x是项数。//定义一个指针,指向顺序表的堆空间,指针类型与顺序表内存储的数据类型一致。所以x,也就是循环次数,与 n的开方成正比例关系, 此时时间复杂度是 O(n的开方)对于没有头结点的链表来说,头部插入以后,需要更换被保留的链表头结点。

2023-04-24 15:09:37 35

原创 数据结构笔记

i+=3) —> 运行时间只与n的大小相关,那么它的时间复杂度仍然是 O(n);线性表: 多个相同数据类型的元素组成的有限序列,每个元素(除首尾外)有唯一的前驱节点和后驱节点。运行时间与两个值相关,当n的数值增加时,左侧运行的次数 1/2 * x^2 数值也会增加,x是项数。//定义一个指针,指向顺序表的堆空间,指针类型与顺序表内存储的数据类型一致。所以x,也就是循环次数,与 n的开方成正比例关系, 此时时间复杂度是 O(n的开方)对于没有头结点的链表来说,头部插入以后,需要更换被保留的链表头结点。

2023-04-24 15:08:35 31

原创 c语言练习--linux curses库2048小游戏

【代码】c语言练习--linux curses库2048小游戏。

2023-04-20 17:28:23 65

原创 c语言笔记-------内存管理

============================ 内存管理应用=============================1.修饰函数和全局变量时,就是把资源私有化只能在定义它们的文件中使用,其他文件用不了,物理内存: 实际的内存存储空间 内存条 大小取决于内存条的大小。虚拟内存: 由系统根据物理内存映射出来的内存 大小由系统决定。如果使用的函数是其他文件的,一般需要使用extern进行声明。修饰的是函数 改变函数的连接属性:外部–》内部。修饰的是局部变量,将它存储的位置,放到静态数据段。

2023-04-20 17:25:42 86

原创 c语言笔记-------内存管理

============================ 内存管理应用=============================1.修饰函数和全局变量时,就是把资源私有化只能在定义它们的文件中使用,其他文件用不了,物理内存: 实际的内存存储空间 内存条 大小取决于内存条的大小。虚拟内存: 由系统根据物理内存映射出来的内存 大小由系统决定。如果使用的函数是其他文件的,一般需要使用extern进行声明。修饰的是函数 改变函数的连接属性:外部–》内部。修饰的是局部变量,将它存储的位置,放到静态数据段。

2023-04-13 18:37:47 38

原创 c语言习题---------去除字符串中相同的元素

【代码】c语言习题---------去除字符串中相同的元素。

2023-04-12 14:43:11 48

原创 c语言笔记---------指针的应用

本质上是一个指针变量,保存的数组的地址(不是数组首元素地址)1.封装一个函数,实现交换两个整数变量的值 (通过地址)二级指针就是一个指针变量,储存一级指针所在内存的地址。buf 数组首元素的地址 &buf[0]本质上是一个指针变量,保存的是函数的地址。指针函数 void * 代表通用型指针。本质上是一个数组,存储的数据类型是指针。定义一个函数指针保存fun函数地址。1.回调函数—通过函数指针实现。&buf 整个数组的首地址。数组和指针的本质区别。

2023-04-12 14:34:16 38

原创 c语言笔记--------指针

(buf+0) 数组的名字也是数组首元素(buf[0])的地址 *(&buf[0]) &buf[0] 等价于 buf。p++ p+1 有区别的: p++ p本身改变了。只跟操作系统的位数有关,跟保存的地址类型没有关系。除此之外,*和指针变量一起使用,*作用就是解引用。int 指针类型 保存的数据对应类型的内存地址。2.定义一个指针变量,用保存a的地址(推荐)1.定义一个指针,让它指向a的地址。通过变量获取变量所在内存的地址。通过指针的加减运算访问数组数据。

2023-04-12 14:33:31 42

原创 c语言笔记-------数组

1.定义一个数组可以储存100个int数据,前30个初始化为123,后30个初始化为456。2.数组不管是局部还是全局变量,只初始化部分元素,其他元素默认为0。如果数组定义成全局变量,不初始化,数据默认清空的置零的(0)int buf[2][3] = {1,2,3,4};如果只初始化其中的部分元素,没有初始化的元素默认也会置零。申请一整块连续的内存,存储长度一样的相同类型的数据()1.如果数组定义成局部变量,不初始化,数据默认是随机的。//编译器无法确定数组的大小,会报错。//存储5个整型数据。

2023-04-12 14:29:01 83

原创 c语言笔记-------字符串操作

strncmp()函数首先将str1字符串的第一个字符的ACSII值减去str2第一个字符的ACSII值(自左向右比较前n个字符,直到出现不同的字符或遇’\0’为止)作用:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间,也就是把含有转义字符’\0’即空字符作为结束符,把这之前的内容复制到dest中。计算的是字符串str的长度,从字符的首地址开始遍历,以 ‘\0’ 为结束标志,然后将计算的长度返回,计算的长度并不包含’\0’。第一个字符串小于第二个字符串,则返回小于0的数字。

2023-04-12 14:27:26 62

原创 c语言笔记--------控制流语句

/先斩后奏 先执行循环体代码(不管条件是否成立的,循环体都会至少执行1次),再判断循环条件是否成立。从键盘输入一个字符,判断这个字符是属于 ‘a’–‘z’,‘A’–‘Z’,‘0’–‘9’,其他字符。1 2 体 3 2 体 3 2 体 3 2.。//当表达式为假,循环条件不成立,不执行循环体代码,跳出循环。//表达式2为真,条件2成立,执行这个代码块。//表达式3为真,条件3成立,执行这个代码块。//表达式为假,条件不成立,执行这个代码块。//表达式1为真,条件成立,执行这个代码块。

2023-04-12 14:01:53 50

原创 c语言笔记-------函数

void sum(int a, int b)//int 函数的返回值类型 sum 函数名 (int a, int b) 参数列表。int main(int argc, char argv[][20]) //有一定的局限性。1.通过特定的函数传参,函数可以实现相应的功能,可以返回一个数值,作为返回值。函数就像一个黑匣子,只需要知道输入的啥,输出的啥就可以了。3.把昨天的作业第2题的打印字母金字塔功能封装成函数。1.实现输出打印任意个数的主函数传来的参数。返回值: 计算的结果–两个整数的和。

2023-04-12 14:00:38 75

原创 c语言笔记------运算符

按位异或 1^0 1 0^1 1 1^1 0 0^0 0。2.在linux中,一般也需要直接操作内存,以达到操作硬件目的。| 按位或 1|0 1 1|1 1 0|0 0。& 按位与 1&0 0 1&1 1 0&0 0。1010 0101 第6位置1 其他位不变。1.对数据的某一位置零,其他位保持不变、4bit的二进制数据对应 1个16进制位。2.对数据的某一位置1,其他位保持不变。把a的第b位置零,其他位保持不变。把a的第b位置1,其他位保持不变。也会大量用到位运算符。

2023-04-11 15:56:56 73

原创 c语言笔记-----数据的格式化输入输出

man 3 printf 在man手册的第三章查询printf的详细信息。man -f printf 查询printf的解析在man手册第几章。使用linux提供的man手册(linux的说明书)查询。把多个不同类型的数据以字符的形式输出到屏幕。%hd 短整型 10进制 short。%ld 长整型 10进制 long。%-5d 占5个字符的空间,左对齐。%d 有符号整型数据 10进制。%u 无符号整型数据 10进制。%o 无符号整型数据 8进制。

2023-04-11 15:54:46 73

原创 c语言笔记----数据的储存形式

补码 正数的补码和原码一样 ,负数的补码符号位为1,其余位:反码加1。反码 正数的反码和原码一样 ,负数的反码符号位为1 其余位与原码相反。原码 符号位(0 正数 1 负数)+数据位。1.数据都是需要在内存中操作,存储的位置不同。否则,属于非法操作!C语言,最大的特点就是可以直接操作内存。2.数据必须先申请内存,才能使用内存。1.数据存储时,都是使用补码形式存储。1bit 符号 + 7bit 数据。了解 原码 反码 补码。

2023-04-11 15:53:19 52

原创 c语言笔记-----数据类型

面 逻辑结构(控制流:分支(判断 选择)结构和循环结构)char 字符型 本质上还是整型。float 浮点型 小数。double 双精度浮点型。点 数据类型(变量)long 长整型。short 短整型。

2023-04-11 15:31:09 27

原创 c语言练习-----打印*号金字塔

递归–打印*号金字塔。

2023-03-23 19:56:59 467

嵌入式面试题整理 -(linux、c语言、c++、单片机)

嵌入式面试题整理 --(linux、c语言、c++、单片机)

2023-08-08

multisim仿真函数发生器

简单的文档说明+multisim仿真

2022-01-18

SPI OLED HC-SR04.7z

0.96寸OLED spi 超声波显示

2021-06-23

stm32+esp8266连接原子云

esp8266 STM32F103

2021-04-22

multisim三位密码锁

三位密码锁

2020-11-03

直流稳压电源multisim

直流稳压电源 整流 滤波 稳压

2020-09-20

STM32f103c8 HC-SR04 LCD1602

stm32f103c8t6最小系统 HC-SR04 LCD1602 能用,不过采集误差有点大

2020-07-04

正弦波 方波 三角波 发生器 multisim

正弦波 方波 三角波 发生器 multisim

2020-06-23

BCD编码器.ms13

mutisim八位二进制转10位8421编码器仿真文件

2020-06-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除