完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
(1)如何开机自动运行应用程序
在嵌入式应用中,一般需要在操作系统运行起来后立刻运行用户的特定用户程序,为此,需要修改root文件系统的/etc/rc文件,这是uClinux启动Shell后第一个运行的脚本文件。/etc/rc文件是在编译的过程中由uClinux-dist/vendors/Generic/big/rc复制而来的,假如我们需要在操作系统运行起来后立刻运行/bin/app这个应用程序,只需要在文件uClinux-dist/vendors/Generic/big/rc最后加一行: /bin/app 如果需要将该应用程序在后台运行,则增加的这句应该象这样: /bin/app & |
|
相关推荐
6个回答
|
|
(2)ADS编译环境下注意的问题
1。如果原来安装有SDT环境的话,用户发现安装ADS后原来的SDT就不好用了。大家会发现: 在SDT软件菜单Project-Tool Configuration for EXPXX--armlink--set的对话框中部的 search patch for liabrays中的路径会变为ADS的库的路径,显然SDT不能正常编译。需要点右边的浏览按钮选择SDT安装目录下的LIB路径,例如D:ARM251LIB. 或者用我们提供的一个toSDT的工具把环境变量重新改为SDT的库路径。 2。加入把别的路径下的,尤其是其他计算机上的ADS实验拷贝到自己的计算机上,你会发现在DEBUG时会出错,起码会提示源文件找不到,而且提示的路径明显不是当前工程所在路径,而是你拷贝这些文件以前最后一次编译时的路径,往往不是你的计算机路径。而且,如果源文件没有任何更改,编译时就没什么动作。再这个时候就点ADS菜单Project --Remove object code在提示框中点ALL target即可。重新编译就OK 了,看来源文件的整个绝对路径都记录在这些目标文件了。 |
|
|
|
(3)NAND Flash的寻址方式
这两天整理的,发出来和大家共享. NAND Flash Addressing Mode NAND Flash的寻址方式和NAND Flash的memory组织方式紧密相关。NAND Flash的数据是以 bit的方式保存在memory cell,一般来说,一个cell中只能存储一个bit。这些cell以8个 或者16个为单位,连成bit line,形成所谓的byte(x8)/word(x16),这就是NAND Device的 位宽。 这些Line会再组成Page,通常是528Byte/page或者264Word/page。然后,每32个page形成 一个Block,Sizeof(block)=16kByte Block是NAND Flash中最大的操作单元,擦除就是按照block为单位完成的,而 编程/读取是按照page为单位完成的。 所以,按照这样的组织方式可以形成所谓的三类地址: -Block Address -Page Address -Column Address 首先,必须清楚一点,对于NAND Flash来讲,地址和命令只能在I/O[7:0]上传递,数据宽度 可以是8位或者16位,但是,对于x16的NAND Device,I/O[15:8]只用于传递数据。清楚了这 一点,我们就可以开始分析NAND Flash的寻址方式了。 ->以528Byte/page 总容量512Mbit+512kbyte的NAND器件为例: 因为1 block=16kbyte,512Mbit=64Mbyte,Numberof(block)=1024 1block=32page, 1page=528byte=512byte(Main Area)+16byte(Spare Area) 用户数据保存在main area中。 512byte需要9bit来表示,对于528byte系列的NAND,这512byte被分成1st half和2nd half, 各自的访问由所谓的pointer operation命令来选择,也就是选择了bit8的高低。因此A8就是 halfpage pointer(这是我给出的一个名字),A[7:0]就是所谓的column address。 32个page需要5bit来表示,占用A[13:9],即该page在块内的相对地址 Block的地址是由A14以上的bit来表示,例如512Mb的NAND,共4096block,因此,需要12个bit 来表示,即A[25:14],如果是1Gbit的528byte/page的NAND Flash,则block address用 A[26:24]表示。而page address就是blcok address|page address in block NAND Flash的地址表示为: Block Address|Page Address in block|halfpage pointer|Column Address 地址传送顺序是Column Address,Page Address,Block Address。 由于地址只能在I/O[7:0]上传递,因此,必须采用移位的方式进行。 例如,对于512Mbit x8的NAND flash,地址范围是0~0x3FF_FFFF,只要是这个范围内的数值 表示的地址都是有效的。 以NAND_ADDR为例: 第1步是传递column address,就是NAND_ADDR[7:0],不需移位即可传递到I/O[7:0]上 而halfpage pointer即bit8是由操作指令决定的,即指令决定在哪个halfpage上进行读写, 而真正的bit8的值是don't care的。 第2步就是将NAND_ADDR右移9位,将NAND_ADDR[16:9]传到I/O[7:0]上 第3步将NAND_ADDR[24:17]放到I/O上 第4步需要将NAND_ADDR[25]放到I/O上 因此,整个地址传递过程需要4步才能完成,即4-step addressing。 如果NAND Flash的容量是256Mbit以下,那么,block adress最高位只到bit24,因此寻址 只需要3步。 下面,就x16的NAND flash器件稍微进行一下说明。 由于一个page的main area的容量为256word,仍相当于512byte。但是,这个时候没有所谓 的1st halfpage和2nd halfpage之分了,所以,bit8就变得没有意义了,也就是这个时候 bit8完全不用管,地址传递仍然和x8器件相同。除了,这一点之外,x16的NAND使用方法和 x8的使用方法完全相同。 Written on Mar 17,2004 Copyright by mYthorON 转载请注明作者和出处。 |
|
|
|
(3)
在ADS1.2环境中编辑汇编程序时由于编辑器本身没有这些汇编 指令的颜色默认选项,需要自已去根椐喜好自行定义。 方法是:打开安装ADS1.2 目录下帮助文档中的汇编指令PDF 文档。 里面有汇编的指令说明,把这些指令拷贝出来另存一个文件名, 伪指令存一个名,汇编编译控制指令存一个文件名。 再在菜单中分别选中自已喜欢定义的颜色,除了注解后的":" 要加"//"变成";//"注解才有颜色外。 这样就有了一个自已喜欢的编辑工作环境,能够减少编写汇编 程序的工作量。 |
|
|
|
(4)arm的开发步骤
1. 做个最小系统板:如果你从没有做过ARM的开发,建议你一开始不要贪大求全,把所有的应用都做好,因为ARM的启动方式和dsp或单片机有所不同,往往会遇到各种问题,所以建议先布一个仅有Flash,SRAM或SDRAM、CPU、JTAG、和复位信号的小系统板,留出扩展接口。使最小系统能够正常运行,你的任务就完成了一半,好在ARM的外围接口基本都是标准接口,如果你已有这些硬件的布线经验,这对你来讲是一件很容易的事情。 2. 写启动代码,根据硬件地址先写一个能够启动的小代码,包括以下部分: 初始化端口,屏蔽中断,把程序拷贝到SRAM中;完成代码的重映射;配置中断句柄,连接到C语言入口。也许你看到给你的一些示例程序当中,bootloader会有很多东西,但是不要被这些复杂的程序所困扰,因为你不是做开发板的,你的任务就是做段小程序,让你的应用程序能够运行下去 3. 仔细研究你所用的芯片的资料,尽管ARM在内核上兼容,但每家芯片都有自己的特色,编写程序时必须考虑这些问题。尤其是女孩子,在这儿千万别有依赖心理,总想拿别人的示例程序修改,却越改越乱。 4. 多看一些操作系统程序,在ARM的应用开放源代码的程序很多,要想提高自己,就要多看别人的程序,linux,uc/os-II等等这些都是很好的原码。 5. 补充: 1.如果你是作硬件,每个厂家基本上都有针对该芯片的DEMO板原理图。先将原理图消化。这样你以后做设计时,对资源的分配心中有数。器件的DATSHEET一定要好好消化。:) 2.如果做软件最好对操作系统的机理要有所了解。当然这对软件工程师来说是小菜一碟。但如果是硬件出身的就有点费劲。 布线时先布数据地址线,和需要保证的高速线, 注意加33欧的电阻排 在arm上跑一个操作系统需要那些步骤: 首先写好启动代码 。配置好内存空间 、与cpu相关的汇编代码修改好 、将堆践区配置好、改好中断函数 、写好相关驱动 基本可以跑起来了 |
|
|
|
(5)构造嵌入式Linux
Linux自身具备一整套工具链,容易自行建立嵌入式系统的开发环境和交叉运行环境,并且可以跨越嵌入式系统开发中的仿真工具(ICE)的障碍。内核的完全开放使人们可以自己设计和开发出真正的硬实时系统,软实时系统在Linux中也容易得到实现。强大的网络支持使得可以利用Linux的网络协议栈将其开发成为嵌入式的TCP/IP网络协议栈。 Linux提供了完成嵌入功能的基本内核和所需要的所有用户界面,它是多面的。它能处理嵌入式任务和用户界面。 一个小型的嵌入式Linux系统只需要下面三个基本元素: * 引导工具 * Linux微内核,由内存管理、进程管理和事务处理构成 * 初始化进程 如果要让它能干点什么且继续保持小型化,还得加上: * 硬件驱动程序 * 提供所需功能的一个或更多应用程序。 再增加功能,或许需要这些: * 一个文件系统(也许在ROM或RAM)中 * TCP/IP网络堆栈 下面我们就从精简内核、系统启动、驱动程序将、X-Window换成MicroWindows四个步骤介绍嵌入式Linux的实际开发。 精简内核 构造内核的常用命令包括:make config、dep、clean、mrproper、zImage、bzImage、modules、modules_install。命令说明略。 现在举个例子说明一下: 我使用的是 Mandrake内附的 2.2.15。我没有修改任何一行程序码,完全只靠修改组态档得到这些数据。 首先,使用 make config 把所有可以拿掉的选项都拿得。 不要 floppy;不要SMP、MTRR;不要 Networking、SCSI;把所有的 block device 移除,只留下 old IDE device;把所有的 character device 移除;把所有的 filesystem 移除,只留下 minix;不要 sound 支援。相信我,我己经把所有的选项都移除了。这样做之后,我得到了一个 188K 的核心。 还不够小吗? OK,再加上一招,请把下列两个档案中的 -O3,-O2 用 -Os 取代。 ./Makefile ./arch/i386/kernel/ Makefile 这样一来,整个核心变小了 9K,成为 179K。 不过这个核心恐怕很难发挥 Linux 的功能,因此我决定把网络加回去。把General中的 network support 加回去,重新编译,核心变成 189 K。10K就加上个 TCP/IP stack,似乎是很上算的生意。 有stack没有driver也是枉然,所以我把 embedded board常用的RTL8139的driver加回去,195K。 如果你需要 DOS 档案系统,那大小成为 213K。如果 minix 用 ext2 换代,则大小成长至 222K。 Linux所需的内存大约在600K~800K之间。1MB内存就可能可以开机了,但不太有用,因为连载入C程序库都有困难。2MB内存应该就可以做点事了,但要到 4MB以上才可以执行一个比较完整的系统。 因为Linux 的filesystem 相当大,大约在 230K 左右,占了 1/3 的体积。内存管理占了80K,和核心其它部分的总和差不多。TCP/IP stack 占了65K,驱动程序占了120K。SysV IPC占了 21K,必要的话可以拿掉,核心档应该可以再小个10K左右。 如果要裁剪核心大小,应该动那里呢? 答案很明显,当然是文件系统。Linux 的 VFS简化了档案系统的设计,buffer cache, directory cache增加了系统的效率。但这些embedded系统根本就用处不大。如果可以把它们拿掉,核心可以马上缩小 20K 左右。如果跳过整个 VFS,直接将文件系统写成一个 driver 的型式,应该可以将 230K缩减至50K左右。整个核心缩到100K左右。 系统启动 系统的启动顺序及相关文件仍在核心源码目录下,看以下几个文件: ./arch/$ARCH/boot/ bootsect.s ./arch/$ARCH/boot/setup.s ./init/main.c bootsect.S 及 setup.S 这个程序是Linux kernel的第一个程序,包括了Linux自己的bootstrap程序,但是在说明这个程序前,必须先说明一般IBM PC开机时的动作(此处的开机是指"打开PC的电源")。 一般PC在电源一开时,是由内存中地址FFFF:0000开始执行(这个地址一定在ROM BIOS中,ROM BIOS一般是在FEOOOh到FFFFFh中),而此处的内容则是一个jump指令,jump到另一个位于ROM BIOS中的位置,开始执行一系列的动作。 紧接着系统测试码之后,控制权会转移给ROM中的启动程序(ROM bootstrap routine)。这个程序会将磁盘上的第零轨第零扇区读入内存中,至于读到内存的哪里呢? --绝对位置07C0:0000(即07C00h处),这是IBM系列PC的特性。而位于Linux开机磁盘的boot sector上的,正是Linux的bootsect程序。 把大家所熟知的MS DOS 与Linux的开机部分做个粗浅的比较。MS DOS 由位于磁盘上boot sector的boot程序负责把IO.SYS载入内存中,而IO.SYS则负有把DOS的kernel --MSDOS.SYS载入内存的重任。而Linux则是由位于boot sector 的bootsect程序负责把setup及Linux的kernel载入内存中,再将控制权交给setup。 驱动程序 在Linux系统里,设备驱动程序所提供的这组入口点由一个结构来向系统进行说明。 设备驱动程序所提供的入口点,在设备驱动程序初始化的时候向系统进行登记,以便系统在适当的时候调用。Linux系统里,通过调用register_chrdev 向系统注册字符型设备驱动程序。 在Linux里,除了直接修改系统核心的源代码,把设备驱动程序加进核心里以外,还可以把设备驱动程序作为可加载的模块,由系统管理员动态地加载它,使之成为核心的一部分。也可以由系统管理员把已加载的模块动态地卸载下来。Linux中,模块可以用C语言编写,用gcc编译成目标文件(不进行链接,作为*.o文件存在)。为此需要在gcc命令行里加上-c的参数。在成功地向系统注册了设备驱动程序后(调用register_chrdev成功后),就可以用mknod命令来把设备映射为一个特别文件。其它程序使用这个设备的时候,只要对此特别文件进行操作就行了。 将X-Window换成MicroWindows MicroWindows是使用分层结构的设计方法。允许改变不同的层来适应实际的应用。在最底一层,提供了屏幕、鼠标/触摸屏和键盘的驱动,使程序能访问实际的硬件设备和其它用户定制设备。在中间一层,有一个轻巧的图形引擎,提供了绘制线条、区域填充、绘制多边形、裁剪和使用颜色模式的方法。在最上一层,提供了不同的API给图形应用程序使用。这些API可以提供或不提供桌面和窗口外形。目前,MicroWindows支持Windows Win32/WinCE GDI和Nano-X API。这些API提供了Win32和X窗口系统的紧密兼容性,使得别的应用程序可以很容易就能移植到MicroWindows上。 何谓嵌入式系统 嵌入式系统被定义为:以应用为中心、以计算机威廉希尔官方网站 为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 嵌入式系统是面向用户、面向产品、面向应用的,如果独立于应用自行发展,则会失去市场。嵌入式处理器的功耗、体积、成本、可靠性、速度、处理能力、电磁兼容性等方面均受到应用要求的制约,这些也是各个半导体厂商之间竞争的热点。嵌入式处理器的应用软件是实现嵌入式系统功能的关键。软件要求固化存储,软件代码要求高质量、高可靠性,系统软件(OS)的高实时性是基本要求。 在制造工业、过程控制、通讯、仪器、仪表、汽车、船舶、航空、航天、军事装备、消费类产品等方面均是嵌入式计算机的应用领域。 |
|
|
|
(6)2410布线的注意事项
我有些看法不太相同 1.ram flash的线太走得太长 ,并且尽量靠近cpu 走线长度不能简单的说越短越好,对于同步时序,要求满足最小建立时间和最小保持时间,所以根据计算结果有个最大长度限制和最小长度限制,即不能太长也不能太短,具体值可由计算结果得知或者仿真得知;对于异步时序,理论应该没有长度限制。 2.sdram的 所有信号线要近似等长 我同意!不过我认为最大相差6000mi应该没问题,对于100M时钟速率,大约1ns的延时应该不成问题l 3.在重要的控制信号线上一搬串联33的电阻,消除干扰 我同意!这样做的目的起到阻抗匹配的作用,减小过冲、振铃,从而降低了高频成份,对EMC有力,同时也可延长器件的使用寿命。不过这样做争加了布线的难度,并且需要控制pcb布线的阻抗,而且要针对不同的拓扑结构和负载情况适当的调节阻值才能达到好的效果,不然可能会使得信号沿过缓,导致工作不正常。对于消费类产品建议只在时钟信号上加匹配电阻即可。对于要求很严格得板子最好数据线,地址线,控制线,时钟线都要加匹配电阻,且阻值最好根据仿真结果确定。 4.注意使用高频滤波 同意! 5别使用开关电源 不然!开关电源效率高,做得好能达到95%,这一点对于便携设备是很重要的,不过会引进开关噪声,对于EMC和模拟电路不利,但通过各种手段,例如:滤波,注意PCB设计,注意选择开关频率,注意器件得选择等将噪声得影响减到最小。所以根据具体的情况合理的选择电源的类型才使正确的做法。 |
|
|
|
只有小组成员才能发言,加入小组>>
888 浏览 0 评论
1200 浏览 1 评论
2577 浏览 5 评论
2913 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2775 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1248浏览 3评论
227浏览 2评论
501浏览 2评论
410浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
489浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-2 17:13 , Processed in 1.043708 second(s), Total 57, Slave 48 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号