自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

嵌入式与Linux那些事的博客

个人公众号【嵌入式与Linux那些事】,每周分享高质量原创文章!

  • 博客(285)
  • 资源 (17)
  • 问答 (1)
  • 收藏
  • 关注

原创 嵌入式软件工程师笔试面试指南目录

嵌入式软件笔试,嵌入式软件面试,程序员简历书写,Linux驱动工程师笔试,Linux驱动工程师面试,BSP工程师笔试,BSP工程师面试,应届生秋招,应届生春招,C/C++笔试题目,C/C++面试题目,C/C++程序员,BSP工程师

2021-06-09 22:37:51 11422 3

原创 【技术交流群内容分享】

榜上有名希望有一天,你也能获得心仪的offer!真心为这些同学感到开心~20210430扫码加我微信备注【交流群】,拉你进群,无备注,不通过。干货分享20210430扫码加我微信备注【交流群】,拉你进群,无备注,不通过。...

2021-05-01 17:18:04 2256 4

原创 嵌入式软件工程师笔试面试指南-ARM体系与架构

嵌入式软件笔试,嵌入式软件面试,程序员简历书写,Linux驱动工程师笔试,Linux驱动工程师面试,BSP工程师笔试,BSP工程师面试,应届生秋招,应届生春招,C/C++笔试题目,C/C++面试题目,C/C++程序员,BSP工程师

2021-04-28 15:22:06 11460 15

原创 嵌入式软件工程师笔试面试指南-C/C++

嵌入式软件笔试,嵌入式软件面试,程序员简历书写,Linux驱动工程师笔试,Linux驱动工程师面试,BSP工程师笔试,BSP工程师面试,应届生秋招,应届生春招,C/C++笔试题目,C/C++面试题目,C/C++程序员,BSP工程师

2021-04-15 17:45:09 16794 7

原创 9个提高代码运行效率的小技巧你知道几个?

我们写程序的目的就是使它在任何情况下都可以稳定工作。一个运行的很快但是结果错误的程序并没有任何用处。在程序开发和优化的过程中,我们必须考虑代码使用的方式,以及影响它的关键因素。通常,我们必须在程序的简洁性与它的运行速度之间做出权衡。今天我们就来聊一聊如何优化程序的性能。

2021-01-10 17:28:38 3096 3

原创 24张图7000字详解计算机中的高速缓存

什么是缓存  缓存又叫高速缓存,是计算机存储器中的一种,本质上和硬盘是一样的,都是用来存储数据和指令的。它们最大的区别在于读取速度的不同。程序一般是放在内存中的,当CPU执行程序的时候,执行完一条指令需要从内存中读取下一条指令,读取内存中的指令要花费100000个时钟周期(缓存读取速度为200个时钟周期,相差500倍),如果每次都从内存中取指令,CPU运行时将花费大量的时间在读取指令上。这显然是一种资源浪费。  如何解决这个问题呢?有人肯定会问,直接把程序存储在缓存中不行吗?   答案是可以的。但是

2020-12-30 22:32:52 4429 14

原创 多图详解缓冲区溢出问题

蠕虫病毒是一种常见的利用Unix系统中的缺点来进行攻击的病毒。缓冲区溢出一个常见的后果是:黑客利用函数调用过程中程序的返回地址,将存放这块地址的指针精准指向计算机中存放攻击代码的位置,造成程序异常中止。为了防止发生严重的后果,计算机会采用栈随机化,利用金丝雀值检查破坏栈,限制代码可执行区域等方法来尽量避免被攻击。虽然,现代计算机已经可以“智能”查错了,但是我们还是要养成良好的编程习惯,尽量避免写出有漏洞的代码,以节省宝贵的时间!

2020-11-18 23:43:21 18415 27

原创 Linux内核中container_of宏的详细解释

