
Embedded Dev
saintony
这个作者很懒,什么都没留下…
展开
-
Project Euler 46 solution optimized using SSE2
http://www.mathblog.dk/project-euler-46-odd-number-prime-square/Not a hard one to code, but it can be optimized using SSE2 instructions. The code below runs with g++ 4.8.1: g++ -g -c riddle.cpp原创 2015-07-18 15:49:44 · 941 阅读 · 0 评论 -
开始新的工作
从WinCE4.2到5.0的更替算是正式完成了,将近一个月的忙活儿之后终于可以歇口气了。现在开始继续原来的教材编写--到了最关键也是最难的地方了:裸机WebServer。已经有了一个小型WebServer的源代码了,主要的工作就是CS8900网卡驱动的移植。显然从该源码向Eboot移植是最方便的,但是这样项目就无法在ADS编译了,可是反过来的难度实在太大...正在考虑p.s.Primer看完了原创 2006-12-29 10:32:00 · 1164 阅读 · 0 评论 -
CE中的亮度控制
对于S3C2440讲,亮度的控制只是对GPIO的TIMER0 Compare寄存器0读写。另,在CE驱动中,对于系统中的寄存器,没有必要自己重新VirtureCopy-VirtureAlloc,CE已经做好了映射:v_pPWMregs->TCMPB0; 对于亮度控制,还需要进行一次初始化(待续)原创 2006-12-26 12:37:00 · 1628 阅读 · 0 评论 -
WinCE中的音量/亮度控制
一开始使用了winmm.dll(ce驱动里面可以直接用,不用LoadLibrary)里面的mixer api,比较麻烦,好不容易编译过去了,调用又失败了。后来一查,这算是DirectSound函数集,不建议使用,尤其是像音量控制这么简单的要求。后来使用了最简单的waveOutGetVolumn和waveOutSetVolumn函数,却奏效了。 Debug了几个低级的边界越界错误后,一切正常。按照同原创 2006-12-25 23:20:00 · 2759 阅读 · 0 评论 -
06-8-23
今天终于看完了eboot代码,修改了DownloadImage,使得eboot下载wince镜像不必再通过速度很慢的pb+tftp 了。不过最后的写入还有问题。下午公司要寄出一批2440,都烧了上周开发的bootloader,但是发现运行极不稳定,有的甚至只能启动一次。折腾了半天,发现是wince一个参数没有设置好--呼~吓死我了。电脑终于坏了....原创 2006-08-23 21:25:00 · 778 阅读 · 0 评论 -
06-8-21
上午得到正式的通知,修改eboot源码,取消掉ethernet部分,直接从sdram中下载镜像。eboot 源码规模很大,大概是好几万行,而且代码风格也不是很清晰,数据结构繁杂,看了一天,脑子都木了,经理还要我们尽快完成,那种痛苦就像便秘。原创 2006-08-21 22:28:00 · 931 阅读 · 1 评论 -
06-8-25
今天没干活儿,就是写文档了,不知道怎么搞得,竟然写了大半天,不过都是eboot代码分析。后来经理说,bsp开发到此为止,从现在开始进入embedded Visual C++的开发--要爽了原创 2006-08-25 19:57:00 · 742 阅读 · 0 评论 -
失败的尝试
CE下可以通过MmMapIoSpace进行硬件的直接访问,比如可以操作LED(昨天已试成功),但是操作Nand还是不可行的,在EVC下进行的任何关于nand的操作都失效了,Flash的ID读出来总是0,更夸张的是一进行写操作程序就自动退出了。估计CE对Nand进行了保护。这个尝试失败了。接下来的任务:在之前的按键驱动中作一个 模拟电视的音量和亮度调整。原创 2006-12-20 09:49:00 · 986 阅读 · 0 评论 -
WinCE下模拟电视音量/亮度菜单框架开发完成
首先描述一下功能:完全模拟电视,3个按键,1个功能选择,剩下的两个进行值的加或减,指定时间无操作则自动消失。最初的想法是在Shell上绘图,这样最直接,但是最大的问题是如何擦除,可行的方法是进行屏幕刷新,但是我试了好几次都不行,于是换成了现在的方案:把所有的显示都用窗体模拟,开发流程如下:1、从EVC中抓取SDK程序的代码,放到驱动中。之所以这么做,是因为驱动中无法使用MFC,PC平台的S原创 2006-12-22 18:04:00 · 2167 阅读 · 6 评论 -
驱动中的WIN32开发
1.驱动中不是任何事情都可以做的,比如无法使用MFC。说驱动可以做任何事是就硬件操作和操作系统内核而言的,要做一点类似应用的开发就只能用SDK。2.WinCE与其他平台的差异。总以为CE下的开发与PC平台的windows开发没什么差别,其实差别还是很显著的,n多在pc上可以实现的功能在ce中都不支持,比如不支持透明窗体等。以后大家在做ce的时候要小心。今天我花了2个多小时在MFC上,浪费了原创 2006-12-21 16:29:00 · 1292 阅读 · 0 评论 -
MFC on WinCE
1.WinCE为了节省资源,不支持透明窗体,只能手工实现(GetPixel + SetPixel,但速度可想而知)因此,要想实现一个类似电视那种的悬空控制界面只能考虑得到桌面的DC,然后绘制图像。擦除图像只要刷新桌面即可,但是我无论如何也无法实现WinCE桌面的刷新,PostMessage 调用DC成员函数都不行....还不知道怎么办2. 今天倒是解决了一个比较常见的问题:CButton上显示原创 2006-12-20 22:24:00 · 1773 阅读 · 0 评论 -
第二阶段任务胜利完成
说来很惭愧,代码看了两天,最后动手的耗时也就1天,还有半天的时间是在配置开发环境...但成果是喜人的,以后再也不用PB+Ethernet下载wince了,那个能让人等到海枯石烂--现在,可以直接利用USB下载(爆快),然后启动新的eboot直接烧入! WinCE安装速度得到了数量级的提升!不过美中不足的是有个关于文件大小的参数是写死的,等过一阵子再说吧,把menu改了,或者直接判断文件大小...原创 2006-08-24 20:56:00 · 1022 阅读 · 0 评论 -
第二阶段工作胜利完成
今天上午刚刚接手的第二个Task胜利完成。前一阶段做的是一个可视化的2410-nboot,现在要求将这个咚咚移植到2440上。不同点在于:1.2440的wince默认装了eboot,原先的nboot在保留原有功能的基础上还要与其共存2.由于1的原因,给我的nboot只剩下2个block,也就是32k的空间,因此需要压缩bmp数据具体过程:1.修改旧的一级nboot,使其先加载运行我的nboot原创 2006-08-17 17:28:00 · 1090 阅读 · 1 评论 -
Task 2 Complete!
经理昨天布置的任务2终于完成了!其实没什么太难,就是转换了一下palette的格式而已,大多数的工作还是由一个叫bmpconverter的工具完成的,一开始还打算自己写呢,呵呵~那个格式转换的工具大多数用的是bit操作,原来在做数据压缩作业的时候操作过, 所以今天仅用了2个小时就搞定了--学院的课还是很有用的原创 2006-08-15 15:59:00 · 769 阅读 · 0 评论 -
WinCE源代码的一个Bug
早就觉得WinCE里面Eboot的源代码质量不高,而且还有Bug,今天又发现一个:dwNumBlocks = (dwImageLength / 0x4000) + 1;这是烧写Stepldr和Eboot时候计算Block数的代码,Stepldr在第一块,即0,所以加1,但是Eboot的大小为256K,即0x40000,除以0x4000,正好不用加1,结果这个地方还加了个1,属于低级失误。真原创 2006-12-17 23:02:00 · 1464 阅读 · 0 评论 -
CE按键驱动开发笔记之Final--OK
今天解决了EINT11和EINT19的区分问题,一开始用自定义的宏rEINTPND失败了,发生了内核错误,后来找到一个叫_pIOPregs->EINTPEND的东西,这个东西就是要用的EINTPND,通过v_pIOPregs->EINTPEND & (1 EINTPEND & (1 我的第一个CE驱动成功了!p.s.今天又改了下5.0的Eboot,还是把网口下载改为USB下载。由于5.0的原创 2006-12-15 10:35:00 · 1509 阅读 · 1 评论 -
CE驱动开发3与CE5其他
今天就是开了下中断,EINT11能用了。CE内核自动处理了EINT8_23到EINT11和EINT19的转换。但是不知道为什么EINT19触发不了。但是IRQ到SysIntr的连接还是没有搞定,其实所有的工作都是在这里 ,连好之后一切就都是顺其自然了。另,今天发现Nboot2加载内核到85%的时候会花屏,后来一算:CE5的加载地址:0x32001000,显存地址:0x33800000,两个一减原创 2006-12-13 19:22:00 · 1216 阅读 · 0 评论 -
运气太好了
前两天在写AT9261下的SPI Dataflash驱动是我第一次看着Datasheet写的驱动,前后4天,终于搞定了,之所以这么快,主要是因为运气太好了.一开始我都是在假设的情况下操作硬件的,比如我假设dataflash在片选0,fixed,直连,MCK,还有AT91S_SPI结构体的起始位置为SPI0(还有个SPI1),竟然全部正确.之后的读写擦操作也是迷迷糊糊按着datasheet的描述写的原创 2007-02-06 10:11:00 · 1190 阅读 · 0 评论 -
法无定法是大法
年后第一份工作:为WinCE5.0添加板子上另外两个串口的驱动支持。手头的2440开发板可以选用12M和16M两种频率的晶振 ,但是发现16M晶振下原先正常的16M程序全部无法运行,但是在12M下却可以运行,但是串口输出是乱码。郁闷了,就这样耗了大半天。不得已向经理求助,得到的答复是在12M下修改串口波特率。考虑到代码中运行的是16M的,现在的晶振是12M的,所以造成乱码的原因就是板子串口的波特率原创 2007-03-02 15:38:00 · 1374 阅读 · 0 评论 -
提取nk.nb0中的文件
http://www.nah6.com/~itsme/cvs-xdadevtools/dumprom/这是国外某高人写的提取wince镜像文件的源代码,下载下来后编译可以生成最后的dumprom.exe,利用这个工具就可以将nk.nb0数据解压出来,如果是bin文件可以先利用cvrtbin将其转换为nb0.困扰很多人n久的问题终于得到解决了! 他们研究出了CE ROM的分配布局:htt原创 2007-01-15 14:44:00 · 6048 阅读 · 0 评论 -
NandFlash和NorFlash的异同 zz
http://www.armzone.com/Article.asp?Nid=57 发表日期:2005-9-6 18:05:18 撰写人:付萍 阅读次数:2765转载 2006-08-05 23:43:00 · 1214 阅读 · 0 评论 -
ActiveX、OLE和COM介绍 zz
转自 http://www.cnblogs.com/jjkv3/articles/27697.aspx熟悉面向对象编程和网络编程的人一定对ActiveX、OLE和COM/DCOM这些概念不会陌生,但是它们之间究竟是什么样的关系,许多人都还是比较模糊的。在具体介绍它们的关系之间,我们还是先明确组件(Component)和对象(Object)之间的区别。组件是一个可重用的模块,它是由一组处理转载 2006-09-02 18:10:00 · 1090 阅读 · 0 评论 -
嵌入式设备上的 Linux 系统开发 zz
http://www.chinaunix.net 作者:sannas 发表于:2003-05-21 18:31:30转载 2006-09-06 10:57:00 · 1247 阅读 · 0 评论 -
BSP概念解析 zz
http://www.armzone.com/Article.asp?Nid=47Drew在这里按照自己的理解来解释一下BSP( Board Support Package),仅供参考:BSP是板级支持包,是介于主板硬件和操作系统之间的一层,应该说是属于操作系统的一部分,主要目的是为了支持操作系统,使之能够更好的运行于硬件主板。BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的B转载 2006-08-05 23:44:00 · 1450 阅读 · 0 评论 -
嵌入式系统之Linux vs WinCE zz
计算机最大的市场是嵌入式设备。基本上,含有计算机但是外表并不象计算机的一切设备都可算嵌入式,包括网络设备(如路由器),工控设备(如数控机床),汽车,信息家电, 移动计算设备等各种设备。那么,在这个最大的市场中,Linux和Windows谁更有实用性呢?让我们先分析一下嵌入式领域对OS的要求。 嵌入式领域与PC领域有很大的不同,嵌入式系统都是针对具体应用的专用系统,其软硬件需要面向应用来转载 2006-09-05 10:36:00 · 1384 阅读 · 0 评论 -
谨献给为了知识执着的嵌入式初学者zz
谨献给为了知识执着的嵌入式初学者,欢迎高手补充讨论 实践当然是最锻炼人的方式,但是我想在校生很少有这样的机会,别说本科生,硕士生也未必有条件。所以我想学习嵌入式要从个人的知识背景和现实条件出发。订立合适的阶段目标,在允许的条件下多动手多思考。一般情况下对于硬件设备是比较短缺的。但是可以从软件方面和嵌入式系统开发模式上下功夫,提醒大家一点,嵌入式系统开发设计的内容知识很多,所以大家不要乱,在转载 2006-09-06 10:57:00 · 1280 阅读 · 0 评论 -
WindowsCE下Unicode和Ansi字符间互相转换的函数
下面的头文件包含了Ansi与Unicode之间的转换函数,实乃WinCE开发者必备:#ifndef _ENCODE_H_#define _ENCODE_H_//== Ansi to Unicode ==//static CString Ansi2Unicode(char* ansi){ // Calc the length int len=0; int widecharlen=MultiB转载 2006-09-01 17:58:00 · 1219 阅读 · 1 评论 -
Windows CE OAL层的结构与开发
引 言 Windows CE是微软针对嵌入式领域推出的一款全新的操作系统。之所以说它是一款全新的操作系统,是因为尽管Windows CE的UI非常接近其它的桌面版Windows操作系统,但是它的内核完全是重新写的,并不是任何一款桌面版Windows的精简版本。 Windows CE是一种支持多种CPU架构的操作系统,这其中包括ARM、x86、MIPS和SHx,极大地减轻了0EM开发过程中移转载 2006-09-15 16:52:00 · 1448 阅读 · 0 评论 -
'Professional Assembly Language' is a nice book about Intel_AT&T
<br />"Professional Assembly Language" is a very nice beginner text about Intel/AT&T ASM. It offers a very broad view of the area, and a relatively thorough explanation.<br /> <br />Basically it is a dictionary-like book. I have got prepared for the thorou原创 2011-01-16 14:02:00 · 1458 阅读 · 0 评论 -
USB的结构及工作原理
USB(Universal Serial Bus)是1995年Microsoft、Compaq、IBM等公司联合制定的一种新的PC串行通信协议。USB协议出台后得到各PC厂商、芯片制造商和PC外设厂商的广泛支持。USB本身也处于不断的发展和完善中,从当初的0.7、0.8到现在广泛采用的1.0、1.1版本到即将被采用的2.0版本。USB外设在国外以惊人的速度发展,迄今为止,各种USB的外设已经有上千转载 2006-09-15 16:44:00 · 3786 阅读 · 0 评论 -
Take care of Segments before entering C programmed binaries
Assume that your loader is written by ASM, and your kernel is written by C. When your loader is to jump to kernel start addr, you have to set ds, es, ss to the same value. I think C language has promi原创 2008-05-26 01:56:00 · 767 阅读 · 0 评论 -
Thanks to GNU~!
I thought to develop a pure platform-independant binary *nix is necessary. So I use Linux in VMWare to develop a bootloader for a training one month later to some of my colleagues. I would say it suck原创 2008-05-13 01:20:00 · 767 阅读 · 0 评论 -
AT45D in ATSAM9261 SPI驱动实现
基础性的代码直接用Atmel例程中提供的,然后找到并映射AT91S_SPI结构体的地址,然后按照Datasheet编写对应的初始化函数、擦除、读状态函数等。and,It works ok。再一次感受到,硬件的驱动只是硬件的一个代码表达,感觉很像VHDL,写的时候必须要跟硬件工程师合作才行。原创 2007-02-05 14:57:00 · 1785 阅读 · 1 评论 -
WinCE内核热更新
"热更新"是我自己起的名字,意思就是说在ce中彻底更新系统,包括bootloader和内核.其实原理还是很简单的,就是用MmMapIoSpace映射好nand的寄存器,然后把对nand的操作从别的程序移植过来.没错,一切都在ce中运行的一个应用程序中完成的.本来以为这个项目失败了,今天偶然看了一下原来的源代码,原来是指针没有解引用,这么一个低级的失误导致失败的...汗~...还有两个nand的原创 2007-01-29 22:11:00 · 2340 阅读 · 2 评论 -
对CE-Updater实现的思考
刚才又傻呼呼的做了几个愚蠢的尝试,就是试图在应用层(用户权限)穿过文件系统直接操作flash.费了很大劲link到了文件系统PDD层的函数,运行的时候程序崩溃掉了.想来想去,无论如何要通过驱动来完成了,要么调用文件系统的驱动(之前似乎在哪里看到过有人用过),要么自己新加一个驱动完成.原创 2007-01-27 19:53:00 · 1354 阅读 · 6 评论 -
WinCE 4.2中驱动的单独编译
在PLATFORM/SMDK2410/DRIVERS/CS8900目录下,可以找到b.bat,这个bat文件所执行的命令就是编译并生成最后的dll文件的命令:1 首先在命令行下进入%_PUBLICROOT%/common/oak/drivers/netcard/cs8900r目录,运行build -c命令,生成obj文件2 然后进入%_PUBLICROOT%/common/cesysgen原创 2007-01-23 09:43:00 · 1752 阅读 · 0 评论 -
带24位真彩显示与内核加载进度条的Eboot
今天首先搞定了24位真彩图片的数据提取器,然后找到了BP_开头的flash操作函数(在public/common/oak/drivers/ethdbg/下),拿到Eboot目录下,加上了LCD操作的函数,完成了进度条功能。从效果上看明显比原来的要好得多,24位真彩显示,美化后的进度条...专业。之后又将这个功能移植到nboot2。接下来的任务:写一个CE下擦写Nand-Flash的程序,用原创 2006-12-18 14:40:00 · 1726 阅读 · 0 评论 -
CE5按键驱动开发笔记-2
今天首先将PwrButton驱动的原有代码改成了两个MessageBox,果然好使,充分体会到了可以在驱动中做一切的说法。然后发现必须在Block0烧入nboot的情况下CE5才能正常启动,搞得我莫名其妙,不管怎么样,这个问题是解决了。之后,尝试修改ce核心的intr.c,企图映射IRQ8_23,结果失败了,连ISR都没有启动...原创 2006-12-12 21:57:00 · 1378 阅读 · 0 评论 -
ft...
2440的eboot 很怪,不知道为什么手动输入文件大小总是无效,WinCE烧进去不是大了就是小了,整了一天。直到快下班的时候,经理搞定了...???...!!...领新活儿了原创 2006-10-18 23:07:00 · 1107 阅读 · 1 评论 -
改进eboot
首先解决掉了启动eboot直接进入下载程序的bug--错误的注释掉了系统时间操作的一段代码。然后,解决掉了nk.nb0文件大小锁定的问题,加了一段代码,让用户从Uart输入值。原来也做过,但是没有成功,这次都用10进制,搞定了。最后就是烧写eboot时擦除bootloader的问题:在bsp里面找到driver/nandflash/fmd.cpp文件,里面的FMD_EraseBlock函数原创 2006-10-12 12:25:00 · 1032 阅读 · 0 评论