<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[嵌入式软件研发的专栏]]></title><description><![CDATA[嵌入式软件研发-汽车多媒体研发]]></description><link>https://blog.youkuaiyun.com/cepoly</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; cepoly]]></copyright><item><title><![CDATA[B1、WinCE6.0内核启动流程-------之bootloader解释]]></title><link>https://blog.youkuaiyun.com/cepoly/article/details/8751399</link><guid>https://blog.youkuaiyun.com/cepoly/article/details/8751399</guid><author>cepoly</author><pubDate>Tue, 02 Apr 2013 14:49:25 +0800</pubDate><description><![CDATA[1.BootLoader的架构
1.1  Bootloader简介
Bootloader是建立在操作系统内核运行之前的一小段程序，通过这段小程序，可以初始化硬件设备、建立系统的内存空间映射图，从而将系统的软硬件环境带到一个已知的状态，以便为最终调用操作系统内核准备好正确的环境。最终，Bootloader把操作系统内核映像加载到RAM中，并将系统控制权传递给它。
一个典型的bootloader]]></description><category></category></item><item><title><![CDATA[B2、WINCE6.0内核的启动过程----------之OAL解释]]></title><link>https://blog.youkuaiyun.com/cepoly/article/details/8751265</link><guid>https://blog.youkuaiyun.com/cepoly/article/details/8751265</guid><author>cepoly</author><pubDate>Tue, 02 Apr 2013 14:31:39 +0800</pubDate><description><![CDATA[[移植OAL]
WinCE6.0的内核启动过程: 

OAL不能调用内核的KernelStart()函数了, 所以自己要实现一个KernelStart() (nkldr.lib替我们完成了这个, 把nkldr.lib链接到OAL),调用nkldr.lib中的KernelStart().然后执行的ARMInit()函数有一个很重要的任务,它将位于OAL的OEMinitGlobals()函数指针]]></description><category></category></item><item><title><![CDATA[分享大学期间的比赛作品]]></title><link>https://blog.youkuaiyun.com/cepoly/article/details/8743698</link><guid>https://blog.youkuaiyun.com/cepoly/article/details/8743698</guid><author>cepoly</author><pubDate>Sun, 31 Mar 2013 18:37:29 +0800</pubDate><description><![CDATA[硬件 ： ARM9   TQ2440 +Zigbee（cc2430）+各种传感器+蓝牙透传+平板电脑+wifi摄像头
软件：  QT界面+安卓界面+ zigbee协议+各种底层驱动

实现功能：数据无线传输及相应控制。。。
视频地址
http://www.tudou.com/programs/view/r8LjZkK9_EQ/]]></description><category></category></item><item><title><![CDATA[A3、限制函数内部循环使用局部变量的数目，最多不超过12个]]></title><link>https://blog.youkuaiyun.com/cepoly/article/details/8741121</link><guid>https://blog.youkuaiyun.com/cepoly/article/details/8741121</guid><author>cepoly</author><pubDate>Sat, 30 Mar 2013 21:55:45 +0800</pubDate><description><![CDATA[应该尽量限制函数内部循环所用局部变量的数目，最多不超过12个，这样，编译器就可以把这些变量都分配给ARM寄存器;编译器会试图对C函数中的每一个局部变量分配一个寄存器。如果几个局部变量不会交迭使用，那么编译器会对它们分配同一个寄存器。当局部变量多于可用的寄存器时，编译器会把多余的变量存储到堆栈。由于这些变量被写入了存储器，所以被称为溢出或者替换(swapped out)变量，就像虚拟存储器的内容被替]]></description><category></category></item><item><title><![CDATA[A2、减计数循环要比增计数循环更好。]]></title><link>https://blog.youkuaiyun.com/cepoly/article/details/8740979</link><guid>https://blog.youkuaiyun.com/cepoly/article/details/8740979</guid><author>cepoly</author><pubDate>Sat, 30 Mar 2013 21:06:15 +0800</pubDate><description><![CDATA[循环的终止条件应为减计数到零(count dawn to zero)，而不是计数增加到某个特定的限制值。由于减计数结果已存储在条件标志里，与零比较的指令就可以省略了。由于不再使用‘作为数组的下标索引，采用减计数就没有任何问题。
int checksum(int * data)
{
    unsigned int i;
    int sum = 0;
    for( i = 64;]]></description><category></category></item><item><title><![CDATA[A1、目前嵌入式ARM数据处理操作几乎是32位的，局部变量最好用32位的数据类定义！]]></title><link>https://blog.youkuaiyun.com/cepoly/article/details/8740739</link><guid>https://blog.youkuaiyun.com/cepoly/article/details/8740739</guid><author>cepoly</author><pubDate>Sat, 30 Mar 2013 20:33:26 +0800</pubDate><description><![CDATA[函数示例：用来计算一个包含64个字的数据包的校验和。
int checksum(int * data)
{
    char i;
    int sum = 0;
    for( i = 0; i 
  {
    sum += data[i];
  }
    return sum;
}

似乎声明i为char类型是没有什么问题的，甚至可能会觉得一个char类型的数据]]></description><category></category></item></channel></rss>