上一节[拒绝造轮子!如何移植并使用Linux内核的通用链表(附完整代码实现)](https://blog.csdn.net/qq_16933601/article/details/108542631)我们在分析Linux内核链表的时候注意到内核在求解结构体偏移的时候巧妙的使用了container_of宏定义,今天我们来详细剖析下内核到底是如何求解结构体成员变量的地址的。

2020-09-24 00:27:54 5384 14

原创 拒绝造轮子!如何移植并使用Linux内核的通用链表(附完整代码实现)

在实际的工作中,我们可能会经常使用链表结构来存储数据,特别是嵌入式开发,经常会使用linux内核最经典的双向链表 list_head。本篇文章详细介绍了Linux内核的通用链表是如何实现的,对于经常使用的函数都给出了详细的测试用例,并且移植了Linux内核的链表结构,使得在任意平台都可以方便的调用内核已经写好的函数。建议收藏,以备不时之需!

2020-09-16 00:41:31 3603 27

原创 【内存管理】页面分配机制

Linux内核中是如何分配出页面的,如果我们站在CPU的角度去看这个问题,CPU能分配出来的页面是以物理页面为单位的。也就是我们计算机中常讲的分页机制。本文就看下Linux内核是如何管理,释放和分配这些物理页面的。大家都知道,Linux内核的页面分配器的基本算法是基于伙伴系统的,伙伴系统通俗的讲就是以2^order分配内存的。这些内存块我们就称为伙伴。

2024-06-23 22:28:53 856

原创 【内存管理】内存布局

反过来, 通过物理页面找到映射它的所有虚拟页面叫反向映射(reverse-mapping, RMAP),它可以从page数据结构中找到映射这个page的虚拟地址空间,也就是我们讲过的VMA这个东西,ramp系统是为页面回收服务的,如果要回收一个匿名页面或者page cache的时候, 需要把映射这个页面的用户PTE断开映射关系才可以去回收。刚刚我们讲的都是以页为单位分配的内存。这是为了保证进程在真正使用的时候有足够的内存,因为进程在申请内存后并不一定立即使用,当真正使用的时候,可能部分内存已经被回收了。

2024-06-10 13:12:11 1105

原创 【内存管理】内存管理概述

反过来, 通过物理页面找到映射它的所有虚拟页面叫反向映射(reverse-mapping, RMAP),它可以从page数据结构中找到映射这个page的虚拟地址空间,也就是我们讲过的VMA这个东西,ramp系统是为页面回收服务的,如果要回收一个匿名页面或者page cache的时候, 需要把映射这个页面的用户PTE断开映射关系才可以去回收。刚刚我们讲的都是以页为单位分配的内存。这是为了保证进程在真正使用的时候有足够的内存,因为进程在申请内存后并不一定立即使用,当真正使用的时候,可能部分内存已经被回收了。

2024-06-10 13:11:37 987

原创 【内存管理】页表映射

Linux内核中封装了很多宏来处理页表。

2024-06-10 13:10:37 729

原创 【调试】pstore原理和使用方法总结

pstore最初是用于系统发生oops或panic时,自动保存内核log buffer中的日志。不过在当前内核版本中,其已经支持了更多的功能,如保存console日志、ftrace消息和用户空间日志。同时,它还支持将这些消息保存在不同的存储设备中,如内存、块设备或mtd设备。

2024-02-07 17:51:16 2766 1

原创 【驱动】块设备驱动(四)-块设备驱动层

接着,通过调用通用的文件写入函数进行实际的写入操作,并返回写入操作的结果。例如,如果读取出现错误(retval小于0),或者已经读取完所有数据(iov_iter_count(iter)为0),或者已经读取到文件末尾(*ppos >= size),或者文件是DAX文件(IS_DAX(inode)),则跳过剩余的读取操作,并更新文件的访问时间。:调用通用的执行写入操作的函数generic_perform_write,执行标准缓冲区写入操作,并将写入的起始位置保存到pos中,返回写入的状态码。

2024-02-05 13:51:29 1149

原创 【驱动】块设备驱(三)-IO调度层

每个块设备驱动程序都维持着自己的请求队列,它包含设备待处理的请求链表。如果磁盘控制器正在处理几个磁盘,那么通常每个物理块设备都有一个请求队列。在每个请求队列上单独执行1/O调度,这样可以提高磁盘的性能。最简单的 I/O调度算法。该算法仅适当合并用户请求,并不排序请求:新的请求通常被插在调度队列的开头或末尾,下一个要处理的请求总是队列中的第一个请求。这种算法是为不需要寻道的块设备设计的,如SSD。除了调度队列外,“最后期限”算法还使用了四个队列。

2024-02-05 13:47:18 1221

原创 【驱动】块设备驱动(二)-通用块层

通用块层是一个内核组件,处理来自系统其他组件发出的块设备请求。换句话说,通用块层包含了块设备操作的一些通用函数和数据结构,如通用磁盘结构gendisk,请求队列结构、请求结构request、块设备I/O操作结构bio和块设备操作结构等。

2024-02-05 13:46:08 1207

原创 【驱动】块设备驱动(一)-驱动框架

块设备是针对存储设备的,比如 SD 卡、EMMC、NAND Flash、Nor Flash、SPI Flash、机械硬盘、固态硬盘等。块设备可以从数据的任何位置进行访问块数据总是以固定长度进行传输,即便请求的这是一个字节对块设备的访问有大量的缓存。当进行读时,如果已经缓存了,就直接使用缓存中的数据,而不再读设备,对于写也通过缓存来进行延迟处理。块设备读写是按块(所以叫块设备)进行的,使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。

2024-02-05 13:40:09 1154

原创 【C语言】内联函数总结

inline关键字是C99标准的型关键字,其作用是将函数展开,把函数的代码复制到每一个调用处。这样调用函数的过程就可以直接执行函数代码,而不发生跳转、压栈等一般性函数操作。可以节省时间,也会提高程序的执行速度。内联函数相比宏函数,会进行语法检查。宏函数是在预处理阶段生效,内联函数是在编译阶段进行语法检查然后替换。内联函数相比普通函数,少了上下文切换的步骤所以执行会更快一些。内联函数被多次调用,会使固件大小膨胀,内联函数的高速是以空间来换时间。内联函数不可递归。

2024-02-03 22:18:59 1519

原创 Linux新增/proc文件目录

Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。有时候基于调试方便,可能要新增一个/proc/ 调试接口。这里我随手写一个demo记录下。结构体,填充了open,read,write的回调函数。用户空间使用echo命令时会调用到。如果使用cat节点会调用。

2024-01-21 21:04:23 780

原创 【驱动】I2C驱动分析(六)-I2C驱动模板

Linux I2C驱动是嵌入式Linux驱动开发人员经常需要编写的一种驱动,因为凡是系统中使用到的I2C设备,几乎都需要编写相应的I2C驱动去配置和控制它,例如 RTC实时时钟芯片、音视频采集芯片、音视频输出芯片、EEROM芯片、AD/DA转换芯片等等。下面我们看下如何写一个基本的I2C驱动。

2024-01-18 22:58:20 1326

原创 【驱动】I2C驱动分析(五)-模拟I2C驱动

在drivers/i2c/busses下包含各种I2C总线驱动,使用GPIO模拟I2C总线的驱动i2c-gpio.c,这里只分析i2c-gpio.c。i2c-gpio.c它是gpio模拟I2C总线的驱动,总线也是个设备,在这里将总线当作平台设备处理,那驱动当然是平台设备驱动,看它的驱动注册和注销函数。

2024-01-18 22:57:21 1143

原创 【驱动】I2C驱动分析(四)-关键API解析

在Linux内核源代码中的driver目录下包含一个i2c目录i2c-core.c这个文件实现了I2C核心的功能以及/proc/bus/i2c*接口。i2c-dev.c实现了I2C适配器设备文件的功能,每一个I2C适配器都被分配一个设备。通过适配器访设备时的主设备号都为89,次设备号为0-255。

2024-01-18 22:56:39 1215

原创 【驱动】I2C驱动分析(三)-关键数据类型

i2c_adapter对应与物理上的一个适配器,而i2c_algorithm对应一套通信方法,一个i2c适配器需要i2c_algorithm中提供的(i2c_algorithm中的又是更下层与硬件相关的代码提供)通信函数来控制适配器上产生特定的访问周期。i2c_adapter和i2c_client的关系与i2c硬件体系中适配器和设备的关系一致,即i2c_client依附于i2c_adapter,由于一个适配器上可以连接多个i2c设备,所以i2c_adapter中包含依附于它的i2c_client的链表。

2024-01-18 22:55:56 720

原创 【驱动】I2C驱动分析(二)-驱动框架

I2C 驱动属于总线-设备-驱动模型的,与I2C总线设备驱动模型相比,大体框架是一样,系统的整体框架如下所示。最上层是应用层,在应用层用户可以直接用open read write对设备进行操作,往下是设备驱动层,这个就是外围的比如一些用I2C总线连接到SOC的传感器或者EEPROM的驱动程序,这个一般由普通驱动工程师负责,再往下的I2C-Core是核心层,这个是Linux内核源码里面本来就有的,这里面主要是一些驱动和设备的注册函数以及i2c_transfer函数,

2024-01-18 22:54:57 1269

转载 【驱动】I2C驱动分析(一)-I2C驱协议简介

I²C 叫集成电路总线它是一种串行通信接口,具有双向两线同步串行总线,通常由两根线组成——SDA(串行数据线)和SCL(串行时钟线)和上拉电阻。它们用于需要许多不同部件(例如传感器、引脚、扩展和驱动程序)协同工作的项目,因为它们可以将多达 128 个设备连接到主板,同时保持清晰的通信路径!它用于将各种低速设备连接在一起,如微控制器、EEPROM、A/D 和 D/A 转换器等。与 UART 或 SPI 不同,I2C 总线驱动器是漏极开路的,可防止总线争用并消除驱动器损坏的机会。

2024-01-18 22:54:06 519

原创 Linux 485驱动通信异常

严谨细致。在问题发生时,我也去量过主控和和MCU 485控制管脚的电平,只看到了两者是反向的,但是并没有放大去看最后一段电平的细节。导致遗漏了解决问题的线索。一切问题发生都是有原因的。偶现问题并不好排查,但是我们可以尝试制作偶现问题发生的条件,看有没有可能成为必现问题。如果不能必现,可尝试通过脚本去不断运行在问题发生的场景,使其出现的概率提升。

2024-01-03 22:52:10 1349 1

原创 【驱动】SPI驱动分析(七)-SPI驱动常用调试方法

使用spi_test可以发送和接收SPI数据,以验证spidev驱动的功能和性能。总结起来,spidev驱动提供了一种简单而灵活的方式来与SPI设备进行通信,使得用户可以轻松地在Linux系统上开发和控制SPI设备。根据传入的参数和全局变量的设置,配置SPI传输的参数,并将发送和接收的数据进行打印。这段代码通过解析命令行选项,并根据选项的值设置相应的变量,实现了对命令行参数的解析和处理。通用设备驱动以及对应的ioctl命令实现,可以方便的用来对spi的通用型驱动来进行测试。函数,作为内核模块的初始化函数。

2023-11-30 22:53:06 3115

原创 【驱动】SPI驱动分析(六)-RK SPI驱动分析

Linux的spi接口驱动实现目录在下。这个目录和一些层次比较明显的驱动目录布局不同,全放在这个文件夹下,因此还是只好通过看Kconfig 和 Makefile来找找思路//这个是针对有spi控制器的soc选项,一般的soc都有spi控制器吧。//下面的这些就是针对不同soc上的spi控制器的驱动了,我们可以通过make menuconfig的时候选上自己对应平台的drivers下面这些就是针对于主机作为spi从设备的时候用的,暂时貌似没支持,毕竟现实中几乎没有用过,而是作为master端出现。

2023-11-30 22:51:42 1802

原创 【驱动】SPI驱动分析(五)-模拟SPI驱动

模拟SPI驱动是一种软件实现的SPI总线驱动。在没有硬件SPI控制器的系统中,通过软件模拟实现SPI总线的功能。它允许在不修改硬件的情况下,通过GPIO(通用输入/输出)引脚模拟SPI总线的通信,从而与SPI设备进行数据交换。模拟SPI驱动相对于硬件SPI来说,可能会有一定的性能损失,因为软件模拟不如硬件实现的SPI控制器快速和高效。性能较低:软件模拟SPI需要通过GPIO引脚进行数据的输入和输出,并进行相应的时序控制。

2023-11-30 22:41:42 2245

原创 【驱动】SPI驱动分析(四)-关键API解析

关键API设备树设备树解析我们以Firefly 的SPI demo 分析下dts中对spi的描述:/* Firefly SPI demo */&spi1 { spi_demo: spi-demo@00{ status = "okay"; compatible = "firefly,rk3399-spi"; reg = <0x00>; spi-max-frequency = <48000000>;

2023-11-30 22:38:56 1580

原创 【驱动】SPI驱动分析(三)-SPI关键数据类型

但是有些时候,没有此对应的硬件上的SPI控制器,而还想要和SPI设备通信,那么就只能用GPIO端口去模拟对应的SPI接口的对应的pin:片选CS,数据输入Data In,数据输出Data Out,时钟Clock,去模拟SPI协议,和对应spi设备进行通信。首先,对于多数情况来说,我们所用的SPI,都是有对应的SPI的控制器的,其负责和外部SPI设备进行通信,负责两者通信时候的信号之间的同步,保证信号的timing都符合SPI协议,保证可以正常进行SPI通信。抽象了连接到SPI总线上的SPI从设备,

2023-11-30 22:36:47 1341

转载 【驱动】SPI驱动分析(一)-SPI协议简介

SPI全拼Serial Peripheral interface(串行外围设备接口),是由Motorola(摩托罗拉)在MC68HCXX系列处理器上定义的,主要应用于EEPROM(带电可擦可编程只读存储器),FLASH,RTC(实时时钟),AD转换器,还有数字信号处理器和数字信号解码器。SPI,是一种高速的,全双工,同步的通信总线,且只需要四根引脚线,与I2C一样都大大简化了PCB板子的布局空间,SPI依然是一种世界级的流行标准,大多数板子都内置了SPI的接口。

2023-11-30 22:27:10 647

原创 【驱动】SPI驱动分析(二)-SPI驱动框架

例如,可以通过向设备节点写入数据来发送数据到SPI设备,或者通过从设备节点读取数据来接收SPI设备发送的数据。对于SPI总线来说,SPI设备驱动就是设备驱动的一种实现,负责与SPI外设进行通信。SPI驱动属于总线-设备-驱动模型的,与I2C总线设备驱动模型相比,大体框架是一样,他们都是实际的总线。在一个SoC上可能有多条SPI总线,一条总线对应一个SPI总线驱动,每一条总线上又可以接多个SPI设备。是SPI总线的设备节点,它们在用户空间提供了对SPI总线设备的访问接口。)来与SPI总线进行交互。

2023-11-30 22:26:17 1104

原创 【驱动】串口驱动分析(四)-串口编程和调试方法

当 MIN > 0 TIME > 0 时计时器在收到第一个字节后启动,在计时器超时之前 TIME 的时间到) ),若已收到 MIN个字节,则 read 返回 MIN 个字节,否则,在计时器超时后返回实际接收到的字节。当 MIN = 0, TIME > 0 时TIME为允许等待的最大时间,计 时器在调用 read 时立即启动,在串口接到 1 字节数据或者计时器超时后即返回,如果是计时器超时,则返回 0。在Linux下,除了网络设备,其余的都是文件的形式,串口设备也一样在/dev下。头文件包含到你的程序中。

