嵌入式软件
文章平均质量分 78
FL1623863125
程序员的每日一拱!
平常喜欢分享项目实践经验,知识点,实战项目,欢迎留言,评论,沟通交流,一起进步。
吾等采石之人,当心怀大教堂之愿景。
愿我们奔赴在自己的热爱里!
展开
-
嵌入式系统习题库及答案
嵌入式系统习题库及答案## 1.选择题1. 以下哪个不是嵌入式系统的设计的三个阶段之一:(A)A 分析B 设计C 实现D 测试2. 以下哪个不是RISC架构的ARM微处理器的一般特点:(C)A 体积小、低功耗B 大量使用寄存器C采用可变长度的指令格式,灵活高效D 寻址方式灵活简3. 通常所讲的交叉编译就是在X86架构的宿主机上生成适用于ARM架构的( A )格式的可执行代码。原创 2024-06-25 09:45:00 · 1110 阅读 · 0 评论 -
威泰视信嵌入式软件工程师笔试题
硬件看门狗,又叫 watchdog timer,是一个定时器电路, 一般有一个输入,叫喂狗,一个输出到MCU的RST端,MCU正常工作的时候,每隔一端时间输出一个信号到喂狗端,给 WDT 清零,如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT 定时超过,就回给出一个[复位信号]到MCU,是MCU复位. 防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。只要你代码或配置有改动,都要重新编译的,只是如果代码写成块模式的,不用整个代码都重新编译,编译器会自动编译改动了的代码。原创 2024-06-21 11:00:00 · 1947 阅读 · 0 评论 -
易兆微电子_嵌入式软件工程师笔试题
修饰符extern用在变量或者函数的声明前,用来说明 “ 此变量 / 函数是在别处定义的,要在此处引用 ”。1.关键字 extern是什么含义, 请举例说明。3.举例 解释 “ 宏 ” 的作用。嵌入式软件工程师笔试题(十七)2.根据规律问号处应是何图形?4.写出下面代码的打印结果。以下程序的输出结果是。原创 2024-06-20 19:00:00 · 181 阅读 · 0 评论 -
Linux设备驱动开发详解
设备驱动提供了硬件和应用软件之间的纽带应用软件时只需 调用系统软件的应用编程接口(API) 就可让硬件去完成要求的工作。原创 2024-05-16 08:30:00 · 1816 阅读 · 0 评论 -
AT&T ASM Syntax
开发一个OS,尽管绝大部分代码只需要用C/C++等高级语言就可以了,但至少和硬件相关部分的代码需要使用汇编语言,另外,由于启动部分的代码有大小限制,使用精练的汇编可以缩小目标代码的Size。另外,对于某些需要被经常调用的代码,使用汇编来写可以提高性能。所以我们必须了解汇编语言,即使你有可能并不喜欢它。如果你是计算机专业的话,在大学里你应该学习过Intel格式的8086/80386汇编,这里就不再讨论。原创 2024-05-16 13:45:00 · 1903 阅读 · 0 评论 -
Linux 块设备驱动
是针对存储设备的,比如 SD 卡、 EMMC、 NAND Flash、 Nor Flash、 SPI Flash、机械硬盘、固态硬盘等所以其实就是这些存储设备驱动与字符设备相比 :块设备只能以进行读写访问,块是 linux 虚拟文件系统**(VFS**)基本的数据传输单位。字符设备是以进行数据传输的,不需要缓冲。块设备在结构上是可以进行的,对于这些设备的读写都是进行的,块设备一般都是使用来暂时存放数据,等到条件成熟后 , 在一次性将缓冲区中的数据写入块设备中。原创 2024-05-15 13:15:00 · 460 阅读 · 0 评论 -
嵌入式文件系统
在计算机系统中, 需要用到大量的程序和数据, 它们大部分以文件的形式存放在外部存储当中, 根据需要可随时调入内存使用必须熟悉外存的物理特性了解各种存储文件的属性记录文件在外存上的存储位置在多用户环境下, 必须能保证数据的安全性和一致性为了解决文件的管理问题, 在操作系统中出现了—文件系统负责存储器中文件的组织和分配提高对存储器资源的利用效率将文件的存取、 共享和保护等功能提供给操作系统和用户简化用户对文件的各项操作保证在多用户环境下文件的安全性和一致性。原创 2024-05-15 10:45:00 · 1315 阅读 · 0 评论 -
裸机工程开发调试
s5p6818寻址空间采用统一编址方式进行管理寻址空间映射图:Normal I/O就是我们常说的特殊功能寄存器GPIO等内容在这里进行配置iROM和iRAM启动, 是可以由BootMode相关引脚选择的多种程序加载方式, 即是从内部还是从外部等途径来加载程序(P94P93和P95决定了外部程序的加载顺序RST_CFGn对应的引脚通过查表和原理图来最终确定程序加载启动流程GNU组织不仅给我们带来了许多开源软件工程, 还带来了强大的GNU编译工具预处理器cppC编译器gccC++编译器g++汇编器as。原创 2024-05-14 11:00:00 · 859 阅读 · 0 评论 -
Linux字符设备驱动设计
计算机系统中存在着大量的设备, 操作系统要求能够控制和管理这些硬件, 而驱动就是帮助操作系统完成这个任务。驱动相当于硬件的接口, 它直接操作、 控制着我们的硬件, 操作系统通过驱动这个接口才能管理硬件。原创 2024-05-13 16:45:00 · 861 阅读 · 0 评论 -
Linux设备驱动核心
信号量采用睡眠等待机制: 如果有一个任务试图获得一个已经被占用的信号量时, 信号量会将其推到一个等待队列中睡眠, 当持有信号量的进程将信号量释放后, 处于等待队列中的那个任务被唤醒, 并将获得该信号量。中断上下文: 中断服务程序执行时所处的内核环境,CPU的所有寄存器的值、 中断相关的硬件参数( 中断控制器的寄存器中的值) 、 被打断进程的信息等。如果CPU接收到一个中断, 它会停止一切工作,调用中断处理函数, 因为进程调度依赖中断, 此时进程调度也会停止, 所以就要求我们的中断处理一定要快。原创 2024-05-13 09:00:00 · 940 阅读 · 0 评论 -
6818Linux内核开发移植
uImage : 是u-boot专用的一种内核镜像格式, 它是在zImage的基础上又添加了一个长度为64字节的标签头, 在u-boot启动时会去掉此头信息, 仍按zImage启动, 头信息主要用于区分不同格式的内核镜像。vmlinux 是由以下内核代码生成的非压缩镜像 (arch/arm/kernel/head.s、 kernel/、 mm/、 fs/、 ipc/、 crypto/、 lib/、drivers/、 net/等等)原创 2024-05-12 16:30:00 · 847 阅读 · 0 评论 -
6818Linux内核--Bootloader应用分析
Bootloader中文解释为:启动引导程序Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 Boot Loader 几乎是不可能的。原创 2024-05-12 10:45:00 · 1669 阅读 · 0 评论 -
操作系统基础知识
有了进程,还需要多线程的理由:在一个应用程序中同时发生着多种活动(可以想象一下word应用,打字、显示、磁盘备份等工作。当磁盘备份的时候按理来说鼠标键盘不能用,因为CPU不在这些控制上。)其中某些活动会随着时间的推移被阻塞,如果我们将这些应用分解成可以准并行运行的多个顺序线程,设计模型会比较简单。如果不这样设计,你得考虑单线程下的两种情况吧。第一种是顺序进行,但是阻塞,就得等阻塞的应用得到相应的输出你才能继续进行下面的活动,在阻塞的时候CPU是没有被利用的。第二种就是有限状态机,回调函数这种的。原创 2023-11-22 11:45:00 · 364 阅读 · 0 评论 -
linux高性能服务器
TCPIP协议在最开始是没有客户端和服务端的概念的,但是现实中我们的很多应用都需要服务器提供服务然后客户端去访问这些服务,数据资源被提供者所垄断。C/S模型服务器启动之后,首先创建一个或者多个监听socket,然后调用bind函数将其绑定到服务器的相关端口上,然后调用listen函数等待客户端的连接。服务器运行稳定之后,客户端就调用connect函数向服务器发起连接请求。由于客户请求的到达是随机的异步事件,因此服务器要用某种IO模型来监听这一事件。原创 2023-11-21 14:38:57 · 351 阅读 · 0 评论 -
c++语言核心及进阶
默认构造函数默认构造函数要么没有参数,要么所有参数都有默认值才行。如果类为定义任何构造函数,编译器将自动定义一个默认构造函数用来创建对象。如果派生类构造函数的成员初始化列表没有显式的调用基类构造函数,则编译器将使用基类的默认构造函数来构造派生类对象的基类部分。拷贝构造函数将新对象初始化为一个已存在的对象按值将对象作为参数传递给函数函数按值类型返回对象编译器临城临时对象编译器会默认提供拷贝构造函数,但不提供具体定义。当类中有动态内存分配的情况时需要自定义拷贝构造函数赋值运算符。原创 2023-11-21 14:36:37 · 334 阅读 · 0 评论 -
C++学习笔记总结练习:多态与虚函数
重定义:基类中没有声明函数是虚函数。派生类中对普通函数进行了重定义。只是作用域上的覆盖,没有触发多态和动态绑定。重定义不能触发动态多态。无论指针或引用绑定的是什么对象,都会根据指针或引用的类型,调用该类型的函数。而不是使用虚指针查找虚函数表。只有调用虚函数的时候,才会去根据对象的虚函数指针,查找类中的虚函数表。return a;return a;int real_ex(){//重定义A的函数return b;原创 2023-09-02 20:31:31 · 568 阅读 · 0 评论 -
C++学习笔记总结练习:继承与派生
public:private:Bulk_quote::Bulk_quote(string book,double p,int qty,double disc):Quote(book,p),min_qty(qty),discount(disc){}//委托基类构造函数从派生类向基类的类型转换只对指针或引用有效。是指针或引用的类型转换,而不是其指向的对象的类型发生改变。基类向派生类不存在隐式类型转换派生类向基类的类型转换也可能会由于访问受限而变得不可行。原创 2023-08-31 18:30:00 · 136 阅读 · 0 评论 -
C++学习笔记总结练习:类与对象
面向对象程序设计(Object-Oriented Programming,简称 OOP)是一种编程范式,它将程序组织为对象的集合,这些对象通过相互之间的交互来完成任务。在面向对象编程中,对象是程序的基本单元,具有属性(数据)和方法(行为)。面向对象程序设计的核心概念包括:类(Class):类是对象的模板或蓝图,描述了对象的属性和方法。它定义了对象的结构和行为。例如,一个 “汽车” 类可以定义汽车的属性(如颜色、品牌、速度)和方法(如加速、刹车)。原创 2023-08-31 09:00:00 · 266 阅读 · 0 评论 -
C++学习笔记总结练习:运算符重载两种方式
运算符时具有特殊名字的函数:由关键字operator和气候定义的运算符共同组成。可以被重载的运算符。原创 2023-08-30 19:30:00 · 991 阅读 · 0 评论 -
C++学习笔记总结练习:构造函数和析构函数
析构函数与构造函数对应,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统会自动执行析构函数。类的成员函数,由拨浪号接类名构成,没有返回值,不接受参数。不能被重载,一个类只有一个析构函数。声明一个符号。如果有extern,则表示变量在外部顶底,链接其他问件事,匹配外部定义的变量。分配内存、指定变量名。原创 2023-08-30 08:30:00 · 154 阅读 · 0 评论 -
C++学习笔记总结练习:C内存分配与初始化
然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。到最后,空闲链会被切成很多的小内存片段,如果这时用户申请一个大的内存片段,那么空闲链上可能没有满足用户要求的片段了。于是,malloc函数请求延时,并开始在空闲链上,检查各个内存片段,对他们进行整理,将相邻的小空闲块合并成较大的内存块。malloc分配的内存是位于堆中的,并且没有初始化内存的内容,因此基本上malloc之后,调用函数memset来初始化这部分的内存空间。功能:返回一个指向n个连续字符存储单元的指针。原创 2023-08-29 16:45:00 · 230 阅读 · 0 评论 -
C++学习笔记总结练习:数组参数
函数使用循环遍历数组,并打印每个元素。在 main 函数中,我们定义了一个整数数组 myArray,并计算数组的大小。传递数组:当你调用带有数组参数的函数时,你可以传递一个数组作为实际参数。数组大小:在函数中,你可以使用数组参数来访问数组元素,并使用数组大小来遍历数组。然而,在 C++ 中,数组参数的大小信息在函数内部是不可用的,因此通常需要额外的参数来传递数组的大小。数组指针:在函数中,数组参数实际上是一个指向数组首元素的指针。这意味着你可以将一个数组作为函数的参数,以便在函数内部对数组进行操作或访问。原创 2023-08-29 10:30:00 · 292 阅读 · 0 评论 -
C++学习笔记总结练习:new和delete使用及讲解
参考文献new operator/delete operator就是new和delete操作符。而operator new/operator delete是全局函数。原创 2023-08-28 09:42:53 · 329 阅读 · 0 评论 -
C++学习笔记总结练习:字符串类实现
使用构造函数初始化字符串的另外两种方式,动态指针+拷贝构造函数 )查找某字符串是否位于指定的字符串中(采用暴力查找)缺省构造函数对字符串的初始化MyString()实现头文件的封装:MyString.h。析构函数,释放动态申请的字符串空间。重载下标运算符 [],索引输出。字符串中指定两个字符的交换。重载输出运算符原创 2023-08-28 19:30:00 · 292 阅读 · 2 评论 -
C++学习笔记总结练习:内存对齐
编译器为程序中的每个“数据单元”安排在适当的位置上。原创 2023-08-28 09:40:30 · 388 阅读 · 0 评论 -
C++学习笔记总结练习:数组离散化的方法
ai。原创 2023-08-27 15:00:00 · 377 阅读 · 0 评论 -
C++学习笔记总结练习:多态的三种实现方式
重定义是在不同作用域内的(一个在父类一个在子类),只要函数名相同,且不构成重写,均称之为重定义。原创 2023-08-27 09:30:00 · 2109 阅读 · 0 评论 -
C++学习笔记总结练习:动态内存管理实现
因为 malloc 只负责开辟空间,并不会调用对象的构造函数对其成员变量进行初始化,那么内部的成员变量是没有分配空间的,当我们调用 delete 时,delete会先对对象进行资源清理,但是对象里的资源 malloc 并没有给其分配,所以我们清理的时候是非法的操作。对于内部有资源的自定义类型,使用 new 开辟的空间使用 free 释放,会造成内存泄漏,因为 free 并不会调用析构函数清理对象的资源,因此会造成资源泄漏。对于内置类型:如果没有配合使用,可能不会出现什么问题。原创 2023-08-26 10:00:00 · 194 阅读 · 0 评论 -
C++学习笔记总结练习:nullptr、NULL、0
参考文献。原创 2023-08-25 18:30:00 · 151 阅读 · 0 评论 -
C++学习笔记总结练习:初始化的方法
参考文献。原创 2023-08-25 11:45:00 · 167 阅读 · 0 评论 -
C++学习笔记总结练习:强制类型转换
static_cast 相当于传统的 C 语言里的强制转换,该运算符把 expression 转换为 new_type 类型,用来强迫隐式转换,例如 non-const 对象转为 const 对象,编译时检查,用于非多态的转换,可以转换指针及其他,但没有运行时类型检查来保证转换的安全性。new_type 必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,再把该整数转换成原类型的指针,还可以得到原先的指针值)。原创 2023-08-24 20:00:00 · 135 阅读 · 0 评论 -
C++学习笔记总结练习:字符串转换_数组转换_数组转 vector_vector 转数组
由于 vector 内部的数据是存放在连续的存储空间,vector 转数组事实上只需要获取 vector 中第一个数据的地址和数据的长度即可。如果仅仅是传参,无需任何操作,直接传地址即可,如果要进行数据复制,可以借用内存拷贝函数“memcpy”。数组也是 C++中很重要的复杂类型之一。vector 是对象类型。C++支持数组的迭代器运算。建议尽量使用标准库类型,而非数组。原创 2023-08-24 09:00:00 · 220 阅读 · 0 评论 -
C++学习笔记总结练习:标准库-头文件
头文件描 述定义重载的关系运算符,简化关系运算符的写入,它还定义了pair类型,该类型是一种模板类型,可以存储一对值。这些功能在库的其他地方使用定义了许多函数对象类型和支持函数对象的功能,函数对象是支持operator()()函数调用运算符的任意对象给容器、管理内存的函数和auto_ptr模板类定义标准内存分配器支持系统时钟函数头文件描 述原创 2023-08-22 14:00:00 · 155 阅读 · 0 评论 -
C++学习笔记总结练习:高低地址与高低位
主机采用大端还是小端表示数据由CPU的架构决定,如果两个主机只见交互数据,但是字节序表示不同,需要同化.可以把主存看成一本空白的作业本,你现在要在笔记本上记录一些内容,他的页码排序是。.如果把上边的存储方式反过来,内存中的高地址存储工资中的高位,则称为。内存中的低地址存储工资中的高位这种方式称为。原创 2023-08-22 09:00:00 · 274 阅读 · 0 评论 -
C++学习笔记总结练习:C++内存分配
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5ggcplZx-1692237195837)(image/2021-03-04-10-30-35.png)]原创 2023-08-23 08:00:00 · 112 阅读 · 0 评论 -
C++学习笔记总结练习:多文件编程的实例
使用条件编译控制被引入的文件,防止被多次编译。条件编译解决的是,预处理阶段,某一个文件,多次包含同一个文件。例如,b包含a,c包含a,c又包含b;#include的预处理阶段,c包含了两段a的代码,那么编译过程会出现include的错误。所以在所有的头文件中,应当加上条件编译,在给别人使用过程中,防止被直接或间接包含多次。原创 2023-08-23 05:00:00 · 186 阅读 · 0 评论 -
C++学习笔记总结练习:全局变量和静态变量和static
在静态成员函数的实现中不能直接引用类中说明的非静态成员,可以引用类中说明的静态成员(这点非常重要)。如果静态成员函数中要引用非静态成员时,可通过对象来引用。从中可看出,调用静态成员函数使用如下格式:::();:在类中,静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。因此,静态成员是类的所有对象中共享的成员,而不是某个对象的成员。:静态成员函数和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。原创 2023-08-23 09:00:00 · 164 阅读 · 0 评论 -
C++学习笔记总结练习:C++左值右值
函数内的局部对象做为返回值返回(不是引用)的时候会发生拷贝(拷贝为临时对象返回)函数形参为传值的时候,会发生拷贝构造一个对象以另外一个对象进行初始化的时候对象的频繁构造是程序的开销,特别是当对象内部有堆上内存(比如有 new 出来的成员)的时候,每次拷贝构造的时候都需要用 new 申请一块内存,造成性能的降低。对于情况2,好习惯是如果函数参数是只读的(也即不会在程序内进行修改),传引用作为参数,也即 pass_A_by_refrence(const A &a);对于情况1,编译器会为我们进行优化。原创 2023-08-20 16:00:00 · 177 阅读 · 0 评论 -
C++学习笔记总结练习:primer 学习日志
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OmcL9TWm-1692172569911)(C:\Users\pro\AppData\Roaming\Typora\typora-user-images\1659097168347.png)]首先const 可以明确指定的类型 例如 const int Month=12其次,使用const 可以将变量只指定在你想指定的范围中,#define指定在全局中最后,const可用于更复杂的数据结构,例如数组等等。原创 2023-08-19 18:00:00 · 200 阅读 · 0 评论 -
C++学习笔记总结练习:C库整理
目录。原创 2023-08-11 15:00:00 · 192 阅读 · 0 评论