- 博客(54)
- 资源 (1)
- 收藏
- 关注
原创 展锐T820平台Android11开发:kernel设备树编译问题
展锐平台的kernel具有多board自适应功能,即相同体系架构的两个不同的board间,boot.img、socko.img/odmko(vendorboot.img)、dtbo.img是可替换的,这些镜像文件称为R-img(Replaceable images,可替换的镜像)。要实现这样的效果,R-img都要满足一个共性条件就是SOC级的。针对R-img设备树相关成员的策略如下:(1)dtb.img它是SoC级的,即同一款芯片同体系架构的不同board共用一个dtb。
2024-06-23 12:50:19
587
原创 类的函数成员(四):赋值函数
在某些情况下,缺省赋值函数对类与对象的安全性和处理的正确性还不够,这时就要求类的设计者提供自定义的赋值函数。: mov %rcx,0x10(%rbp) //将对象stu1的地址压入栈中: mov %rdx,0x18(%rbp)//将对象stu的地址压入栈中: mov 0x10(%rbp),%rax//从栈中取出对象stu1的地址,传送给rax= &stu)的实现: mov 0x18(%rbp),%rax//从栈中取出对象stu的地址,传送给rax。
2024-04-09 22:09:26
827
原创 嵌入式系统基础知识(二):什么是实时系统?
实时系统,英文全称为Real-time Operating System,简称RTOS,它的正确性不仅依赖于系统计算的逻辑结果,还依赖于产生这个结果的时间。实时系统能够在指定或者确定的时间内完成系统功能和对外部或内部、同步或异步时间做出响应的系统。因此,实时系统应该有在事先定义的时间范围内识别和处理离散事件的能力;系统能够处理和存储控制系统所需要的大量数据。
2024-04-04 10:31:34
332
原创 嵌入式系统基础知识(一):嵌入式系统是什么?
根据IEEE(国际电气和电子工程师协会)的定义,嵌入式系统是“控制、监视或者辅助设备、机器和车间运行的装置”。这主要是从应用上加以定义的,从中可看出嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。目前,国内一个普遍被认同的定义是:以应用为中心、以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。可以这样认为,嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。
2024-04-01 23:04:23
355
2
原创 类的函数成员(三):拷贝构造函数
通常按成员语义支持已经足够。但在某些情况下,它对类与对象的安全性和处理的正确性还不够,这时就要求类的设计者提供特殊的拷贝构造函数定义。
2024-04-01 22:21:33
1467
2
原创 类的函数成员(二):析构函数
析构函数(destructor) 与构造函数相反,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作。例如,在建立对象时用new开辟了一片内存空间,delete会自动调用析构函数后释放内存。析构函数有如下特点:1. 构函数名与类名相同,但在前面加上字符‘~’。2. 析构函数无函数返回类型,与构造函数在这方面是一样的。但析构函数不带任何参数。3.一个类有一个也只有一个析构函数,这与构造函数不同。析构函数可以缺省。
2024-03-31 18:06:55
315
原创 C++数据类型(一):一文看懂C++引用的本质
函数的参数传递方式主要有传值和传指针。在函数域中为参数分配内存,而把实参的数值传递到新分配的内存中。它的优点是有效避免函数的副作用。2.传指针这里有两种传递方式。(1)指针传递(2)引用传递。这里将引用也归类为指针,是有依据的。下面详细分析、寻找引用的本质。二.什么是引用?引用(reference)是C++中一种新的导出型数据类型,它又称别名(alias)。引用不是定义一个新的变量,而是给一个已经定义的变量重新起一个别名,也就是C++系统不为引用类型变量分配内存空间。
2024-03-31 16:18:54
1250
原创 一文看懂this指针的本质
如下图所示。用同一个类实例化了两个对象,它们共用同一份成员函数的拷贝。既然是同一份拷贝,那么成员函数又怎么知道是取哪一个对象的成员数据呢?
2024-03-30 12:40:58
955
原创 x86的内存分段机制
采用分段策略之后,一个内存单元的地址实际上就可以用“段:偏移”或者“段地址:偏移地址”来表示,这就是通常所说的逻辑地址。为了在硬件一级提供对“段地址:偏移地址”内存访问模式的支持,处理器至少要提供两个段寄存器,分别是代码段寄存器(CS)和数据段寄存器(DS)。对 CS 内容的改变将导致处理器从新的代码段开始执行。同样,在开始访问内存中的数据之前,也必须首先设置好 DS 寄存器,使之指向数据段。除此之外,最重要的是, 当处理器访问内存时,它把指令中指定的内存地址看成是段内的偏移地址,而不是物理地址。
2024-03-28 23:05:22
679
原创 类的定义与实例化
直接在类体内定义函数。如下图所示。在类体内声明函数,在类外定义函数。返回值类型 类名::函数名(参数表)……其中运算符“::”称为作用域解析运算符,它指出该函数是属于哪一个类的成员函数。
2024-03-28 22:11:34
1228
原创 面向对象语言的全局认识
学习一门语言,就像在一座陌生的城市旅游,第一步应该找一张这座城市的地图,对这座城市有个整体的了解,然后寻找自己的目的地,不至于迷失方向。一句话:先整体,再局部。
2024-03-27 22:23:21
945
原创 计算机基础(一):运算单元
参与运算的数集只有0与1的运算,称为布尔代数。因为1与0也对应逻辑中的“真”和“假”,所以也称为逻辑运算。1847年,乔治.布尔在他的《逻辑的数学分析》一书中引入了布尔代数,提出了用数学的方法来研究逻辑关系。
2024-03-26 20:27:29
253
原创 CAN总线系列(二):链路层芯片MCP2515解读
Microchip 的MCP2515 是一款独立控制器局域网络(Controller Area Network, CAN)协议控制器,完全支持CAN V2.0B 技术规范。它是CAN协议中数据链路层的芯片。
2024-03-25 21:15:48
2280
原创 CAN总线系列(一):协议概述
由于差动信号放大器总是用CAN-High线上的电压(3.5V-X)减去CAN-Low线上的电压(1.5V-X),即(3.5V - X) - (1.5V - X) = 2V。ISO11519-2 隐性电平的电压差为-1.5V,显性电平的电压差为 3.0V,两电平的差别为 3.0V-( -1.5V) =4.5V。②隐性电平,定义为逻辑 1。(1)发送单元:在发送数据帧和远程帧的时候,SOF—CRC段的数据,相同电平如果持续5bit,在下一个bit(第6bit)则要插入1bit与前5bit反向的电平。
2024-03-25 20:42:35
1344
原创 I2C系列(四):软件模拟I2C读写24C02/04/08/16
下面改进《》程序,编写适用于24C02/24C04/24C08/24C16 的两个通用读写函数。根据芯片的 DATASHEET:写数据到 EEPROM 时,因部分地址位不能自增,故需进行页边界处理;而从 EEPROM 读数据时,所有地址位都可以自增,故不需进行页边界处理。
2024-03-23 17:14:17
649
原创 I2C系列(三):软件模拟I2C读写24C02
定义如下命令:①C——串口接收数据函数初始化②S——单片机将接收到的数据发送到串口调试终端显示,以确认单片机是否已正确接收数据③W——将接收缓冲区 wbuf 中的数据写入 EEPROM 中④r——将刚才写入 EEPROM 中的数据读出到缓冲区 rbuf 中,并发送到串口调试终端显示/*接收数据统计*//*串口调试软件终端发送的命令标识*/#define NOP_num 60/*延时函数中 NOP()指令的执行次数*/
2024-03-23 15:27:49
1858
原创 I2C系列(二):I2C芯片24C02/4/8/16(EEPROM)解读
这个地方值得注意:引脚A0、A1和A2只用来定义器件地址,不能用来选择内部ROM单元地址。故此,无论外部引脚如何连接,都不影响内部ROM地址的选择。写到页边界时,要继续写下一页或其它页,必须产生一个停止信号,然后再产生一个开始信号,接着由主机传送目标页的地址,以开始在目标页的写操作。根据24C02芯片的Datasheet描述,其内部存储结构应该如下图所示。其它容量的EEPROM内部结构依此类推。页边界的停止信号不能缺少,否则会出错。下面简述EEPROM内部存储结构。
2024-03-22 19:58:51
888
原创 I2C系列(一):一文读懂I2C协议
I2C必须使用开漏(或集电极开路)的引脚,其引脚框图如下所示。SCL0对应78K0的P6.0引脚,SDA0对应78K0的P6.1引脚。在使用开漏引脚通信时,需注意如下事项:1)两条总线须外接上拉电阻;2)通信前须设置引脚的I/O模式:①输出信号时,PM6.0/PM6.1=0;②输入信号时,PM6.0/PM6.1=1;。3)开漏输出属于“线与”逻辑。故此,将总线置1即为释放总线,而总线上任一引脚置0,总线即为0。
2024-03-22 19:14:32
479
原创 78K0的I/O引脚电路分析
78K0芯片的I/O引脚共45个,由MOS管组成。由于MOS管的逻辑电压具有自身的特点,当与TTL或其它类型的电路连接时,需要进行电平转换。I/O引脚的分类如下图。
2024-03-21 20:31:21
385
原创 78K0最小硬件系统分析
78K0最小硬件系统如下图所示。在应用APPlilet2软件创建一个工程时,软件会第一时间弹出系统设置对话框和看门狗定时器设置对话框。这是对最小硬件系统的初始设置。包括如下选项:(1)系统时钟设置体现在硬件初始化函数hdwinit中。(2)看门狗设置体现在选项字节中。看门狗使用独立的内部低速时钟,监控CPU的运行。(3)存储器最小硬件系统还包括存储器,但为什么没有内存设置选项?Applilet2自动生成的硬件初始化函数hdwinit代码如下:此段代码中包括切换寄存器IMS和IXS的初始化。
2024-03-21 20:21:48
705
原创 78K0启动代码分析
在 PM+的 Tool 菜单下点击“ Compiler Options”,会出现下图对话框:由上图可知,编译器默认使用了启动例程,其目标文件是“ s0l.rel”,同时也使用了库文件“ cl0x.lib/cl0.lib/cl0f.lib”。s0l.rel 通过链接用户程序和相关库文件,最终生成下载模块文件。
2024-03-21 18:33:09
402
原创 78K0/KD2中断分析
78K0/KD2 系统组成框图如下图所示。由图可见, 除了通用 I/O 部件和时钟输出部件因自身功能特点而没有使用中断方式与 CPU 通信外,其它功能部件均使用中断方式向 CPU 提出中断请求。可见, CPU 具有对单片机外部或内部随机发生的事件能进行实时处理。
2024-03-21 00:03:50
181
原创 编程器烧写程序为什么不需要指定地址?
据了解, 主要有两种烧写文件格式: hex 文件和 bin 文件。hex 文件包括数据和地址信息, bin文件格式只包括了数据本身。Hex 文件中的地址信息是编译器在生成 hex 的时候自动添加的。在烧写或下载 hex 文件的时候,一般都不需要用户指定地址,因为 hex文件内容已经包括了地址。中提到的参数文件,而参数文件正是帮助编程器将需要编程的代码烧写到内存中正确的位置的。而烧写 bin 文件的时候,用户是一般需要指定地址信息。用编程器烧写程序时,为什么没有烧写地址设置?
2024-03-20 22:05:30
202
原创 78K0/Kx2 开发套件介绍
常用开发套件如表一所示。在使用以下开发软件中,需要用到以下两种特殊的文件:①设备文件( .78k):描述芯片内部信息的二进制文件。每一个设备文件描述了一款芯片的配置信息。在编译程序过程中,编译工具需要读取设备文件,来得到相应芯片的内存和寄存器信息。所以在编译之前必须首先完成安装设备文件。在用 PM+编译程序的过程中, PM+也需要读取设备文件,来得到芯片的配置信息。
2024-03-20 21:48:21
466
原创 78K0 MCU 外设与接口
78K0 MCU 的组成如下图所示。图中的串行口部件、定时器部件、中断控制部件等周边功能部件均已集成在 MCU 内部,这些部件通过接口芯片挂接在 MCU 内部总线上。
2024-03-20 06:34:14
406
原创 NEC 78K系列MCU概述
NEC,即日本电气株式会社, 经营半导体业务。NEC 倡导“ ALL Flash”,即 MCU 内的程序存储器使用 Flash ROM。为什么用 Flash ROM?与掩膜 ROM 微控制器相比, Flash 微控制器加速了系统开发。微控制器可以在程序完成前订购,也可以在微控制器安装完成后写入程序,缩短了开发周期。NEC 全系列单片机具有选择范围广、易于编程、低功耗、低价格及完善的开发环境等优点,产品广泛应用于汽车设备、 PC 外围设备、家用电器、工业设备等多个领域。
2024-03-19 20:35:51
1522
原创 焊接基础知识
什么?做软件还要学习焊接知识?!是的。因为在一些规模不大的小公司,分工不明细,往往一个人身兼数职,单片机软件工程师懂点焊接知识也是需要的。软钎焊,手工烙铁拆卸与焊接。焊接的过程,就是通过加热,让铅锡焊料在焊面上熔化、流动、浸润,使铅锡原子渗透到焊件的表面内,并在两者的接触面上形成合金层。一般使用的焊料是铅锡合金。例如,标签显示,Pb占37%,Sn占63%。此比例的铅锡合金,熔点低,约182℃,且熔点与凝固点相差很小,可看作共晶焊锡。
2024-03-19 20:09:17
1268
原创 Fastboot
Fastboot,英语翻译意思是快速启动。Fastboot是中的一个命令行工具。Fastboot主要用于在电脑上通过USB数据线对Android设备刷入二进制镜像文件(.img)。在安卓手机中Fastboot是一种比recovery更底层的刷机模式(俗称快速引导模式),Fastboot除了用于刷机还可以对Android设备中的分区执行锁定/解锁、擦除/格式化、调试,准确来说Fastboot属于固件通信协议。
2024-03-18 19:59:55
913
原创 MIPI知识总纲
一提到MIPI,有些人认为它就是LCD接口,有些人认为它就是摄像头接口......开发方向不一样,对MIPI概念的认知也不一样。这都是因为对MIPI没有整体认识导致的概念混淆。下面,笔者试图以自身有限的经验揭开MIPI的全貌,为后续深入学习各个细节打下基础。如有错漏,还望各位读者海涵指正。
2024-03-17 20:56:09
980
原创 Android版本说明
不得不说,国外公司的文化就是不一样,连软件版本也用美味甜点为代号,可以想象谷歌公司的工作环境是多么的......你懂的。或许人家的工程师真的把编程当作一种兴趣,甚至是一种艺术追求......扯远了~~但是开发者们为了延续这种代号传统,将Android10也称为AndroidQ,因为Android9是P,按英文字母顺序,Android10自然是Q。下表代号一列,从标红的首字母可以看出,Android版本代号是按照英文顺序划分为不同的系列。依此类推,Android11为R,即Androidr。
2024-03-17 19:41:16
395
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人