2023-11-30 22:16:48 796

原创 【驱动】串口驱动分析(三)-serial driver

前两节我们介绍串口驱动的框架和tty core部分。这节我们介绍和硬件紧密相关的串口驱动部分。UART驱动部分依赖于硬件平台,而TTY驱动和具体的平台无关。虽然UART部分依赖于平台,但是不管是哪个硬件平台,驱动的思路都是一致的,下面分模块来分别介绍。对接底层的部分,Kernel 主要是提供了两个接口:1、uart_register_driver (一次调用)2、uart_add_one_port (多次调用)

2023-11-30 22:13:17 1770

原创 【驱动】串口驱动分析(一)-软件架构

其实,上古时期,都有实体,理解完全不是难事。这个IBM的广告,美女左手是terminal,右手是consoleterminal 相对的是consoleterminal是终端,不在主机上,远端控制console是主机上的面板开关,本机控制terminal是一个设备,最早借用了teletypewriter的产品形态,简称tty长得像台打字机,其实输入输出确实都打印在纸上后来进化出一个crt显示器所以上古时期,terminal包含tty,tty就是terminal的一种。

2023-11-30 22:11:52 1770

原创 【驱动】串口驱动分析(二)-tty core

tty这个名称源于电传打字节的简称,在linux表示各种终端,终端通常都跟硬件相对应。比如对应于输入设备键盘鼠标,输出设备显示器的控制终端和串口终端。也有对应于不存在设备的pty驱动。在如此众多的终端模型之中,linux是怎么将它们统一建模的呢?这就是我们今天要讨论的问题。

