hargendazs

    1. 远程通信的问题----急!急!急! 8/3574 嵌入式系统 2010-06-20
      我想应该是用ADSL宽带,它没有无线网络信号强弱的问题,费用相对也较低。实现难度高于固定电话,带宽有优势。
    2.                                  STM32抗干扰环境的能力能比上STM8么?
    3. 有人做出来过,看到过这片贴子 基于LPC2104的VxWorksBSP设计摘要:在新的目标板上安装VxWorks的过程极具挑战性。本文较详细地介绍基于LPC2104的ARM开发板的BSP设计方法,并给出源代码。     关键词:VxWorks LPC2104 BSP ARM VxWorks是一种商用嵌入式实时操作系统(RTOS)多年来,风河公司为用户提供了一系列广泛的板级支持包(BSP)。但是,随着CPU的发展,用户自己设计的硬件平台越来越多,分散性越来越大,因此介于硬件平台和操作系统之间的BSP的自主设备也日益紧迫。EasyARM开发板是广州周立功单片机有限公司开发的基于飞利浦LPC2104型 ARM7TDMI芯片的低价位学习板,具有128KB的Flash,16KB的RAM,满足VxWorks运行的最低要求。 1 格式说明及格式转换程序的制作 Tornado产生的目标代码的默认格式是Motorola开发板的Flash下载工具只能下载Intel 32bit格式。必须将它们进行转换才能将代码写入到Flash中去。下面以Motorola的S2格式为例说明格式的转换。 S2的一种实际格式如下: S0120000626F6F74726F6D5F726532E686578CF S214000000060000EABD0300EAA50300EAB70300EA1B S804000000FB 其中第一条是记录的头部。第二条是地址和对应的数据记录,S2表示24位地址的格式,14表示起始地址000000和对应的数据及奇偶效验对的总和。最后两位表示所有十六进制数对的校验和。最后一条是记录的结束标志。   Intel 32 bit的一种实际格式如下: :020000040000FA :10000000060000EABD0300EABB50300EAB70300EA20 ………… :00000001FF 其中第一条是记录的头部,表示32位地址的高16位为0000。在第二条记录中,:表示记录的开始,10表示记录对的个数,0000表示起始地址的值,最后两位表示校验和。最后一条是记录的结束标志。 了解这两种格式后,编写格式转换程序就是很简单的一件事件。 2 BSP的设计过程及软件仿真方法 2.1 驻留ROM/Flash的系统各段分配情况 由于LPC2104只有16KB的RAM,故只能程序代码和数据放在Flash中,开机后再将数据拷贝到RAM内,而程序依然放在Flash中并在其中运行,即所谓的ROM Resident Image设计。在Tornado集成开发环境下,选取templatARM的BSP生成的bootrom_res.hex文件就是这种 ROM_Resident文件,其代码段、数据段、堆栈段分别在Flash和RAM中的情况如图1。 Flash的分配和对应常量的定义 片内Flash的地址空间为0x00000000~0x00020000 ROM_TEXT_ADRS=00000000代码段的起始地址 ROM_SIZE=00020000 Flash的大小 RAM的分配和对应常量的定义 片内RAM的地址空间为0x40000000~0x40003FFF 0x40000000~0x4000003F共64字节,放中断向量表LOCAL_MEM_LOCAL_ADRS=0x400000000 RAM_LOW_ADRS=0x40000600 RAM_HIGH_ADRS=0x40000F00 LOCAL_MEM_SIZE=0x00020000 根据上面的分析,修改Makefile和config.h中相应的部分,使两者一样。 堆栈的分配 堆栈的地址设为STACK_ADRS,由系统定义,从RAM_LOW_ADRS开始向下伸展。 2.2 romlnit.s文件 ARM的异常向量表如表1。LPC2104的异常向量表也一样,只不过它可以重新映射到RAM的头部,即从0x40000000开始的32个字节。 表1 ARM异常向量位置 地    址        异    常 0x0000 0000        复位 0x0000 0004        未定义指令 0x0000 0008        软件中断 0x0000 000C        预取指中止(从存储器取指出错) 0x0000 0010        数据中止(数据访问存储器出错) 0x0000 0014        保留 0x0000 0018        IRQ 0x0000 001C        FIQ  *在ARM文档中标识为保留,该位置被Boot装载程序用作者有效的用户程序关键字。 基于ARM体系结构的VxWorks的其中四个异常 入口函数为:excEnterUndef、ecxEnterSwi、excEnterPrefetchAbort、excEnterDataAbort。直接在对应的位置用B指令跳到对应的函数中即可。代码如下:_ARM_FUNCTION(romInit) _romInit: ARM的异常向量表如表1。LPC2104的异常向量表也一样,只不过它可以重新映射到RAM的头部,即从0x40000000开始的32个字节。 基于ARM体系结构的VxWorks的其中四个异常入口函数为:excEnterUndef、excEnterSwi、 excEnterPrefetchAbort、excEnterDataAbort。直接在对应的位置用B指令跳到对应的函数中即可。代码如下: _ARM_FUNCTION(romInit) _romInit: cold: B start /*复位异常*/ B excEnterUndef /*未定义异常 */ B excEnterSwi /*软中断*/ B excEnterPreftchAbort/*予取指异常*/ B excEnterDataAbort /*数据异常*/ .ascii "20B9" /*保留空间,由格式转换程序超填入0xB9205F80*/ LDR pc,[pc,#-0xFF0]/*IRQ中断入口函数*/ B FIQ_Hander /*FIQ中断入口函数*/ IRQ中断函数的入口函数是C语言写的sysClkInt()和sysAuxClkInt(),需要自己保存现场和恢复现场,代码为: _ARM_FUNCTION(TIME0_IRQ_Hander) _TIME0_IRQ_Hander: SUB LR,LR,#4 /*计算返回地址*/ STMFD SP!,{R0-R11,R12,LR} /*保存任务环境*/ MRS R3,SPSR /*保存状态*/ STMFD SP!,{R3} BL sysClkInt /*调用C语言的中断处理程序*/ LDMFD SP!,{R3} MSR SPSR_cxsf,R3 LDMFD SP!,{R0-R11,R12,PC} _ARM_FUNCTION(TIME1_IRQ_Hander) _TIME1_IRQ_Hander: SUB LR,LR,#4 /*计算返回地址*/ STMFD SP!,{R0-R11,R12,LR} /*保存任务环境*/ MRS R3,SPSR /*保存状态*/ STMFD SP!,{R3} BL sysAuxClkInt /*调用C语言的中断处理程序*/ LDMFD SP!,{R3} MSR SPSR_cxsf,R3 LDMFD SP!,{R0-R11,R12,PC} 快速中断函数VxWorks不用由用户自己定义。其框架如下:其中FIQ_Exception()函数由C语言定义,在文件开始用globl FUNC(FIQ_Exception)声明。 FIQ_Hander: STMFD SP!,{R0-R12,LR} BL FIQ_Exception LDMFD SP!,{R0-R12,LR} SUBS PC,LR,#4 当系统上电时,如果地址0x00000014内的数据是0xB9205F80,则从Flash的零地址开始执行,也就是执行romInit()函数。此函数将启动方式BOOT_COLD放在R0中,作为romStart的参数,将系统设为SVC32模式,并禁止IRQ和FIR中断,设置好系统堆栈指针跳到 romStart()执行。验证此部分程序执行情况的最简单的一种方法是用汇编写一段点灯程序,用以指令程序的执行情况。其中常量PINSEL0、 PINSEL1、IODIR、SPI_IOCON可以头文件templatARM.h中用define定义。 #define PINSEL0 0xE002C000 #define PINSEL1 0xE002C004 #define IODIR 0xE0028008 #define SPI_IOCON 0x00003DD0 我们设计的点灯程序如下。将其放在romInit.s适当的位置,可以定位程序的运行情况。 LDR r0,=PINSEL0 MOV r1,#0 STR r1,[R0],#4 STR r1,[R0] LDR r0,=PINSEL1 MOV r1,#0 STR r1,[R0],#4 STR r1,[R0] LDR r0,=IODIR LDR r1,SPI_IOCON STR r1,[R0] 在Tornado集成开发环境下,templatARM的BSP生成bootrom_res.bin文件后,可以借助ASD1.2的AXD反汇编调方式器进行单步仿真和调试。 2.3 sysLib.c文件 在这个文件中,主要是在sysHwInit()函数内实现系统外设的配置,中断向量表的拷贝和重映射,系统定时器中断向量的安装,串口初始化等功能。在串口还没有调通之前,可以借助上面提到的简单点灯函数实现程序的定位。其用C语言重新定义如下(将它插入本文件的适当地址,可以指示各个函数的执行情况): #include “LPC2106.h” PINSEL0=0x00000000; PINSEL1=0x00000000; IODIR=0x00003DD0; 系统的初始化和配置与硬件系统高度相关。对这部分的代码不作过多的解释,请参看代码注释。几个常量定义如下: #define Fosc 11059200 /*晶振频率,10MHz~25MHz应与实际一致*/ #define Fcclk(Fosc *4) /*系统频率,必须为Fosc的整数倍(1~32),且<=60MHz*/ #define Fcco (Fosc *4) /*CCO频率,必须为Fcclk的1、2、4、8倍,范围为156MHz~320MHz*/ #define Fpclk (Fcclk/4)*2 /*VPB时钟频率,只能为(Fcclk/4)的1、2、4倍*/ 2.4 templateTimer.c文件 本文件主要实现与系统时钟和系统辅助时钟相关的函数。关于系统时钟的各函数定义如下(系统辅助时钟的各函数与系统时钟一样,只须将T0换成T1即可): /*SysClkInt(),此函数每个时钟Tick被调用一次*/ void sysClkInt(void){ /*通知系统中断结束*/ T0IR=0x01; T0MR0+=(Fpclk/sysClkTicksPerSecond); VICVectAddr=0; /*调用系统中断函数*/ if(sysClkRoutine!=NULL) (*sysClkRoutine)(sysClkArg); } /*sysClkDisable()禁止系统时钟*/ void sysClkDisable(void){ if(sysClkRunning){ /*禁止系统时钟中断*/ VICIntEnClr=0x10; T0TC=0; SysClkRunning=FLASE; } } /*sysClkEnable()启动系统时钟*/ void sysClkEnable(void){ static BOOL connected=FALSE; if(!connected){ /*定时器0初始化*/ T0TC=0; T0TCR=0x01; T0MCR=0x01; T0MR0=(Fpclk/sysClkTicksPerSecond); VICIntEnable=0x10; Connected=TRUE; } if(!sysClkRunning){ T0TC=0; sysClkRunning=TRUE; } } 3 应用程序设计 由于EasyARM开发板本身资源较少,不可能与PC机连接成宿主机一目标机的调试环境,通过主机将代码下载到目标机再执行。因此在设计应用程序时,可以修改bootConfig.c文件中的bootCmdLoop()函数,生成bootrom_res.hex文件,格式转换后,下载到Flash中运行,在PC机上借助串口调试助手打印调试信息。具体过程是:在Tornado2.2集成开发环境下选取Build->Build Boot Rom,BSP选定templateARM,Image选定bootrom_res.hex,编译器选gnu,确认即可。 4 小结 VxWorks所需要的唯一的驱动程序是系统时钟,本文详细给出了系统时钟源代码,同时还给出了串口通信的源代码,使得开发板与PC机能正常通信。另外,给出了基于VxWorks的应用程序的设计方法。由于BSP的设计本身就是一件很具有挑战性的工作,相信本文对VxWorks的BSP设计得有所帮助。
    4. 我收回我在4楼说的话,按照5楼和8楼的说法,我又google了一下,找到了这个BSP,但是由于我的帐号权限不够,只能够看到这个BSP,不允许我下载。 airman926ej Board Manufacturer: Fujitsu BSP Sales Contact: Wind River Download tor221_airman926ej_1_2_0.zip! Product availability: Online Support BSP Tech Support: Professional Services (Ref# FUJ03) Expires Apr 2007 Wind River Architecture: ARM9   Processor: ARM926EJ   Processor revision details:    Board name: airman926ej/Fujitsu SoC 802.16 Reference Kit   Board revision details:    BSP name: airman926ej   BSP revision details: 1.2   Board form factor: Custom Processors on board: 1   DSPs on board: 0   NPs on board: 0   FPGA on board: 0   Host support: WindView - Analyzer Windows Host Installation Solaris Host Installation   Please see release notes for complete list of hosts and versions. Board short description: TBD    Product version: VxWorks: 5.5.1 - Tornado Tools 2.2.1   Vertical Market: Networking   Supported WindRiver Middleware: DOS FS    TCP/IP Networking Stack    10/100 Megabit Ethernet Device Support    Serial UART device support    Endian: Little    Debug port used: JTAG   Wind River certification: Not Supported Supported Board features: -ARM926EJ core -32 MB SDRAM -4 MB Flash -Timer -Memory Controller -Interrupt Controller -Ethernet -Serial port -I2C -SPI -Watchdog -GPIO Not Supported Board features: -ADC -DAC -Radio Control Known Problem 1:  VxWorks ROM images are not supported    Entry last updated: 03-FEB-09  
    5.                                  版主强悍、、
    6. 关于背光不能自动关闭的问题 17/6044 嵌入式系统 2010-03-24
      解决了吗?我现在遇见同样情况。
    7. uchar num 10/6470 嵌入式系统 2010-03-06
      楼主 找本  C语言的书籍看看啊。 一般变量定义,都存在一个默认初始值都是0。 所以要求我们在用变量时,除了首先定义,其后必须进行初始化,给其赋值,否则默认为0.
    8. 楼主,问题怎样解决呢,我也是用DM9161的,能把你的程序分享一下吗? 我的邮箱是:  wen3039@163.com
    9. 未能完成操作 设备没有连接 11/6033 嵌入式系统 2010-02-08
      十分想知道答案 !十分想知道答案 !十分想知道答案 !十分想知道答案 !十分想知道答案 !十分想知道答案 !
    10. 装个web server 啊
    11. 关于TW9910使用摄像头驱动的问题 14/7304 嵌入式系统 2010-01-15
      职业+友情帮顶!将来要搞摄像头,看来挺难搞的!
    12. vxworks loading问题 7/4377 实时操作系统RTOS 2009-12-31
      建议你用在pci上挂82559网卡,vxworks自带驱动的
    13. 顶起,
    14. 如果写磁盘时突然停电。。。。 22/6863 嵌入式系统 2009-12-28
      下面是关于NTFS基于日志的错误恢复机制的一段描述,严重怀疑当开启写缓存时,如果不能保证数据的写入顺序,它还能不能奏效: NTFS logs all operations it performs to filesystem metadata. It keeps track of the latest operation to affect each page of the cached metadata. The memory manager is instructed not to write modified pages (by placing them on a ModifiedNoWrite list) if the log entries for that page have not yet been written. Once the log entries are written (log entries are batched up), the pages affected by those log entries are moved onto the Modified list and can now be written by the lazy writer.
    15. C语言动态调用方法 29/8965 编程基础 2009-12-13
      引用 11 楼 xblue3 的回复: 对了,我是89S51的芯片,可以用吗?有警告哦.. Build target 'Target 1' compiling main.c... linking... *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS ? ? SEGMENT: ?PR?TEST?MAIN Program Size: data=34.0 xdata=0 code=584 "mead_c" - 0 Error(s), 1 Warning(s).
      函数指针在c51中使用得非常谨慎,因为有可能被OVERLAY(覆盖),具体的说明你可以看一下keil的帮助,在BL51 User's Guide->Data Overlaying一节。不过你放心,在rom中存放的的函数指针,不存在overlay的情况。所以,编译器的警告在此情况下不影响。
    16. 支持
    17. 单片机的C语言 58/20073 编程基础 2009-11-20
      引用 23 楼 duojinian 的回复: 给电子工程师的建议:最好不要用指针,想想为什么JAVA里面没有指针,就应该知道商用的代码健壮性稳定性是多么重要了吧。等到了客户投诉的时候,语言已经无法表达你那时的心情了。
      哥们太极端了吧,C语言区别一般语言的最大优势就是指针。我相信这也是c语言能够流行至今的最大原因了吧。什么事物都有两面性。有机会探讨一下辩证法。呵呵。
    18. 我想山寨M8,大家一起来出出主意!嘿嘿。 171/22011 嵌入式系统 2009-11-03
      看来我还得好好把硬件的也看看。不然要落后了
    19. 首先要书序操作系统,熟悉开发语言。比如在WINCE下,可以用EVC,VB.NET等等。可以再PC上搭建模拟环境。SD卡一般就是用来存储数据了。上述学习机的操作系统是集成在主板上,还是SD卡?操作系统要生成映像,然后存在在FLASH里面的,运行的时候被调到SDRAM。SD卡可以集成软件程序,你说的就是SD卡里面存储一个软件,可以,SD卡如果你的操作系统有了这个驱动,他会显示成一个硬盘。希望对楼主有帮助。
    20. 关于pci驱动安装的问题 14/3769 嵌入式系统 2009-10-15
      是驱动的问题。用windbg调试看看

最近访客

< 1/1 >

统计信息

已有214人来访过

  • 芯积分:--
  • 好友:--
  • 主题:10
  • 回复:65

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言