自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

李辉的博客

专注于嵌入式开发

原创 汇编语言与C语言的理解

汇编语言的基础知识重点内容 0、学习汇编语言的意义: 基本上所有的处理器的终端,在启动代码的时候都是要使用到汇编语言的 汇编语言的效率可以很高1、汇编语言框架.section .data <初始化的数据>.section .bss <未初始化的数据>.section .text //代码段.global __start__start:

2017-06-15 12:07:35 1115 2

原创 从零开始写一个单向不循环链表

从零开始写一个单向不循环链表总结:郝斌数据结构与算法课程数据结构概述:定义:我们如何把现实中大量的而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器(内存)中,以及在此基础上为实现某个功能,(比如查找某个元素,删除某个元素,对所有的元素的进行排序)数据结构= 个体的存储 + 个体的关系存储算法:对存储数据的操作。再次讨论什么是数据结构?狭义:数据结构是专门研究数...

2018-09-02 21:11:31 365

原创 Linux根文件系统的制作--下

Linux根文件系统的制作--下参考朱有鹏Uboot全集1、profile文件和用户登录理论(1)之前添加了/bin/hostname在/etc/sysconfig/HOSTNAME文件中定义一个hostname,实际效果是:命令行下的hostname查到的命令host确实是lhh_210(2)这个问题解决就要靠profile文件,将提供的profile文件放入/etc/目录即可。...

2018-08-02 20:30:18 949

原创 Linux根文件系统制作--中

Linux根文件系统制作--中参考朱有鹏uboot全集0、根文件系统概况1、busybox源码下载并编译进去根文件系统1.1、busybox是一个开源的项目,所以源代码可以直接从网上下载1.2、busybox的版本的差异不大,版本的新旧没有太大的关系1.3、下载busybox直接去www.busybox.net官方网站下载都行下载完后,进行解压:tar -jxvf...

2018-08-01 21:16:06 905

原创 Linux根文件系统的原型的制作1

Linux根文件系统的原型的制作1参考朱有鹏uboot全集0、自己制作ext2格式的根文件系统(1)mke2fs介绍:是一个应用程序,在ubuntu中默认是安装了的,这个应用程序就是默认用来制作镜像的。(2)一般用来制作各种不同格式的rootfs的应用程序的名字都很相似,类似于mkfs.xxx(比如用来制作ext2格式的rootfs的工具)(3)mkfs.ext2等都是mke2...

2018-07-31 21:49:41 381

原创 手把手教你搭建TFTP服务器

手把手教你搭建TFTP服务器前言,东西来自于网络,但是根据自己的理解写了一下建议,记录下来,让下次不要在网络上面浪费时间搜索。1、保证自己的虚拟机能够上网测试方法:里面一般都有一个火狐浏览器,能够上百度就证明能够上网2、在线安装需要的软件 tftp服务器时基于应用层的一种网络层的协议,里面是基于CS结构的,所以说我们需要下载tftp的服务器和客户端。2.1、安装tftp-hpa...

2018-07-30 10:49:52 12817

原创 如何编译Linux内核文件

如何编译Linux内核文件参考:朱有鹏Uboot的全集前言:我们的Linux内核文件动则数万个文件,很多个子文件夹,当然是使用Makefile管理了,但是是不是真的仅仅只是make一下就可以了呢?答案是不可能的,因为Linux内核比我们uboot更加的复杂,所以Linux内核也需要配置再进行编译的,而且Linux内核的配置项因为有数千项目,所以Linux靠手工配置是不现实的,所以大牛就是大...

2018-07-28 10:10:15 3312

原创 从零开始的UBOOT的学习11-为Ubuntu安装合适的交叉编译工具链

从零开始的UBOOT的学习11-为Ubuntu安装合适的交叉编译工具链参考朱有鹏UBOOT全集1、我们使用S5PV210的开发板,所以我们需要使用arm-none-linux-gnueabi编译工具链(1)第一步:获取交叉编译工具链arm-2009q3.tar.bz2(2)第二步:放置在Ubuntu中的某一个合适的目录下面,这里我们使用/user/local/arm其中里面是没有ar...

2018-06-18 11:21:58 944

原创 从零开始的UBOOT的学习10--Ubuntu上网问题的解决