2023-11-30 22:11:04 1297

转载 【驱动】以太网扫盲(四)phy驱动link up流程分析

在调试网口驱动的过程中发现phy芯片的驱动框架结构还有点复杂,不仔细研究的话还不好搞懂,另外百度到的资料也不够全面,这篇就总结梳理一下这方面的知识。1、用轮询/中断的方式通过 mdio 总线读取 phy 芯片的状态。2、在 phy link 状态变化的情况下,正确配置 mac 的状态。(例如:根据 phy 自协商的速率 10/100/1000M 把 mac 配置成对应速率)下面就以 stmmac 网口驱动为例,展示一下 phy 驱动整个调用过程。

2023-04-30 11:18:02 7107 1

转载 【驱动】以太网扫盲(三)PHY的控制器驱动框架分析

PHY芯片为OSI的最底层-物理层(Physical Layer),通过MII/GMII/RMII/SGMII/XGMII等多种媒体独立接口(介质无关接口)与数据链路层的MAC芯片相连,并通过MDIO接口实现对PHY状态的监控、配置和管理。PHY与MAC整体的大致连接框架如下(图片来源于网络):PHY的整个硬件系统组成比较复杂,PHY与MAC相连(也可以通过一个中间设备相连),MAC与CPU相连(有集成在内部的,也有外接的方式)。PHY与MAC通过MII和MDIO/MDC相连,MII是走网络数据的。

