
嵌入式软件
文章平均质量分 79
onnx
程序员的每日一拱!
平常喜欢分享项目实践经验,知识点,实战项目,欢迎留言,评论,沟通交流,一起进步。
吾等采石之人,当心怀大教堂之愿景。
愿我们奔赴在自己的热爱里!
展开
-
基于STM32F407ZGT6芯片+多传感器开发的多参数水质监测系统含论文+答辩PPT+软硬件资料
STM32F407ZGT6微控制器:作为系统的核心处理器,负责数据采集、处理及通信逻辑的实现。该芯片具有高性能、低功耗的特点,适用于嵌入式控制系统。水质传感器温度传感器:用于监测水体的温度。pH值传感器:用于监测水体的酸碱度。溶解氧传感器:用于监测水体中的溶解氧含量。电导率传感器:用于监测水体的电导率。无线通信模块:通过Wi-Fi或LoRa等无线通信技术,实现数据的远程传输。本项目选用ESP8266 Wi-Fi模块。电源模块:为整个系统提供稳定的电源。原创 2024-11-25 08:30:00 · 1683 阅读 · 0 评论 -
C语言基于AVR单片机的电子万年历设计-附项目源码+论文
AVR单片机:作为系统的核心处理器,负责数据处理和控制逻辑的实现。本项目选用ATmega328P单片机。RTC模块:用于提供精确的时间基准。本项目选用DS3231实时时钟模块。LCD显示模块:用于显示时间、日期和星期等信息。本项目选用1602字符型LCD显示屏。按键模块:用于设置时间和日期。本项目使用4个按键,分别用于增加、减少、确认和返回操作。电源模块:为整个系统提供稳定的电源。原创 2024-11-24 12:00:00 · 808 阅读 · 0 评论 -
基于STM32的智能温室大棚控制系统设计(含软硬件及全部资料+说明文档)
STM32微控制器:作为系统的核心处理器,负责数据采集、处理及控制逻辑的实现。温度传感器:用于监测温室内的温度。湿度传感器:用于监测温室内的湿度。光照强度传感器:用于监测温室内的光照强度。土壤湿度传感器:用于监测土壤的湿度。继电器模块:用于控制风扇、水泵、补光灯等设备的开关。通信模块:通过Wi-Fi或LoRa等无线通信技术,实现远程监控和数据传输。LCD显示模块:用于显示当前的环境参数和系统状态。原创 2024-11-24 10:00:00 · 1983 阅读 · 0 评论 -
课程设计:基于FPGA的出租车计价系统
FPGA控制模块:选用Xilinx或Altera系列的FPGA芯片,利用VHDL/Verilog语言编写控制逻辑。传感器模块:采用霍尔效应传感器检测车轮转动次数,进而计算行驶距离。显示模块:使用7段数码管或LCD屏显示相关信息。按键模块:包含启动、停止等几个按键,用于控制计价过程。电源模块:为系统提供5V或3.3V直流电。原创 2024-11-23 12:30:00 · 1692 阅读 · 0 评论 -
基于51单片机的嵌入式油烟机控制系统设计含源码+原理图+说明文档
51单片机:作为系统的核心处理器,负责接收来自各传感器的数据,并根据预设算法控制风扇的转速。烟雾传感器:用于检测厨房内油烟浓度的变化,为系统提供实时数据支持。温度传感器:监测厨房温度,辅助判断油烟产生情况。风扇驱动模块:接收单片机发出的指令,调整风扇转速以适应不同的油烟浓度。按键模块:允许用户手动设置工作模式或调整参数。LCD显示模块:用于显示当前的工作状态、油烟浓度等信息。原创 2024-11-22 09:30:00 · 675 阅读 · 0 评论 -
基于STC89C52单片机的简易温度测量系统+设计报告(含温度测量、时间显示、时间修改、数据记录和数据回显等功能)
🚀完整项目源码下载链接👉。原创 2024-11-21 09:00:00 · 616 阅读 · 0 评论 -
基于STM32F407VET6单片机的自动泊车系统设计--含设计报告和文档资料
在相邻车库有车的情况下完成倒车入库和侧方位入库。在相邻车库无车的情况下完成倒车入库和侧方位入库。能够连续完成上述功能组合。原创 2024-11-20 10:45:00 · 1004 阅读 · 0 评论 -
基于单片机矿工生理状态监测系统的设计与实现-含源码+论文
本文通过查阅国内外相关资料,设计并实现了一套基于单片机的矿工生理状态监测系统。该系统能够实时监测矿工的体温、心率、血氧值和物理角度,并通过WiFi模块将数据传输到云平台,有效提高了矿工的工作安全性和健康水平。硬件优化:提高传感器的灵敏度和准确性,增强数据采集和传输的稳定性和可靠性。软件优化:开发更加高效、准确和实用的算法,提高数据处理和分析的精度和效率。应用拓展:探索生理状态监测系统的应用领域和未来发展方向,将其技术应用到其他行业和领域中,为人们的生产生活提供更加安全、健康和高效的保障。原创 2024-11-20 08:00:00 · 1964 阅读 · 0 评论 -
嵌入式系统习题库及答案
嵌入式系统习题库及答案## 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 · 1443 阅读 · 0 评论 -
威泰视信嵌入式软件工程师笔试题
硬件看门狗,又叫 watchdog timer,是一个定时器电路, 一般有一个输入,叫喂狗,一个输出到MCU的RST端,MCU正常工作的时候,每隔一端时间输出一个信号到喂狗端,给 WDT 清零,如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT 定时超过,就回给出一个[复位信号]到MCU,是MCU复位. 防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。只要你代码或配置有改动,都要重新编译的,只是如果代码写成块模式的,不用整个代码都重新编译,编译器会自动编译改动了的代码。原创 2024-06-21 11:00:00 · 2030 阅读 · 0 评论 -
易兆微电子_嵌入式软件工程师笔试题
修饰符extern用在变量或者函数的声明前,用来说明 “ 此变量 / 函数是在别处定义的,要在此处引用 ”。1.关键字 extern是什么含义, 请举例说明。3.举例 解释 “ 宏 ” 的作用。嵌入式软件工程师笔试题(十七)2.根据规律问号处应是何图形?4.写出下面代码的打印结果。以下程序的输出结果是。原创 2024-06-20 19:00:00 · 278 阅读 · 0 评论 -
Linux设备驱动开发详解
设备驱动提供了硬件和应用软件之间的纽带应用软件时只需 调用系统软件的应用编程接口(API) 就可让硬件去完成要求的工作。原创 2024-05-16 08:30:00 · 2052 阅读 · 0 评论 -
AT&T ASM Syntax
开发一个OS,尽管绝大部分代码只需要用C/C++等高级语言就可以了,但至少和硬件相关部分的代码需要使用汇编语言,另外,由于启动部分的代码有大小限制,使用精练的汇编可以缩小目标代码的Size。另外,对于某些需要被经常调用的代码,使用汇编来写可以提高性能。所以我们必须了解汇编语言,即使你有可能并不喜欢它。如果你是计算机专业的话,在大学里你应该学习过Intel格式的8086/80386汇编,这里就不再讨论。原创 2024-05-16 13:45:00 · 1991 阅读 · 0 评论 -
Linux 块设备驱动
是针对存储设备的,比如 SD 卡、 EMMC、 NAND Flash、 Nor Flash、 SPI Flash、机械硬盘、固态硬盘等所以其实就是这些存储设备驱动与字符设备相比 :块设备只能以进行读写访问,块是 linux 虚拟文件系统**(VFS**)基本的数据传输单位。字符设备是以进行数据传输的,不需要缓冲。块设备在结构上是可以进行的,对于这些设备的读写都是进行的,块设备一般都是使用来暂时存放数据,等到条件成熟后 , 在一次性将缓冲区中的数据写入块设备中。原创 2024-05-15 13:15:00 · 556 阅读 · 0 评论 -
嵌入式文件系统
在计算机系统中, 需要用到大量的程序和数据, 它们大部分以文件的形式存放在外部存储当中, 根据需要可随时调入内存使用必须熟悉外存的物理特性了解各种存储文件的属性记录文件在外存上的存储位置在多用户环境下, 必须能保证数据的安全性和一致性为了解决文件的管理问题, 在操作系统中出现了—文件系统负责存储器中文件的组织和分配提高对存储器资源的利用效率将文件的存取、 共享和保护等功能提供给操作系统和用户简化用户对文件的各项操作保证在多用户环境下文件的安全性和一致性。原创 2024-05-15 10:45:00 · 1427 阅读 · 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 · 946 阅读 · 0 评论 -
Linux字符设备驱动设计
计算机系统中存在着大量的设备, 操作系统要求能够控制和管理这些硬件, 而驱动就是帮助操作系统完成这个任务。驱动相当于硬件的接口, 它直接操作、 控制着我们的硬件, 操作系统通过驱动这个接口才能管理硬件。原创 2024-05-13 16:45:00 · 906 阅读 · 0 评论 -
Linux设备驱动核心
信号量采用睡眠等待机制: 如果有一个任务试图获得一个已经被占用的信号量时, 信号量会将其推到一个等待队列中睡眠, 当持有信号量的进程将信号量释放后, 处于等待队列中的那个任务被唤醒, 并将获得该信号量。中断上下文: 中断服务程序执行时所处的内核环境,CPU的所有寄存器的值、 中断相关的硬件参数( 中断控制器的寄存器中的值) 、 被打断进程的信息等。如果CPU接收到一个中断, 它会停止一切工作,调用中断处理函数, 因为进程调度依赖中断, 此时进程调度也会停止, 所以就要求我们的中断处理一定要快。原创 2024-05-13 09:00:00 · 992 阅读 · 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 · 920 阅读 · 0 评论 -
6818Linux内核--Bootloader应用分析
Bootloader中文解释为:启动引导程序Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 Boot Loader 几乎是不可能的。原创 2024-05-12 10:45:00 · 1771 阅读 · 0 评论 -
操作系统基础知识
有了进程,还需要多线程的理由:在一个应用程序中同时发生着多种活动(可以想象一下word应用,打字、显示、磁盘备份等工作。当磁盘备份的时候按理来说鼠标键盘不能用,因为CPU不在这些控制上。)其中某些活动会随着时间的推移被阻塞,如果我们将这些应用分解成可以准并行运行的多个顺序线程,设计模型会比较简单。如果不这样设计,你得考虑单线程下的两种情况吧。第一种是顺序进行,但是阻塞,就得等阻塞的应用得到相应的输出你才能继续进行下面的活动,在阻塞的时候CPU是没有被利用的。第二种就是有限状态机,回调函数这种的。原创 2023-11-22 11:45:00 · 486 阅读 · 0 评论 -
linux高性能服务器
TCPIP协议在最开始是没有客户端和服务端的概念的,但是现实中我们的很多应用都需要服务器提供服务然后客户端去访问这些服务,数据资源被提供者所垄断。C/S模型服务器启动之后,首先创建一个或者多个监听socket,然后调用bind函数将其绑定到服务器的相关端口上,然后调用listen函数等待客户端的连接。服务器运行稳定之后,客户端就调用connect函数向服务器发起连接请求。由于客户请求的到达是随机的异步事件,因此服务器要用某种IO模型来监听这一事件。原创 2023-11-21 14:38:57 · 421 阅读 · 0 评论 -
c++语言核心及进阶
默认构造函数默认构造函数要么没有参数,要么所有参数都有默认值才行。如果类为定义任何构造函数,编译器将自动定义一个默认构造函数用来创建对象。如果派生类构造函数的成员初始化列表没有显式的调用基类构造函数,则编译器将使用基类的默认构造函数来构造派生类对象的基类部分。拷贝构造函数将新对象初始化为一个已存在的对象按值将对象作为参数传递给函数函数按值类型返回对象编译器临城临时对象编译器会默认提供拷贝构造函数,但不提供具体定义。当类中有动态内存分配的情况时需要自定义拷贝构造函数赋值运算符。原创 2023-11-21 14:36:37 · 380 阅读 · 0 评论 -
C++学习笔记总结练习:多态与虚函数
重定义:基类中没有声明函数是虚函数。派生类中对普通函数进行了重定义。只是作用域上的覆盖,没有触发多态和动态绑定。重定义不能触发动态多态。无论指针或引用绑定的是什么对象,都会根据指针或引用的类型,调用该类型的函数。而不是使用虚指针查找虚函数表。只有调用虚函数的时候,才会去根据对象的虚函数指针,查找类中的虚函数表。return a;return a;int real_ex(){//重定义A的函数return b;原创 2023-09-02 20:31:31 · 621 阅读 · 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 · 180 阅读 · 0 评论 -
C++学习笔记总结练习:类与对象
面向对象程序设计(Object-Oriented Programming,简称 OOP)是一种编程范式,它将程序组织为对象的集合,这些对象通过相互之间的交互来完成任务。在面向对象编程中,对象是程序的基本单元,具有属性(数据)和方法(行为)。面向对象程序设计的核心概念包括:类(Class):类是对象的模板或蓝图,描述了对象的属性和方法。它定义了对象的结构和行为。例如,一个 “汽车” 类可以定义汽车的属性(如颜色、品牌、速度)和方法(如加速、刹车)。原创 2023-08-31 09:00:00 · 314 阅读 · 0 评论 -
C++学习笔记总结练习:运算符重载两种方式
运算符时具有特殊名字的函数:由关键字operator和气候定义的运算符共同组成。可以被重载的运算符。原创 2023-08-30 19:30:00 · 1131 阅读 · 0 评论 -
C++学习笔记总结练习:构造函数和析构函数
析构函数与构造函数对应,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统会自动执行析构函数。类的成员函数,由拨浪号接类名构成,没有返回值,不接受参数。不能被重载,一个类只有一个析构函数。声明一个符号。如果有extern,则表示变量在外部顶底,链接其他问件事,匹配外部定义的变量。分配内存、指定变量名。原创 2023-08-30 08:30:00 · 211 阅读 · 0 评论 -
C++学习笔记总结练习:C内存分配与初始化
然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。到最后,空闲链会被切成很多的小内存片段,如果这时用户申请一个大的内存片段,那么空闲链上可能没有满足用户要求的片段了。于是,malloc函数请求延时,并开始在空闲链上,检查各个内存片段,对他们进行整理,将相邻的小空闲块合并成较大的内存块。malloc分配的内存是位于堆中的,并且没有初始化内存的内容,因此基本上malloc之后,调用函数memset来初始化这部分的内存空间。功能:返回一个指向n个连续字符存储单元的指针。原创 2023-08-29 16:45:00 · 283 阅读 · 0 评论 -
C++学习笔记总结练习:数组参数
函数使用循环遍历数组,并打印每个元素。在 main 函数中,我们定义了一个整数数组 myArray,并计算数组的大小。传递数组:当你调用带有数组参数的函数时,你可以传递一个数组作为实际参数。数组大小:在函数中,你可以使用数组参数来访问数组元素,并使用数组大小来遍历数组。然而,在 C++ 中,数组参数的大小信息在函数内部是不可用的,因此通常需要额外的参数来传递数组的大小。数组指针:在函数中,数组参数实际上是一个指向数组首元素的指针。这意味着你可以将一个数组作为函数的参数,以便在函数内部对数组进行操作或访问。原创 2023-08-29 10:30:00 · 379 阅读 · 0 评论 -
C++学习笔记总结练习:new和delete使用及讲解
参考文献new operator/delete operator就是new和delete操作符。而operator new/operator delete是全局函数。原创 2023-08-28 09:42:53 · 379 阅读 · 0 评论 -
C++学习笔记总结练习:字符串类实现
使用构造函数初始化字符串的另外两种方式,动态指针+拷贝构造函数 )查找某字符串是否位于指定的字符串中(采用暴力查找)缺省构造函数对字符串的初始化MyString()实现头文件的封装:MyString.h。析构函数,释放动态申请的字符串空间。重载下标运算符 [],索引输出。字符串中指定两个字符的交换。重载输出运算符原创 2023-08-28 19:30:00 · 325 阅读 · 2 评论 -
C++学习笔记总结练习:内存对齐
编译器为程序中的每个“数据单元”安排在适当的位置上。原创 2023-08-28 09:40:30 · 423 阅读 · 0 评论 -
C++学习笔记总结练习:数组离散化的方法
ai。原创 2023-08-27 15:00:00 · 438 阅读 · 0 评论 -
C++学习笔记总结练习:多态的三种实现方式
重定义是在不同作用域内的(一个在父类一个在子类),只要函数名相同,且不构成重写,均称之为重定义。原创 2023-08-27 09:30:00 · 2398 阅读 · 0 评论 -
C++学习笔记总结练习:动态内存管理实现
因为 malloc 只负责开辟空间,并不会调用对象的构造函数对其成员变量进行初始化,那么内部的成员变量是没有分配空间的,当我们调用 delete 时,delete会先对对象进行资源清理,但是对象里的资源 malloc 并没有给其分配,所以我们清理的时候是非法的操作。对于内部有资源的自定义类型,使用 new 开辟的空间使用 free 释放,会造成内存泄漏,因为 free 并不会调用析构函数清理对象的资源,因此会造成资源泄漏。对于内置类型:如果没有配合使用,可能不会出现什么问题。原创 2023-08-26 10:00:00 · 230 阅读 · 0 评论 -
C++学习笔记总结练习:nullptr、NULL、0
参考文献。原创 2023-08-25 18:30:00 · 191 阅读 · 0 评论 -
C++学习笔记总结练习:初始化的方法
参考文献。原创 2023-08-25 11:45:00 · 202 阅读 · 0 评论 -
C++学习笔记总结练习:强制类型转换
static_cast 相当于传统的 C 语言里的强制转换,该运算符把 expression 转换为 new_type 类型,用来强迫隐式转换,例如 non-const 对象转为 const 对象,编译时检查,用于非多态的转换,可以转换指针及其他,但没有运行时类型检查来保证转换的安全性。new_type 必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,再把该整数转换成原类型的指针,还可以得到原先的指针值)。原创 2023-08-24 20:00:00 · 188 阅读 · 0 评论 -
C++学习笔记总结练习:字符串转换_数组转换_数组转 vector_vector 转数组
由于 vector 内部的数据是存放在连续的存储空间,vector 转数组事实上只需要获取 vector 中第一个数据的地址和数据的长度即可。如果仅仅是传参,无需任何操作,直接传地址即可,如果要进行数据复制,可以借用内存拷贝函数“memcpy”。数组也是 C++中很重要的复杂类型之一。vector 是对象类型。C++支持数组的迭代器运算。建议尽量使用标准库类型,而非数组。原创 2023-08-24 09:00:00 · 256 阅读 · 0 评论