从零开始的UBOOT的学习10--Ubuntu上网问题的解决1、使用NAT的方式进行上网配置第一个需要注意的事情就是选择NAT模式还是桥接模式。第二个需要注意的Ubuntu中网络配置文件。/etc/network/interfaces文件里面如果一定需要使用NAT模式的话,一定要把静态的IP设置为DCTP模式。auto loiface lo inet loopbackauto eth0if...

2018-06-17 11:11:14 251

原创 从零开始的UBOOT的学习--环境变量

从零开始的UBOOT的学习--环境变量参考朱有鹏UBOOT全集1、环境变量的作用让我们可以不用修改UBOOT的源代码,而是通过修改环境变量来影响UBOOT运行的一些数据和特性,比如通过修改bootdelay环境变量就可以更改系统开机自动启动的倒数的秒数。2、环境变量的优先级(1)uboot代码中当中有一个值,环境变量中也有一个值。其实UBOOT代码中的值是存放在内存当中的,环境变量的值是存放在硬盘...

2018-06-16 11:42:41 666

原创 从零开始的UBOOT的学习8--命令体系

从零开始的UBOOT的学习8--命令体系参考朱有鹏UBOOT全集的一部分1、从UBOOT的启动阶段的第二流程到命令体系(1)在UBOOT中使用一个死循环,实现了命令体系:在这个main_loop()函数里面实现了命令的注册,存储,解析,处理的过程而且这个是一个死循环,也就是说会不断的执行这个函数。 for (;;) { main_loop (); }2、从...

2018-05-27 09:33:33 217

原创 从零开始的UBOOT的学习7--启动内核

从零开始的UBOOT的学习7--启动内核参考朱有鹏UBOOT全集1、UBOOT是一个裸机程序UBOOT的本质就是一个复杂点的裸机程序。和我们在ARM裸机全集中学习的每一个裸机程序并没有本质区别。2、ARM裸机第十六部分写了一个简单的shell,这东西其实就是一个mini型的UBOOT。(1)操作系统内核本身就是一个裸机程序,和UBOOT、和其他的裸机程序并没有本质区别。(2)区别就是操作系统运行起...

2018-05-20 08:25:56 740

原创 从零开始的UBOOT的学习6--start_armboot

从零开始的UBOOT的学习6--start_armboot参考朱有鹏UBOOT全集1、start_armboot函数简介(1)这个函数的是在UBOOT/lib_arm/board.c的第444行开始到908行结束(2)450行里面还不是全部的函数,因为里面调用了很多函数。(3)此函数构成了UBOOT启动部分的第二阶段。(4)宏观分析:UBOOT的第二阶段应该做什么?4.1、概括来讲UBOOT的第一...

2018-05-20 08:21:53 432

原创 从零开始的UBOOT的学习5--start.s上

从零开始的UBOOT的学习5--start.s上1、start.s包含的头文件的意思一定要记住,UBOOT是使用配置的方式,使其能够支持如此多的开发板的。回顾mkconfig.mk文件产生的4个符号链接,此4个符号链接会将来能够找到头文件起到了关键性的作用。(1)在include目录下面创建asm文件,指向asm-arm(2)在include/asm-arm下创建一

2018-05-06 17:39:37 380

原创 从零开始的UBOOT的学习4--回顾重定位的过程

从零开始的UBOOT的学习4--回顾重定位的过程参考朱有鹏ARM裸机课程1、什么是重定位?(1)很多时候我们的启动介质没有那么大的空间进行启动程序,所以为了节约成本,我们会在启动介质使用SRAM或者NORFLASH,然后使用一个长跳转指令跳入到DDR内存当中运行,此时就有足够的地方运行大程序了。2、链接地址和运行地址(1)对于位置有关代码来说:最终执行时的运行地址和

2018-05-06 13:01:44 530

原创 从零开始的UBOOT的学习3--主Makefile的分析

从零开始的UBOOT的学习3--主Makefile的分析参考朱有鹏UBOOT全集前言:很多类似于STM32的单片机,所有的东西,IDE集成开发环境已经帮你配置好怎么使用的,代码段或者数据段怎么在程序中链接,我们的各个文件的.c或者.h文件应该是怎么样的,在Linux的ARM中是没有的,所有的都需要我们自己定制化,所谓的定制化编译过程,也就是写Makefile。1、UBOOT版本号的确认(1)UBO...

2018-04-30 16:04:51 1971

原创 从零开始的UBOOT的学习2--shell的简单知识

