嵌入式开发
elecfan2011
业精于勤,荒于嬉行成于思,毁于随。
展开
-
冯诺依曼结构和哈佛结构
FROMhttps://www.cnblogs.com/douzi2/p/4876551.html哈佛结构是,数据和代码分开存在。冯诺依曼结构是在哈佛结构之后提出的,冯诺依曼提出“代码本身也是一种数据”,解决了哈佛结构的一个问题——总线暂用资源太多。冯诺依曼结构是,数据和代码放在一起。首先,通过BIOS(Uboot)将硬盘(Flash)中的程序(数据和代码),全部拷贝到R...转载 2019-06-03 17:19:47 · 576 阅读 · 0 评论 -
制作可在MINI2440上运行的文件系统
1. 前言目的:制作可在MINI2440上运行的文件系统 Busybox版本: 1.20.0 (from https://busybox.net/downloads/) 交叉编译器: arm-linux-gcc version 4.3.22. What is busyboxfrom README in busybox folder. BusyBox combines tin原创 2017-09-12 11:45:36 · 413 阅读 · 0 评论 -
嵌入式系统 Boot Loader 技术内幕
本文详细地介绍了基于嵌入式系统中的 OS 启动加载程序 ―― Boot Loader 的概念、软件设计的主要任务以及结构框架等内容。转载 2017-09-13 16:54:22 · 1077 阅读 · 1 评论 -
The condition code flags
1. Condition code meaningThe N, Z, C, and V (Negative, Zero, Carry and oVerflow) bits are collectively known as the condition code flags, often referred to as flags. The condition code flags in the CPS原创 2017-08-02 11:12:54 · 821 阅读 · 0 评论 -
在51单片机上写出最优代码
列举一些如何在8051单片机上写出高性能代码的方法,高性能指的是编译出的代码具有更小的size和更快的执行速度。以下的方法在大多数情况下都是能够起作用的。存储模式(Memory Model) 存储模式最能够影响最终产生代码的大小和执行速度。编译时采用SMALL模式可以产生最小、最快的代码。在SMALL模式下所有的变量,除非特别说明,都会存放在8051内部存储区。单片机访问内部存储区的速度非常看(翻译 2017-03-14 16:38:49 · 926 阅读 · 0 评论 -
The Linux USB Input Subsystem, Part I
As the USB input subsystem spreads further with each kernel release, it's time to understand what it's doing for your devices.The Linux USB input subsystem is a single, harmonized way to man转载 2014-03-25 14:30:14 · 745 阅读 · 0 评论 -
内核移植时出现问题Failed to execute /linuxrc. Attempting defaults...
此篇文章完全是搜集www.100ask.net上面版主贴子里面的内容。制作了根文件系统,在启动之后停在这里了:NET: Registered protocol family 1NET: Registered protocol family 17VFS: Mounted root (cramfs filesystem) readonly.Freeing init转载 2014-03-21 10:23:54 · 5160 阅读 · 2 评论 -
socket阻塞与非阻塞,同步与异步、I/O模型
socket阻塞与非阻塞,同步与异步作者:huangguisu1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了转载 2014-03-28 17:29:00 · 564 阅读 · 0 评论 -
ABI、OABI和EABI
1。什么是ABIABI,application binary interface (ABI),应用程序二进制接口。既然是 接口,那就是某两种东西之间的沟通桥梁,此处有这些种情况:A。应用程序 操作系统;B。应用程序 (应用程序所用到的)库C 。应用程序各个组件之间类似于API的作用是使得程序的代码间的兼容,ABI目的是使得程序的二进制(级别)的兼容。2。什么转载 2014-03-19 14:51:05 · 918 阅读 · 0 评论 -
likely(x)与unlikely(x)函数
likely(x)与unlikely(x)函数转载 2017-09-20 18:41:24 · 970 阅读 · 0 评论 -
实现u-boot对yaffs/yaffs2文件系统下载的支持
From https://yq.aliyun.com/articles/10555摘要: 以下红色部分就是需要修改的地方,老版本的U-boot需要添加下面的代码才能够增加对yaffs2的支持,新版本的只需添加一个宏就可以增加对yaffs2的支持。 yaffs2文件系统的移植主要涉及到u-boot对yaffs2文件系统的烧写支持、linux内核对yaffs2文件系统的支持,以及yaffs2文转载 2017-09-13 00:39:18 · 470 阅读 · 0 评论 -
CodeWarrior的map文件详解
From https://blog.csdn.net/lin_strong/article/details/79759080最近各种忙着码代码,遇到了各种各样的坑,对CodeWarrior工程中的这个map文件的理解也越来越深了。闲来无事,和大家分享下对这个map文件的理解。可能还有不对之处,敬请指出。前言map文件保存了你的整个程序编译链接后的各种信息,包括编译器链接器信息,内存分配信...转载 2018-10-18 15:03:49 · 1065 阅读 · 0 评论 -
理解S12(X)架构中的地址映射方案
From https://blog.csdn.net/lin_strong/article/details/78127072由于在暑假匆忙接收的嵌入式项目中需要使用特别大的数组,非分页RAM的内存不够用了,没办法,硬着头皮尝试使用分页RAM,但是完全没有单片机的基础,导致极其的困难。之前写程序都是按照纯软件的思维,主要考虑架构,不会考虑到每个变量具体存在哪个物理地址这么底层的问题,结果被飞思卡...转载 2018-10-18 15:02:41 · 499 阅读 · 0 评论 -
(深入理解计算机系统) bss段,data段、text段、堆(heap)和栈(stack)
bss段: bss段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。 bss是英文Block Started by Symbol的简称。 bss段属于静态内存分配。 data段: 数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。 数据段属于静态内存分配。 text段:...转载 2018-08-19 23:13:50 · 762 阅读 · 1 评论 -
内存对齐方式及结构体的存储
1. 内存对齐方式虽然所有的变量最后都会保存在特定地址的内存中,但相应的内存空间必须满足内存对齐的要求。主要出于两个方面的原因: (1) 平台原因: 不是所有的硬件平台(特别是嵌入式系统中使用的低端处理器)都能访问任意地址上的任意数据,某些硬件平台只能访问对齐的地址,否则会出现硬件异常。 (2) 性能原因: 如果数据存放在未对齐的内存空间中,则处理器访问原创 2017-11-08 16:47:17 · 1068 阅读 · 0 评论 -
ARM架构知识点(来自朱友鹏课堂笔记)
3.文件读写的一些细节errno和perror(1)errno就是error number, 意思就是错误号码。linux系统中对各种常见错误做了个编号,当函数执行错误时,函数会返回一个特定的errno编号来告诉我们这个函数到底哪里错了。(2)errno是由OS来维护的一个全局变量,任何OS内部函数都可以通过设置errno来告诉上层调用者究竟刚才发生了什么错误(3)errno本身实原创 2017-10-12 09:43:11 · 863 阅读 · 0 评论 -
ARM汇编指令和伪指令(朱友鹏课堂笔记)
一、ARM汇编指令集1. 指令与伪指令(汇编)指令是CPU机器指令的助记符,经过编译后会得到一串10组成的机器码,可以由CPU读取执行。(汇编)伪指令本质上不是指令(只是和指令一起卸载代码中),它是编译器环境提供的,目的是用来指导编译过程,经过编译后伪指令最终不会生成机器码。2、两种不同风格的ARM指令ARM官方的ARM汇编风格:指令一般用大写、Wingdows中的ID原创 2017-10-12 09:41:55 · 2324 阅读 · 0 评论 -
使用cuteFTP在MINI2440开发板和PC之间传送文件
使用cuteFTP在mini2440开发板和PC之间传送文件快而方便,下面简单cuteFTP的设置步骤:原创 2014-03-30 15:58:43 · 1204 阅读 · 0 评论 -
关于__init、__initdata和__exit、__exitdata的学习笔记
由于4年前对于C语言和Linux的知识贫乏,所以当时对于模块中的函数定义没有细看。这次在温习《LDD3》的时候,重新看了一下关于__init、__initdata和__exit、__exitdata的知识,记录如下:对于__init、__initdata和__exit、__exitdata的定义位于,这些宏定义的作用是告诉编译器将这些函数或者数据放入相应的section中,而在转载 2014-03-18 17:22:43 · 538 阅读 · 0 评论 -
u-boot源码分析及移植(转载)
本文从以下几个方面粗浅地分析u-boot并移植到FS2410板上:1、u-boot工程的总体结构2、u-boot的流程、主要的数据结构、内存分配。3、u-boot的重要细节,主要分析流程中各函数的功能。4、基于FS2410板子的u-boot移植。实现了NOR Flash和NAND Flash启动,网络功能。 这些认识源于自己移植u-boot过程中查找的资料和对源码的简单阅读。下转载 2014-03-10 14:59:13 · 677 阅读 · 0 评论 -
arm-linux-ld命令 ld链接脚本
我们对每个c或者汇编文件进行单独编译,但是不去连接,生成很多.o 的文件,这些.o文件首先是分散的,我们首先要考虑的如何组合起来;其次,这些.o文件存在相互调用的关系;再者,我们最后生成的bin文件是要在硬件中运行的,每一部分放在什么地址都要有仔细的说明。我觉得在写makefile的时候,最为重要的就是ld的理解,下面说说我的经验:首先,要确定我们的程序用没有用到标准的c库,或者一些系统的转载 2014-01-05 23:10:42 · 939 阅读 · 0 评论 -
深入分析S3C2440启动代码中大小端问题
深入分析S3C2440启动代码中大小端问题一、ADS1.2中关于大小端的设置以及对编译后的代码的影响下面是一段代码在线段模式下编译,生成的二进制文件的内容大端模式下编译,生成二进制文件的内容根据上面的内容可以看出:它们的字节序是相反的,也就是说,ADS1.2中对大小端的设置会影响最终生成的二进制文件的字节序。二、S3C2440启动代码中与大小管相关的代码转载 2014-01-04 23:47:11 · 692 阅读 · 0 评论 -
理解嵌入式开发中的一些硬件相关的概念
理解嵌入式开发中的一些硬件相关的概念 做嵌入式系统开发,经常要接触硬件。做嵌入式开发对数字电路和模拟电路要有一定的了解。这样才能深入的研究下去。下面我们简单的介绍嵌入式开发中的一些硬件相关的概念。电平(Level) 在数字电路中,分为高电平和低电平,分别用1和0表示。一个数字电路的管脚,总是存在一个电平的,要么高要么低,或者说要么1要到0(其实,还有另一转载 2014-01-05 23:41:09 · 795 阅读 · 0 评论 -
运行地址和加载地址
运行地址和加载地址 在连接目标代码时,会提到运行地址和加载地址。这两者有什么区别呢? 加载时地址就是程序放置的地址,运行地址就是程序定位的绝对地址,也即在编译连接时定位的地址。如果程序是在flash里运行,则运行地址和加载地址是相同的。如果程序是在ram里运行,但程序是存储在flash里,则运行地址指向ram,而加载地址是指向flash。代码一般是烧写在转载 2014-01-05 23:36:33 · 492 阅读 · 0 评论 -
接口设计
接口设计什么是接口?接口是CPU和外设之间的连接设备,用于缓存和转发数据。为什么需要接口?(1)解决主机CPU和外围设备之间的时序配合和通信联络问题 主机的CPU是高速处理器件,比如8086-1的主频为10MHz,1个时钟周期仅为100ns,一个最基本的总线周期为400ns。而外围设备的工作速度比CPU的速度慢得多。如转载 2014-01-05 19:51:05 · 642 阅读 · 0 评论 -
S3C2440启动代码中应用程序执行环境的初始化
S3C2440启动代码中应用程序执行环境的初始化一、基础知识 我们编写的源文件(.c 或.s)经过ARM 编译器的编译生成ELF 格式的目标文件(后缀名为.o),目标文件经过ARM 连接器连接以后生成ELF 格式的映像文件(后缀名为.axf),此时的映像文件还包含一些调试信息,我们还需要通过fromelf 工具将其转换成适合在ROM 或RAM 中运行的二进制代码(后缀名为转载 2014-01-04 22:58:27 · 756 阅读 · 0 评论 -
ARM汇编中的ldr和adr的区别及其在uboot中相关源码的分析
ARM汇编中的ldr和adr的区别及其在uboot中相关源码的分析ARM汇编有ldr指令以及ldr、adr伪指令,它们都可以将标号表达式作为操作数,下面通过分析一段代码以及对应的反汇编结果来说明它们的区别。[plain] view plaincopyprint?ldr r0, _start adr r0, _start ldr r0,转载 2014-01-04 22:30:56 · 534 阅读 · 0 评论 -
ARM处理器三级流水线与PC,LR的关系
ARM处理器使用流水线来增加处理器指令流的速度,这样可使几个操作同时进行,并使处理与存储器系统之间的操作更加流畅,连续,能提供0.9MIPS/MHZ的指令执行速度。 PC代表程序计数器,流水线使用三个阶段,因此指令分为三个阶段执行:1.取指(从存储器装载一条指令);2.译码(识别将要被执行的指令);3.执行(处理指令并将结果写回寄存器)。而R15(PC)总是指向“正在取指”的指令,而不是转载 2014-01-05 13:57:05 · 1576 阅读 · 0 评论 -
make clean、make mrproer 以及make distclean的区别
make clean、make mrproer 以及make distclean的区别解压内核源码包后, 到内核源代码目录树的顶层目录, 执行# make helpCleaning targets: clean - Remove most generated files but keep the config and转载 2014-01-05 16:46:59 · 825 阅读 · 0 评论 -
linux之fstab文件详解
/etc/fstab是用来存放文件系统的静态信息的文件。位于/etc/目录下,可以用命令less /etc/fstab 来查看,如果要修改的话,则用命令 vi /etc/fstab 来修改。 当系统启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录。下面我来介绍如何在此文件下填写信息。 文件示例一个简单转载 2014-01-07 00:42:26 · 1127 阅读 · 0 评论 -
在U-boot下实现自动识别启动Flash的原理(针对S3C24x0)(转自Tekkaman Ninja)
在U-boot下实现自动识别启动Flash的原理(针对S3C24x0)(转自Tekkaman Ninja)有网友给我一个建议,是否可以同时支持64MB的flash和128MB的flash,我想了一下觉得可行,再想一下觉得还可以实现自动识别Nor boot 还是 Nand boot。 所以在移植u-boot-2009.08的时候,我决定实现这两个功能。其实实现这两个功能是只需要修改s转载 2014-02-18 16:42:07 · 642 阅读 · 0 评论 -
uboot 串口详解
目录零、概述一、init_baudrate二、serial_init三、console_init_f四、devices_init五、console_init_r六、打印信息七、为什么要使用devlist,std_device[]?零、概述上面这张图是U-Boot中串口设备驱动的流程,从寄存器级别的设置到最后终端信息的输出。下面转载 2014-02-24 13:39:39 · 1742 阅读 · 0 评论 -
U-BOOT详细讲解
转自http://blog.chinaunix.net/uid-26813001-id-3279194.html我们知道,bootloader是系统上电后最初加载运行的代码。它提供了处理器上电复位后最开始需要执行的初始化代码。 在PC机上引导程序一般由BIOS开始执行,然后读取硬盘中位于MBR(Main Boot Record,主引导记录)中的Bootloader(例如LILO或GR转载 2014-02-22 15:49:45 · 1953 阅读 · 0 评论 -
File `Makefile' has modification time 1.8e+06 s in the future这种警告的原因分析及解决方法
移植uboot时,一般都会先在windows下修改,然后在LInux环境下编译,往往在Linux下使用命令行进行配置时:$make wqh2440_config会出现如下错误信息:make: Warning: File `Makefile' has modification time 1.8e+06 s in the future通过这个错误提示信息我们可以知道,Makefil原创 2014-01-18 13:51:53 · 21329 阅读 · 0 评论 -
关于C语言中内嵌汇编指令的一个小细节
今天修改u-boot时,在编译的过程中,老是提示内嵌汇编指令处有语法错误,我仔细检查一下,才发现我将汇编指令写成了:_asm_ ("####一些指令####")/* error */asm两端的下划线应该是一边两条:__asm__("####一些指令####")/* correct */原创 2014-01-18 16:11:06 · 661 阅读 · 0 评论 -
DECLARE_GLOBAL_DATA_PTR、gd_t、bd_t及uboot中 start_armboot 代码分析
一、Uboot中DECLARE_GLOBAL_DATA_PTR 只是一个定义的宏,这个宏定义了一个gd_t全局数据结构的指针,这个指针存放在指定的寄存器中(386体系结构没有放到指定寄存器中)。这个宏定义在\include\asm-arm\globe_data.h文件中#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd转载 2014-01-18 12:20:43 · 3609 阅读 · 0 评论 -
汇编语言中出现#include, #define的问题
U_boot源文件中,一些 .S文件中出现了#include, #define,如board\smdk2410目录下的lowlevel_init.S文件:#include #include /* some parameters for the board *//* * * Taken from linux/arch/arm/boot/compressed/head-原创 2014-01-14 20:57:20 · 4100 阅读 · 0 评论 -
8位单片机中一个容易被忽视的溢出问题
8位单片机中一个容易被忽视的溢出问题例:uint16 wTmp ; uint8 x ;x=2;wTmp = (uint16)(x*150);各位,以上这个乘法有没有问题?wTmp的值是多少?相信有很多人都会不加思考的说,没问题啊!wTmp=300 。好,问题来了!告诉你,其实结果是 wTmp=44。这里不作具体解释,请读者自已思考,转载 2014-01-08 00:26:52 · 1833 阅读 · 1 评论 -
Bootloader的简介
Bootloader的概念一、Bootloader的引入从前面的硬件实验可以知道,系统上电之后,需要一段程序来进行初始化:关闭WATCHDOG、改变系统时钟、初始化存储控制器、将更多的代码复制到内存中等等。如果它能将操作系统内核(无论从本地,比如Flash;还是从远端,比如通过网络)复制到内存中运行,就称这段程序为Bootloader。简单地说,Bootloader就是这么转载 2014-01-04 20:26:05 · 888 阅读 · 0 评论