2023-04-30 11:16:39 4534

2020中兴捧月傅里叶派题目和参考答案.rar

2020中兴捧月傅里叶派题目和参考答案。 二分图的DFS,剪枝优化等。

2020-05-13

SC2440u-boot-2012.04.01_07yaffs.rar

移植环境:ubuntu16.04.交叉编译器:4.3.2.参考了韦东山老师的第二期毕业班视频,S3C2440支持了yaffs2文件系统。

2020-05-04

S3C2440_u-boot-2012.04.01_06DefaultParameter.rar

移植环境:ubuntu16.04.交叉编译器:4.3.2.参考了韦东山老师的第二期毕业班视频3.1节视频,修改s3c2440默认参数,裁剪了uboot。

2020-05-04

S3C2440_u-boot-2012.04.01_05DM9000.rar

移植环境:ubuntu16.04.交叉编译器:4.3.2.参考了韦东山老师的第二期毕业班视频3.1节视频,S3C2440支持了DM9000。

2020-05-04

S3C2440_u-boot-2012.04.01_03Nor_Boot.rar

移植环境:ubuntu16.04.交叉编译器:4.3.2.参考了韦东山老师的第二期毕业班视频,S3C2440支持了NOR启动。

2020-05-04

u-boot-2012.04.01_04Nand_Operation.rar