从零开始的UBOOT的学习2--shell的简单知识参考朱有鹏的UBOOT全集为什么我们要使用shell?因为shell里面的命令都可以在Linux下的命令行中执行,为啥我们需要使用shell,然后再命令行中执行它?因为我们需要用它批量的执行一些操作。这样我们就不会每次都重复的在命令行中敲命令。1、shell变量的定义(1)shell是一种脚本语言(语言中的变量如果有明

2018-04-21 16:26:36 727

原创 从零开始的UBOOT的学习1--UBOOT是用来干嘛的?

从零开始的UBOOT的学习1--UBOOT是用来干嘛的?参考朱有鹏UBOOT全集UBOOT本身就是为了启动内核,其实你自己写一个BootLoader是比较简单的,没有UBOOT的那么多的工具,UBOOT提供了两个比较强的工具:环境变量和命令,使得UBOOT的启动内核游刃有余。1、UBOOT的常用命令(1)tftp下载指令tftpUBOOT本身主要的目标是为了启动

2018-04-21 16:22:27 2486

原创 解决朱有鹏开发板--主机--虚拟机不能互相PING通问题

解决朱有鹏开发板--主机--虚拟机不能互相PING通问题前言:查遍整个网络,没有人发表这个问题,在视频中老朱得到的结论是UBOOT有问题,结果,经过实践发现,是可以同时PING通的,而且不用花很多时间,今天就把它分享出来。1、排查问题过程我的电脑环境WIN10+Ubuntu14.04+210开发板我是可以用无线网卡实现三者的PING通的,说实话用有线真的很麻烦。(1

2018-04-14 18:14:54 370 1

原创 从零开始学习UCOSII操作系统15--总结篇

从零开始学习UCOSII操作系统15--总结篇前言:在大学的时候,我们班级上面都有很多人觉得学习UCOSII(包括UCOSIII)是没什么厉害的,因为很多人都喜欢去学习Linux操作系统,但是,但是,真实的对整个UCOSII操作系统进行学习,我可以保证,如果你是基于源码级别的阅读的话,绝对是不简单的。仅仅是调用几个API的话,是永远用不好UCOSII的操作系统的。还有你真正学通了UCO

2018-04-06 11:17:19 16503 2

原创 从零开始学习UCOSII操作系统14--系统移植实战篇

从零开始学习UCOSII操作系统14--系统移植实战篇前言:本篇文章就是为了简单的学习使用的,知道原理之后就可以随意的移植到你自己想要的CPU中,所以我使用最简单的芯片S3C2440,目的就是为了让人们了解怎么移植UCOSII。1、移植UCOSII的关键的三个文件根据我们上一讲说过的部分:我们需要移植的部分就是OS_CPU.hOS_CPU_A.ASM,OS_CPU_C.c

2018-04-05 12:19:03 1830

原创 MDK错误:*** Error: CreateProcess failed, Command: 'D:\Keil\ARM\BIN40\fromelf.exe --bin --output ./outp

今天移植UCOSII操作系统的时候,使用别人写好的程序,编译后,突然发现所有的文件编译和链接都没有任何的问题,但是生成不了.bin文件。后面发现是因为我们的版本的编译器用的太高。MDK5版本比较高的只能。解决方法如下:...

2018-04-05 10:43:14 9590

原创 从零开始学习UCOSII操作系统13--系统移植理论篇

从零开始学习UCOSII操作系统13--系统移植理论篇1、什么是系统移植?(1)UCOSII移植到不同的处理器上,所谓的移植就是将一个实时的内核能在其他的微处理器或者微控制器上运行。为了方便移植,UCOSII的大部分的代码都是C语言写的,因为不同机器的汇编代码是不一样的。这是由于UCOSII在设计的时候已经充分考虑到了可移植性这一点。但是仍然有一部分的代码是需要用C语言

2018-04-05 09:07:39 2903

原创 从零开始学习UCOSII操作系统12--内存管理

从零开始学习UCOSII操作系统12--内存管理前言:在标准的C语言中,可以用malloc()和free()2个动态的分配内存和释放内存,但是在嵌入式中,调用malloc()和free()却是非常危险的。因为多次调用这两个函数,会把原来的很大的一块连续的内存区域逐渐的分割成许多非常小的而且彼此又不相邻的内存块,也就是所谓的内存碎片。这样子的话,使得程序后面连一段非常小的内存都分

2018-04-04 20:59:02 1427

原创 从零开始学习UCOSII操作系统11--消息队列

从零开始学习UCOSII操作系统11--消息队列1、什么是消息队列?(1)传递多个邮箱的一种任务之间进行通信的方式(2)消息队列时UCOSII中的另一种的通信机制,他允许一个任务或者中断服务子程序向另一个任务发送以指针方式定义的变量或者其他的任务。因为具体的应用不同,每个指针指向的包含了消息的数据结构的变量类型也有所不同。(3)UCOSII提供了9个对消息队列进行操

2018-04-04 20:34:00 3039

原创 从零开始学习UCOSII操作系统10--消息邮箱

从零开始学习UCOSII操作系统10--消息邮箱1、什么是消息邮箱?UCOSII中的另一种的通信机制,可以使得一个任务或者中断服务子程序向另一个任务发送一个指针型的变量,通常指针指向一个包含了消息的特定数据结构。提供了6种操作邮箱的接口函数:OSMboxCreate():创建邮箱也就是初始化邮箱的函数OSMboxPend():请求邮箱的函数,也就是没有邮箱发送过来的话,

2018-04-03 19:08:54 2840

原创 从零开始学习UCOSII操作系统9--事件标志组

从零开始学习UCOSII操作系统9--事件标志组1、事件标志组管理(1)UCOSII的事件标志组由2部分组成:一是用来保存当前事件组中各事件状态的一些标志位。二是等待这些标志位置位或者清除的任务列表。(2)UCOSII提供了6个函数,完成事件标志组的各种功能:OSFlagAccept(),OSFlagCreate(),OSFlagDel(),OSFlagPend

2018-04-01 18:31:25 2263

原创 从零开始学习UCOSII操作系统8--互斥型信号量

从零开始学习UCOSII操作系统8--互斥型信号量1、互斥型信号量的定义(1)任务可以用互斥型信号量实现对共享资源的独占式处理,互斥型信号量也称为mutex,mutex是二值信号量,不但具有UCOSII普通信号量的机制外,还具有其他的一些特性。(2)最重要的一点是,可以解除优先级反转的问题。当高优先级的任务需要使用某个共享资源的时候,而该资源已被一个低优先级反转的问题,就会发生

2018-03-31 17:16:31 1203

原创 从零开始学习UCOSII操作系统7--信号量

从零开始学习UCOSII操作系统7--信号量参考博客:@ http://blog.csdn.net/gatiemehttps://blog.csdn.net/gatieme/article/details/21071379前言:这里一定要分析清楚,因为信号量分析清楚后,后面的邮箱等其他的通信的东西都是大同小异的。1、信号量的组成(1)一部分是16位无符号的整型信

2018-03-31 09:20:58 2337

原创 从零开始学习UCOSII操作系统6--事件控制块

从零开始学习UCOSII操作系统6--事件控制块1、任务和任务,任务和中断子程序是如何进行通信的?--事件控制块事件控制块使用的几点须知:(1)任务或者中断服务子程序可以给事件控住块ECB发送信号。(2)中断服务子程序不能等待事件控制块ECB给它发送信号的。(3)等待事件可以设置超时时间,后面会详细的说明实现的原理。(4)多个任务可以同时等待同一个事件发生,在这种情况下面,当事件发生后,所有等待该...

2018-03-30 21:36:01 2416

原创 从零开始学习UCOSII操作系统5--时间管理

从零开始学习UCOSII操作系统5--时间管理1、UCOSII的定时中断(1)绝大多数的内核要求提供定时中断,以实现延时与超时控制等功能。这个定时中断叫做时钟节拍。(2)时钟的中断子程序ISR和时钟节拍函数OSTimeTick()该函数用于通知UCOSII,发生了时钟的节拍中断。2、UCOSII的5个关键的时钟函数(1)OSTimeDly();后面的4个函数

2018-03-29 20:08:57 2610

原创 从零开始学习UCOSII操作系统4--任务管理

从零开始学习UCOSII操作系统4--任务管理1、重讲任务(1)任务可以是一个无限的循环,也可以在一次执行完毕后被删除。这里需要注意的是,任务的代码并不是真正的删除了,而是UCOSII不再理会该任务代码,所以该任务代码不会再执行。(2)建立任务,OSTaskCreate()如果想让UCOSII管理用户的任务,必须先建立任务,可以通过将任务的地址(函数名)和其他参数传递到

2018-03-29 20:07:08 3161

原创 从零开始学习UCOSII操作系统3--UCOSII启动过程

从零开始学习UCOSII操作系统3--UCOSII启动过程1、初始化UCOSII(1)在调用UCOSII在任何的其他的服务之前,UCOSII要求首先调用初始化函数OSInit();这个函数的目的就是在整个系统启动之前,初始化所有的变量和数据结构。(2)其中,在OSInit()函数中建立空闲任务OS_TaskIdle();这个任务总是处于就绪态的,空闲任务的优先级是设置为最低

2018-03-29 18:31:14 4753

原创 从零开始学习UCOSII操作系统2--UCOSII的内核实现

从零开始学习UCOSII操作系统2--UCOSII的内核实现参考书籍:《嵌入式实时操作系统μCOS-II原理及应用》、《嵌入式实时操作系统uCOS-II 邵贝贝(第二版)》1、任务的结构--任务控制块首先这个任务控制块是非常的大的,这里面使用很多的宏定义,估计是可以让使用者使用的时候按需配置。所以这里只是整理一些必须要用到的功能,不常用的不讲,讲了就会变成一本书了。(1)任务的关键   OS_ST...

2018-03-25 19:15:19 9554 3

原创 从零开始学习UCOSII操作系统1--UCOSII的基础知识

从零开始学习UCOSII操作系统1--UCOSII的基础知识前言:首先比较主流的操作系统有UCOSII、FREERTOS、LINUX等,UCOSII的资料相对比其余的两个操作系统的资料是多很多的。更重要的原因是自己本身还没有能力深入的研究Linux操作系统。本次学习UCOSII主要是学习内核的设计原理。此次专栏涉及到的API的使用是非常小的,仅仅作为本人学习的记录。后期也会对比UCOSIII说出实...

2018-03-24 19:13:20 34488 1

原创 NANDFLASH的关键的三个驱动函数

NANDFLASH的关键的三个驱动函数         --参考朱有鹏ARM裸机1、NANDFLASH的关键的三个驱动函数:(1)NANDFLASH 的檫除的函数(2)NANDFLASH 的编程的函数,也就是往里面写东西(3)NANDFLASH 的读的函数,也就是往里面读数据2、读的函数和檫除的函数:unsigned char nand_

2018-01-13 20:30:50 525

原创 NANDFLASH外设的理论知识

NANDFLASH外设的理论知识---参考朱有鹏ARM裸机课堂1、什么是NANDFLASH?NANDFLASH存储器是flash存储器的一种,用来存储。被封装成各种U盘等器件。2、nandflash的功能框图?(1)nand的结构可以看成一个矩阵式存储器,其中被分成一个一个的小块,每一个小块都可以存储一个bit位,然后彼此以一定的单位组合成整个NAND。(2)从

2018-01-13 18:21:57 159

原创 解决S5PV210的开发板使用SD卡下载,串口输出乱码的问题

解决S5PV210的开发板使用SD卡下载,串口输出乱码的问题学习了S5PV210的裸机开发也有一段时间了,一开始怎么都无法使用SD卡的下载,只能使用DNW进行下载,我使用的WIN10系统,就是不喜欢使用WIN7,开机太慢了,但是后面的课程需要使用SD卡下载才比较方便。所以花了一个下午解决了串口在SD卡下载过程中出现的乱码问题。1、问题描述:根据朱有鹏的ARM裸机课程中描述的,他

2018-01-07 18:29:53 366

原创 S5PV210的定时器程序模块程序

S5PV210的定时器程序模块程序           --参考朱有鹏ARM裸机程序1、PWM定时器的初始化:步奏分析:(1)因为我们是输出PWM波,所以需要将需要的GPIO口设置成PWM模式:(2)根据上一篇博客说明的,我们需要知道驱动我们的PWM波的频率到底是多大,所以我们需要配置我们的两个分频器(3)接着,是PWM波的关键寄存器:rTCNTB2 = 250;

2017-12-31 20:58:02 230

原创 S5PV210的定时器概述和基础知识总结

S5PV210的定时器概述和基础知识总结--参考朱有鹏ARM裸机编程1、什么是定时器?(1)定时器是SOC中常见的外设。(2)定时器是由计数器演变而来的,计数的个数*计数一个需要的时间= 定时的时间2、定时器有什么用?定时器可以让我们的SOC在执行主程序的同时,通过定时器具有一个计数的功能。到了一定的时间后,也就是我们计时结束后,从而去执行预先设定好的事

2017-12-31 20:34:50 361

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