- 博客(25)
- 收藏
- 关注
原创 CUnit单元测试架构研究
1.Cunit介绍CUnit是一个对C语言编写的程序进行单元测试的框架,它作为一个静态链接库被链接到用户的测试代码中,它提供了一种简洁的框架来建立测试架构,并提供丰富的断言来测试通过数据类型。它还提供了许多不同的结构来运行测试用例和报告测试结果。1.1CUnit的架构(1)每个测试用例被包装在一个测试包(suite)中(2)每个测试包(suite)是在有效的测试注册单元(Test Registry)注册单元下面包含多个测试包,每个测试包可以拥有多个测试用例,至于测试用例,则用来测试模块内部的函数
2022-07-11 13:53:53
1432
原创 异构核间通信mailbox原理研究
mailbox原理用于在片上处理器之间通信的一种mailbox队列中断机制,mailbox队列中断机制允许软件通过一组寄存器和关联的中断设置和得到信息在二个处理之间建立通信渠道。mailbox寄存器解析MAILBOX_SYSCONFIG寄存器该寄存器控制通讯接口的各种参数,如下图所示可以控制复位的操作,空闲模式等MAILBOX_MESSAGE_m寄存器如下图所示MAILBOX_MESSAGE_m寄存器为消息寄存器,用于存储邮箱的下一条要读取的消息,读取完将从FIFO队列中删除该消息。如
2022-04-23 14:50:52
10477
原创 ELF文件结构的研究
LEF文件格式LEF文件有二种视图,一种是链接视图,一种是执行视图链接视图是以节(section)为单位,执行视图是以段(segment)为单位,链接视图就是在链接时用到的视图,而执行视图则时用到的视图。上图左测的视图是执行来看的。总个文件可以分为4个部分1.ELF header :描述整个文件的组织2.Program Header Table :描述文件中的各种segments,用来告诉系统如何创建进程映像的。3.sections 或者segment:segments是从运行的角度来描述
2022-04-23 14:46:09
968
原创 u-boot加载dsp代码分析
加载dsp核心由下面的spl_load_cores函数作为入口进行执行。函数中主要执行spl_mmc_load_core函数将dsp核心执行文件从文件中加载到缓存。spl_boot_core函数对已经加载到缓存的执行文件进行处理然后加载到指定的内存还有对dsp设备进行配置然后启动核心。void spl_load_cores(u32 boot_device, u32 *cores, u32 numcores){ u32 i = 0; for (i = 0; i < numcores ; i++
2022-04-23 14:42:40
565
原创 结合RTC驱动浅析I2C子系统技术研究
文章目录1. I2C子系统总体架构1.1 I2C子系统的组成部分1.2 I2C子系统相关的结构体2. i2c_adapter适配器分析2.1设备树文件device2.2适配器驱动driver2.3 i2c_client读写操作2.4 i2c-dev代码分析2.5芯片pin脚配置3. i2c_client分析3.1. i2c_client设备树文件3.2设备驱动driver4.RTC分析4.1RTC设备的注册4.2 rtc的函数操作集4.3 rtc代码修改4.4实验效果1. I2C子系统总体架构I2C子系
2022-04-23 14:37:41
562
原创 浅析解决并发和竞态技术问题研究
文章目录1. 并发与竞态1.1 对称多处理器SMP的多个CPU1.2 单CPU内进程与抢占它的进程1.3中断与进程之间2. 解决竞态问题2.1中断屏蔽2.2自旋锁2.3信号量2.4互斥体3.互斥体使用3.1驱动加上互斥体3.2互斥体简单测试3.3测试过程错误处理1. 并发与竞态并发指的是多个执行单元同时,并行被执行比如当设备被一个程序打开时,存在被另一个程序打开的可能,如果两个或多个程序同时对设备文件进行写操作,这就是说我们的设备资源同时被多个进程使用,对共享资源(硬件资源、和软件上的全局变量、静态变量
2022-04-23 14:26:06
1199
原创 操作内存的字符设备驱动
文章目录1.字符设备基础知识1.1 字符设备的结构分析1.2 cdev 结构体解析1.3 设备号相应操作2.分析加载函数代码和创建设备号节点2.1 字符驱动源码2.2分析驱动加载函数代码2.3创建字符设备节点3.实现函数代码分析和调试程序3.1实现函数的分析4.卸载驱动函数分析4.1分析模块卸载函数1.字符设备基础知识1.1 字符设备的结构分析如下图是字符设备、字符设备驱动与用户空间访问该设备的程序三者之间的关系如上图在linux内核中:(1)使用cdev结构体来描述字符设备(2)通过c
2022-04-23 14:21:55
882
原创 ”打印hello world“驱动的分析报告
[toc]1.驱动程序模块框架下面是一个简单驱动程序的基本的模块框架头文件 #include <linux/init.h> #include <linux/module.h>模块加载函数和模块卸载函数 static int __init hello_init(void) { printk("---------%s------------\n",__FUNCTION__);
2022-04-23 14:14:46
694
原创 设备树学习报告
文章目录1. 设备树的基本概念1.1 什么是设备树1.2 设备树的组成2. 设备树的基本结构2.1 设备树的基本构造2.3内核与节点匹配2.4 自定义属性的设置与获取1. 设备树的基本概念1.1 什么是设备树在linux3.x版本之前的内核源码,存在大量对板级细节信息的描述造成内核源码的冗余。为了解决这个问题引入了设备树官方对设备树的描述是: 一个描述硬件的数据结构 设备树通过bootloader将硬件资源传给内核。使内核和硬件资源描述相对独立1.2 设备树的组成设备树的主要由三部分组成 DT
2022-04-23 14:07:15
1556
原创 GPMC驱动理论学习报告
文章目录1.GPMC数据传输的原理1.1 GPMC与设备连接模式1.2 GPMC信号线1.3 GPMC 功能描述2. GPMC数据传输2.1 GPMC 初始化2.2 GPMC 配置NOR模式2.3 片选配置地址和大小2.4 GPMC的时间参数设置3.引脚属性设置1.GPMC数据传输的原理GPMC的全称是 General-Purpose Memory Controller,即通用控制器,是要开发用到的AM5728芯片用于NOR FLASH NAND FLASH SRAM 等等通信的一个接口。 这里以实现了
2022-04-23 14:03:09
2402
原创 CAN驱动开发理论技术报告
文章目录1 CAN总线介绍1.1 CAN总线特点1.2 CAN总线物理层2. CAN数据传输2.1. 总线电平2.2 .CAN信号传输2.3 CAN数据传输3.引脚属性设置1 CAN总线介绍CAN总线(Controller Area Network,控制器局域网络)由德国博世公司于上世纪80年代提出,是一种能够实现分布式实时控制的串行通信网络。1.1 CAN总线特点CAN总线是一种串行数据通讯协议,其中包含了CAN协议的物理层及数据链路层。以完成对数据的位填充,数据块编码,循环冗余效验,帧优先级的判
2022-04-23 13:59:48
870
原创 libmetal 学习笔记
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2022-01-08 22:58:42
2687
原创 GPMC开发笔记(TI开发者推荐笔记)
因为gpmc(General-Purpose Memory Controller)是TI特有的驱动,gpmc的资料比较少,本人开发gpmc驱动算是摸了很多石头过河的。所以想通过这遍文章可以给也做GPMC驱动开发的后来者有一点参考价值。文章如有瑕疵也请各位批评改正。1.GPMC介绍gpmc主要用于与nandflash,norflash,fpga进行通信。在这里主要介绍gpmc16位数据和地址线不复用nor模式下的通信。注意:在这种模式下gpmc_a[0]引脚是没法使用的1.1GPMC信号线
2020-05-31 10:32:51
6507
4
原创 C语言实现链表(非常简单实用)
下面是用C语言实现一个简单链表的代码#include <stdio.h>#include <stdlib.h>typedef struct linked_list{ int date; void *next;}link;void insert_link(link *link_list, int data);void delete_link(link *link_list);void add_link(link *link_list, int date,.
2020-05-19 22:22:46
3068
原创 strlen函数的实现(非常实用)
下面代码所示是本人造的一个轮子imitate_strlen函数,对比一下系统类库strlen函数进行进行造轮子。#include <stdio.h>#include <stdlib.h>#include <string.h>int imitate_strlen(const char * string);int main() { int string_len; char *string_name = "share666666"; s...
2020-05-10 19:59:14
582
2
原创 CAN开发笔记(TI开发者推荐笔记)
查阅了很多资料没有查阅到关于5728芯片CAN模块寄存器的介绍,希望通过本文能给做CAN驱动的后来者有一点参考意义,我也是刚接触CAN模块有些不足请各位多多指正。由下图所示是CAN模块初始化流程图首先要开始初始化,设置CAN位时间,然后配置message objects, 完成初始化。1.开始初始化首先要控制DCAN_CTL 寄存器,该寄存器是CAN模块的总控制器,很多配置通过...
2020-03-31 21:47:47
2820
原创 C语言从入门程序
1.程序下面是C语入门级的代码 打印出hello world#include <stdio.h>int main(void) { /* 程序编译后运行后输出 "hello world" */ printf("hello world"); return 0;}2.程序运行对程序进行编译并运行...
2020-02-24 23:20:01
159
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人