移植环境:ubuntu16.04.交叉编译器:4.3.2.参考了韦东山老师的第二期毕业班视频,S3C2440支持了NAND操作。

2020-05-04

u-boot-2012.04.01_02Nand_Boot.rar

移植环境:ubuntu16.04.交叉编译器:4.3.2.参考了韦东山老师的第二期毕业班视频,S3C2440支持了NAND启动。

2020-05-04

S3C2440_u-boot-2012.04.01_01New_Board.rar

移植环境:ubuntu16.04.交叉编译器:4.3.2.参考了韦东山老师的第二期毕业班视频3.1节视频,新建了S3C2440的单板文件。

2020-05-04

07th_spi_i2c_adc_mini2440_tq2440_spi_controller_020_007.rar

操作 SPI控制器 开发板是用的是JZ2440

2019-09-26

023_spi_020.rar

spi flash 读写设备ID, 配套JZ2440

2019-09-26

04th_spi_i2c_adc_jz2440_ok_020_005.rar

W25Q16 SPI Flash读写操作。 开发板为JZ2440

2019-09-26

005th_i2c_ok_019_007.rar

实现了I2C控制器的操作,I2C控制器编程_中断部分。实现了使用I2C对EEPROM的写和读

2019-09-17

008_touchscreen_perfect_018_012.rar

ARM裸板 2440 ADC和触摸屏操作源码。来源于韦东山课程代码

2019-09-11

019_nand_flash_016.rar

所用开发板为 JZ2440 。完成的操作有 Nand Flash的初始化,芯片ID的读取,数据的读取,Nand Flash 的擦除和烧写。

2019-08-25

基于C语言的五子棋

基于C语言的五子棋 简易版本 可扩展

2018-02-07

随机移动的小球

随机移动的小球 C语言编写的 有兴趣可以扩展成打砖块

2018-02-07

贪吃蛇C代码

基于C语言的贪吃蛇游戏 无聊做的玩的 直接打开就可以运行 上下左右控制

2018-02-07

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

TA关注的人

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