Windows CE嵌入式开发入门——基于Xscale架构(2)

BlenderGis安装碰到问题,ImageIO、无法点击和地图不加载 BlenderGis安装碰到问题,ImageIO、无法点击和地图不加载问题 阅读详情

下面是SMDK2410中的BootLoader中的main函数实现代码:

 

void main(void)

{

     //清空LED

     OEMWriteDebugLED(0, 0xF);

     //通用BootLoader (blcommon)主入口

    BootloaderMain();

//注意,在此调用了BootloaderMain函数,并且没有返回值

     SpinForever();

}

 

(1)BLCOMMON模块函数

下面列举出BLCOMMON中的控制函数并分析它们,这些函数在Blcommon.h中声明,代码实现在Blcommon.lib里:

n     OEMDebugInit函数:

在运行BootloaderMain程序后,将首先调用OEMDebugInit函数,它用来初始化调试信息的I/O设备,最常见的是串口设备。由于RS232协议简单性,在系统没有启动前对串口初始化较适用。在OEMDebugInit里,又通常调用OEMInitDebugSerial函数来初始化串口。

n     OEMPlatformInit函数

OEM层的初始化函数,它主要负责目标机上的硬件初始化。在汇编阶段只是初始化了很小一部分硬件,这是由于BootLoader要求处理时间短,因此在汇编阶段的硬件初始化是十分简单的。所以有必要用高级语言完成对目标机的硬件设置,这包括具体的时钟设置、驱动和传输设备接口的初始化。

下面是此函数代码实例:

 

BOOL OEMPlatformInit(void)

{

    BYTE BootDelay;

    BYTE KeySelect;

    EBOOT_CFG EbootCfg;

    DWORD dwStartTime, dwPrevTime, dwCurrTime;

    PCI_REG_INFO NANDInfo;

EdbgOutputDebugString("Microsoft Windows CE Bootloader for the Samsung SMDK2410 Version %d.%d Built %s/r/n/r/n", EBOOT_VERSION_MAJOR, EBOOT_VERS
ION_MINOR, __DATE__);

    //初始化LCD显示器

    InitDisplay();

    // 初始化驱动全局区域

    memset(pDriverGlobals, 0, sizeof(DRIVER_GLOBALS));

    pDriverGlobals->MajorVer = DRVGLB_MAJOR_VER;

    pDriverGlobals->MinorVer = DRVGLB_MINOR_VER;

    pDriverGlobals->eth.EbootMagicNum = EBOOT_MAGIC_NUM;

    // 初始化Flash,SMDK2410上的FLASH为AMD AM29LV800型。

    if (!AM29LV800_Init(AMD_FLASH_START))

    {

       RETAILMSG(1, (TEXT("ERROR: OEMPlatformInit: Flash 初始化

           failed./r/n")));

       return(FALSE);

    }

    ........  

    // 让用户选择启动选项

    while((dwCurrTime - dwStartTime) < EbootCfg.BootDelay)

    {

        KeySelect = OEMReadDebugByte();

        ......

    }

    switch(KeySelect)//判别用户命令

    {

    case 0x20: // 根菜单项

        g_bDownloadImage = MainMenu(&EbootCfg);

        break;

    case 0x00: //无按键失败

    case 0x0d: //用户取消了倒计时

    default:

        if (EbootCfg.ConfigFlags & CONFIG_FLAGS_AUTOBOOT)

        {

             EdbgOutputDebugString ( "/r/nLaunching flash image  ... /r/n");

             g_bDownloadImage = FALSE;

        }

        else

        {

             EdbgOutputDebugString ( "/r/nStarting auto-download ... /r/n");

             g_bDownloadImage = TRUE;

        }

        break;

    }

    //如果用户指定了静态IP地址,那么就使用静态IP地址(不使用DHCP)

    if (g_bDownloadImage && !(EbootCfg.ConfigFlags & CONFIG_FLAGS_DHCP))

    {

       pDriverGlobals->eth.TargetAddr.dwIP = EbootCfg.IPAddr;

       pDriverGlobals->eth.SubnetMask      = EbootCfg.SubnetMask;

    }

    //配制以太网控制器

    if (!InitEthDevice(&EbootCfg))

    {

       DEBUGMSG(1, (TEXT("OEMPlatformInit: Failed to initialize Ethernet

           controller./r/n")));

       return(FALSE);

    }

    return(TRUE);

}

 

n     OEMPreDownload函数

在下载操作系统前执行这个函数,它可以用来设置如何进行Image文件下载。例如,可以设置成从网络下载或者跳过下载直接加载Flash中的Image文件。

下面是此函数代码实例:

 

DWORD OEMPreDownload(void)

{

    CHAR szDeviceName[EDBG_MAX_DEV_NAMELEN];

    BOOL  bGotJump = FALSE;

    DWORD dwDHCPLeaseTime = 0;

    PDWORD pdwDHCPLeaseTime = &dwDHCPLeaseTime;

    DWORD dwBootFlags = 0;

    //如果用户想进入已存在的映像,那么跳过下载

    if (!g_bDownloadImage)

    {

         g_bWaitForConnect = FALSE;  // 不等待宿主机连接

         return(BL_JUMP);

    }

    //如果用户想用一个静态IP地址,那么就不要从DHCP服务器请求一个地址

    //将DHCP租期时间变量设置为NULL

    if (pDriverGlobals->eth.TargetAddr.dwIP &&

         pDriverGlobals->eth.SubnetMask)

    {

         pdwDHCPLeaseTime = NULL;

         RETAILMSG(1, (TEXT("INFO: Using static IP address %s./r/n"),

              inet_ntoa(pDriverGlobals->eth.TargetAddr.dwIP)));

RETAILMSG(1, (TEXT("INFO: Using subnet mask %s./r/n"),
inet_ntoa(pDriverGlobals->eth.SubnetMask)));

    }

    //创建基于以太网地址的设备名称(也就是Platform Builder如何定义设备)

    //

    memset(szDeviceName, 0, EDBG_MAX_DEV_NAMELEN);

    CreateDeviceName(&pDriverGlobals->eth.TargetAddr, szDeviceName,

        PLATFORM_STRING);

    EdbgOutputDebugString("INFO: Using device name: '%s'/n", szDeviceName);

    //初始化TFTP传送

    //

    if (!EbootInitEtherTransport(&pDriverGlobals->eth.TargetAddr,

                                   &pDriverGlobals->eth.SubnetMask,

                                  &bGotJump,

                                  pdwDHCPLeaseTime,

                                  EBOOT_VERSION_MAJOR,

                                   EBOOT_VERSION_MINOR,

                                   PLATFORM_STRING,

                                   szDeviceName,

                                   EDBG_CPU_ARM720,

                                   dwBootFlags))

    {

        return(BL_ERROR);

    }

    //保存DHCP租期时间(注意,本例中使用的是静态IP)

    pDriverGlobals->eth.DHCPLeaseTime = dwDHCPLeaseTime;

    return(bGotJump ? BL_JUMP : BL_DOWNLOAD);

}

 
芒果YOLOv7改进04:Loss篇:原创改进损失函数Repulsion:独家首发最新改进Repulsion Loss解决目标遮挡场景下检测,为解决密集人群检测中遮挡设计的损失函数,打造高效检测器涨点 YOLOv7原创改进Repulsion|首发最新改进为解决密集人群检测中遮挡设计的损失函数 阅读详情

相关推荐

STM32实现webserver显示数据及配置参数

其实提到的将fsdata.c重命名为fsdata_custom.c,可以不重命令,将/LWIP/Target/lwipopts.h中HTTPD_USE_CUSTOM_FSDATA 定义为0,这样HTTPD_FSDATA_FILE将使用fsdata.c,避免每次生成fsdata.c需要重命令的麻烦。2、登录成功后,板卡根据板卡配置类型,返回对应的数据页面,该页面可实现数据校准、清零,以及进行到板卡参数设置页面。目前还未实现post功能以及http身份验证功能。3、板卡参数设置页面。

2694

《Windows CE嵌入式开发入门——基于Xscale架构》第2章 系统时钟

电子系统中,时钟是一个关键的要素,尤其在手持设备中,时钟系统的设计与系统的性能和功耗有直接关系。PXA255提供了丰富的时钟系统的控制能力,能有效地实现性能和功耗的平衡。2.1  实时时钟RTC在介绍时钟机制之前,先要说明一下PXA255上的时钟系统。PXA255上的时钟系统主要包含以下5个模块:n     32.768kHz振荡器;n     3.6864MHz振荡器;n  

taling的专栏 8918

项目安全等保测评加固手册

安全等级测评的目的是通过对目标系统在安全技术及管理方面的测评,对目标系统的安全技术状态及安全管理状况做出初步判断,给出目标系统在安全技术及安全管理方面与其相应安全等级保护要求之间的差距。测评结论作为委托方进一步完善系统安全策略及安全技术防护措施依据!!

菜鸟运维升级之路 2416

《Windows CE嵌入式开发入门——基于Xscale架构》 第8章 调试与仿真

 通过远程控制程序,开发人员可以从宿主机上远程地对目标机的运行状况进行监视和控制。宿主机和目标机之间一旦建立了远程控制连接,开发人员就可以进行下列操作:下载宿主机的文件到目标机、监视目标机处理器的状况和各个线程及进程、监视并且分析目标机内核或者应用程序的处理性能等。在Platform Builder和Embedded Visual C++中都包含了下列远程工具:n     Remote

taling的专栏 9080

Mellanox CX7网卡搭配400G光模块实战:从选型到部署的完整指南

本文详细解析了Mellanox CX7网卡与400G光模块的选型策略与部署实践,涵盖硬件对比、兼容性验证及性能调优。重点介绍了OSFP光模块的选择要点和常见问题排查方法,帮助用户构建高性能网络基础设施,适用于AI训练、金融交易等场景。

efc1234567的博客 1291

Discuz IIS上传附件大于28M失败报错Upload Failed.修改maxAllowedContentLength(图文教程)

下图:Discuz X3.5的系统信息,上传许可为1024MB(1GB)论坛为局域网论坛,仅供内部同事交流使用!使用官方最新的Discuz! X3.5 Release 20231221 UTF-8 下图:选择上传附件(提示可以最大上传100M) 下图:模拟上传84M的文件(

骚团长的博客 1828

《Windows CE嵌入式开发入门——基于Xscale架构》 第7章 Windows CE体系结构

7.1  层次式架构1.系统分层模型操作系统(包括应用环境、操作环境等)一般具有分层的结构特征,典型的就是UNIX系统的同心环,最里面是硬件,从里向外依次是kernel、共享函数库、应用程序3个层次。Windows CE的分层结构比较复杂(如图7-1所示),这是根据它适合嵌入式应用的特点所设计的。从提供者的角度来看,图中上面4层主要由微软公司维护开发,下面两层主要由嵌入式产品开发商根据产品

taling的专栏 1万+

①电子产品拆解分析-暖手宝

电子产品拆解分析-暖手宝 ①按键三档调温暖手; ②长按进入氛围呼吸灯; ③安卓接口充电以及支持USB输出;

a6662580的博客 5294

《Windows CE嵌入式开发入门——基于Xscale架构》前言

《Windows CE嵌入式开发入门——基于Xscale架构》作者:傅 曦 陈 黎 董磊鋆 石卫华 等出版社:人民邮电出版社前言关于本书随着微软公司Windows CE嵌入式开发技术的发展,针对Windows CE平台的开发技术越来越受到行业市场的关注,越来越多的基于Windows CE平台的行业应用相继出现。由于Windows CE应用程序与桌面Windows应用程序的开发平

taling的专栏 3379

【2026最新版】PCL点云处理算法汇总(C++长期更新版)

PCL学习目录。博客长期更新,最近一次更新时间为:2026年10月4日。

点云侠的博客 63万+

用一台笔记本跑起 SAP HANA:从 express edition 的定位,到本地硬件门槛与安装实操

SAP HANA是面向个人开发者、初创团队与教学科研场景的精简发行版,保留了in-memory列存引擎、SQLScriptAFLGraphSpatial等核心能力,可免费用于开发与一定规模的生产用途(上限为 32 GB RAM)。它最大的特征,是能在资源受限的laptop或上快速落地,让你在本地完成从建模、开发到测试的完整闭环。SAP在交付形态上,提供了多种安装包:预配置的VM OVA、面向Linux的二进制安装包,以及历史上出现过的容器化方案;你可以按现有设备与熟悉的运维方式择优选择。官方文档把VM。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 536

《Windows CE嵌入式开发入门——基于Xscale架构》 第5章 Windows CE操作系统简介

5.1  嵌入式系统嵌入式系统具备了PC的部分标准功能,但它又有一定的延伸。嵌入式系统的组件根据应用的需要,嵌入在设备内部,发挥着运算、处理、储存以及控制等作用。嵌入式系统一般由硬件设备、嵌入式操作系统、嵌入式应用软件组成。硬件大致有微处理器(也叫微控制器)、存储设备、外围接口组成。目前大多以32位的单处理器、64MSDRAm、32MFlash具多。操作系统具有内核镜像小、实时性强的特点,具备

taling的专栏 7019

Oracle EBS 如何处理MMT表错误-WIP 实体未定义或不具有期间余额项

错误说明:WIP 实体未定义或不具有期间余额项。(The wip entity is either not defined or does not have a period balance entry)由于工单的创建日期为4月份,工单的余额表记录的期间是4月份,而3月份工单余额表中没有记录。公司将上一个新的库存组织,有一部分测试的工单创建日期在4月份,而工单的发放日期、发料事务处理日期和完工事务处理日期均在3月份。1、关闭3月份库存会计期,待定事务处理存在未计成本物料/WMS。成本类型: PAC成本。

陈显平的专栏-Oracle EBS 652

《Windows CE嵌入式开发入门——基于Xscale架构》第1章 GPIO和中断控制器

GPIO(General-Purpose I/O,通用输入/输出)的数量和功能以及中断控制的能力是处理器功能强弱的体现,PXA255处理器的GPIO以及中断控制器提供了丰富的资源,增加了系统设计的灵活性。1.1  GPIOPXA255处理器提供了81个GPIO引脚,同时提供了27个寄存器来控制这些引脚的工作方式和状态。这27个寄存器控制了引脚的输出/输入方向、引脚状态以及引脚的附加功能(关

taling的专栏 9883

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

《Windows CE嵌入式开发入门——基于Xscale架构》 第9章 Windows CE BSP及驱动程序结构分析

 9.1  Windows CE驱动程序结构概述Windows CE的驱动程序可以从多种角度进行区分。1.从加载以及接口方式来区分可以分为本机设备驱动(Built-In Driver)、可加载驱动(Loadable Driver)以及混合型驱动。(1)本机设备驱动本机设备驱动即Native Device Drivers。这些驱动程序在系统启动时,在GWES的进程空间内被加载

taling的专栏 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Windows CE嵌入式开发入门——基于Xscale架构(5)

9.2.5  Windows CE标准BootLoader的需求1.BSP必须在加载Windows CE BootLoader以及操作系统的时候有一个默认的模式。(1)在系统启动时,即使用户不输入指令,也能自动地下载操作系统镜像文件。即便使用了启动菜单,也是有时间限制了,超过时间限制,BootLoader应当能自动地按照默认方式启动操作系统;(2)BootLoader应当被固化在FLA

menuconfig的专栏 875

《Windows CE嵌入式开发入门——基于Xscale架构》第3章 存储控制器

任何一个处理器都必须与存储器紧密配合才能实现各种功能,处理器对存储器的控制能力对系统的整体性能有至关重要的影响。PXA255通过DMA控制器(DMA Controller)、存储控制器(Memory Controller)和MMU实现对各种存储器的控制。3.1  DMA控制器(DMA Controller,DMAC)DMA控制传输(DMAC)是使CPU处理其他与数据总线无关的处理,而有DM

taling的专栏 9250

《Windows CE嵌入式开发入门——基于Xscale架构》目录

第一部分  Intel Xscale芯片应用详解第1章  GPIO和中断控制器1.1  GPIO1.1.1  GPIO操作(GPIO operation)1.1.2  GPIO附加功能(Alternate Function)1.1.3  GPIO寄存器定义1.2  中断控制器1.2.1  中断控制器操作1.2.2  中断控制器寄存器定义第2章  系统时钟2.

taling的专栏 6284

《Windows CE嵌入式开发入门——基于Xscale架构》 第10章 案 例 分 析

  10.1  TouchScreen驱动分析10.1.1  介绍触摸屏驱动是从触摸屏硬件上获取用户的输入信息,然后将触摸事件传递给GWES子系统。驱动会矫正坐标值,比如将歪斜的线条修正为直线。在用户的笔或者手指触摸屏幕的时候,驱动必须随时返回坐标值,当笔或者手指离开屏幕后,必须产生事件来标记“抬笔”事件。10.1.2  注册表设置下面是触摸屏驱动的注册表设置。 

taling的专栏 1万+

Windows CE嵌入式开发入门——基于Xscale架构(1)

1.BootLoader的构成组件BootLoader主要由以下两部分组成。(1)OEM startup code这部分代码是在BootLoader中最先被执行的。它的主要功能是初始化最小范围的硬件设备,比如设置CPU工作频率、关闭看门狗、设置cache、设置RAM的刷新率、填写内存控制寄存器(通知CPU有效的数据总线引脚数)等。由于系统刚刚启动,不适合使用复杂的高级语言,因此这部分代

menuconfig的专栏 969

Windows CE嵌入式开发入门——基于Xscale架构(6)

9.2.6  编译BootLoader程序BootLoader程序可以通过PB的集成编译环境编译链接,控制文件为.bib文件,下面是一个简单的BootLoader的.bib文件: MEMORYCLI 9fc00000 00050000 RAMIMAGERAM 80080000 00070000 RAMCONFIGCOMPRESSION=ONSRE=ONROMST

menuconfig的专栏 833
上一篇: Windows CE嵌入式开发入门——基于Xscale架构(1)
下一篇: Windows CE嵌入式开发入门——基于Xscale架构(3)
menuconfig
博客等级 码龄19年 713粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值