2011年7月11日 星期一

[轉]MFC 學習筆記,Invalidate()、RedrawWindow()、UpdateWindow()的差異

出處:http://zhirong.blogspot.com/2009/06/mfc-invalidateredrawwindowupdatewindow.html

 

Invalidate()是強制系統進行重繪,但是不一定就馬上進行重繪。因為Invalidate()只是通知系統,此 時的視窗已經變為無效。強制系統調用WM_PAINT,而這個消息只是Post(寄送)就是將該消息放入訊息佇列。當執行到WM_PAINT消息時才會對 視窗進行重繪。
  UpdateWindow只向表單發送WM_PAINT消息,在發送之前判斷GetUpdateRect(hWnd,NULL,TRUE)看有無可繪製的 用戶端區域,如果沒有,則不發送WM_PAINT。發送即不經過訊息佇列,直接發送到對應視窗,因此此函數可以立即更新視窗。
  RedrawWindow()則是具有Invalidate()和UpdateWindow()的雙特性。聲明視窗的狀態為無效,並立即更新視窗,立即調用WM_PAINT消息處理。

 

2010年8月4日 星期三

Bib in WinCE

CE用*.bib來决定(reloade?) memory layout。
一般的project中會包含兩個 image : bootloader , OS,所以Project中會有 boot.bib和config.bib。
bib文件是用来指导WinCE的编译系统产生可执行二进制文件的,其中使用的地址都是虚拟地址。

必须在Config.bib中设置ROMSIZE参数。
如ROMSIZE=02000000,设置NK.NB0的大小为32M,若Image的大小超过32M,则还会产生NK.NB1,NK.NB2…


RAMIMAGE - 所有Kernel, conpoment都會被放置在這個區域。(大概就是code,const region?)
RAMIMAGE – This is the virtual address region that the kernel and any other components you select for your image will be placed in. This can be RAM or linearly addressable flash. Your config.bib file should have exactly one RAMIMAGE section. It needs to be virtually contiguous, and it needs to be large enough to hold whatever components you’ve selected.

RAM - Kernel 會利用這部份的區域作為application或kernel自己需要的RAM 空間(data,stack ?)
RAM – This is the virtual address region of RAM that the kernel can allocate to applications and RAM-based file systems. It needs to be virtually contiguous. (If you need a non-contiguous section, you can allocate another, non-virtually-contiguous section at run-time by implementing the OEMGetExtensionDRAM function, but that’s outside our scope)

RESERVED - Kernel 不會使用這部份區域。programmer可以用hard-coded對此 區域位址存取。
RESERVED – These are virtual address regions that are set aside – the kernel won’t allocate memory in these addresses and components won’t be placed in these addresses.

AUTOSIZE - 這是一個option,當設定ON時,builder會把RAMIMAGE和RAM合
併成一個region
AUTOSIZE - In the CONFIG section, we have the AUTOSIZE=ON (or OFF) variable. If this variable is on, it will treat the RAMIMAGE and RAM regions as a single region, allocating just enough space to hold all of the components to the RAMIMAGE section and making the rest of the space available as RAM. This is a pretty convenient and easy way to make sure you’re getting maximal use out of your RAM. One thing autosize won’t do is interfere with reserved or unallocated regions.






OEMAddressTable

Before we look at the .bib files themselves, it’s important to understand the OEMAddressTable. This table defines the mappings between physical and virtual addresses. For MIPS and SH processors, this table is hard coded into the processor. For x86 and ARM, the mapping is defined in a variable called OEMAddressTable. Since .bib files operate largely on virtual addresses, we need to remember to reference the OEMAddressTable to address any confusion about what is happening at a particular physical address.



2010年6月5日 星期六

tem

http://bbs.weiphone.com/read-htm-tid-775783.html

2010年5月27日 星期四

[轉]nk.bin和nk.nb0文件格式分析

作者:wogoyixikexie@gliet

借用别人的解释:
这里提到的bin是一种二进制镜像格式,以片断(section)为单位组织数据,每个片断都包括一个头,头里指定了起始地址,长度,校验值。 Platform Builder调用工具将WINCE内核所有文件以bin格式合并成一个文件,默认文件名为nk.bin。BootLoader又以同样的格式将 nk.bin分解成多个文件放到RAM中。可以在命令行中键入“viewbin nk.bin”来查看bin文件中具体包括了哪些内容。键入Cvrtbin命令转换.bin格式文件为.sre格式或者.abx格式。
nb0格式是原始的二进制镜像,它不包括头,一般情况下将内核下载到设备的RAM中运行都采用nb0格式。要生成nbx格式的文件,需要在相关.bib文 件中确定如下值:ROMSTART、ROMWIDTH、ROMSIZE

那么nk.bin是如何生成的?

Romimage.exe is a locator application that creates Windows CE binary image (.bin) files, usually limited to a single file called Nk.bin. This means that Romimage

  • Reads Ce.bib to determine which %_FLATRELEASEDIR% binaries and files to include in the run-time image.
  • Assigns physical memory addresses to these binaries and files. (这部是如何实现的?)
  • Creates the run-time image Nk.bin.

For more information about Ce.bib, see Make Binary Image Tool.

最近想搞multi bin后来发现我的bootloader是优龙的,不支持binfs分区格式化, 我想把eboot下的代码移植过来,应该可以的。

但是我对则个binfs有点疑惑。按照道理说,binfs是针对nk.bin的,但是我们下载的时候却是nk.nb0,有些人下载nk.bin,但是下载 完还是要解压成nk.nb0的。
我想问,binfs是怎么和nk.nb0联系起来的?
==============================来看看bin文件的格式=========================

一个bin 文件在存储上是按下面的结构存储的

组成:标记(7)+Image开始地址(1)+Image长度(1)
记录0地址+记录0长+记录0校验和+记录0内容(文件内容)
记录1地址+记录1长+记录1校验和+记录1内容(文件内容)
......
最后一条记录是表示结束,Start = 0x00000000, Length = 0x8C072C3C是StartUp地址, Chksum = 0x00000000

bin 文件的头部(不包括记录)可以用下面的结构表示
struct BinFile{
BYTE signature[7]; // = { ''B'', ''0'', ''0'', ''0'', ''F'', ''F'', ''\a'' }
DWORD ImageStart
DWORD ImageLength
};


一般xipkernel.bin,nk.bin 都符合正常bin文件格式,包含记录开始0,1,2 记录为特殊记录,2做为cece的标记,其后4byte表示 TOC地址(指向ROMHDR结构的数据),3记录开始都是文件记录,
———但是,我们实际用到却是nk.nb0文件,这个文件才是和文件系统帮顶起来的。我等下要找出他的格式来。先去吃午饭。

再借别人的解释

首先,NK.BIN中的内容是被压缩过的,NK.NB0中的内容是没有压缩的。 两者大小的区别是因为在生成过程中BIN会将你设定的后面的NULL自动去掉,而NB0就不会。

现在来用微软自带工具来看看这两个文件的格式到底有什么不同。

这幅图结合上面的解释可以知道,这个NK.bin文件的标志是BOOOFF,nk.nb0是没有这个标志的,要知道具体的信息,还是看MSDN好。

At the end of the boot loader development process described in the topic How to Develop a Boot Loader, you will have two different binary images for the boot loader: a .bin file and an .nb0 file. The Microsoft Windows® CE binary image data format (.bin) file is the most common format for Windows CE binary images. It is a binary file that consists of a number of individual records with associated per-record bookkeeping data. The format is convenient for minimizing the amount of data to be downloaded to the target device by removing the need to pad between records. For more information about the .bin file format, see Windows CE Binary Image Data Format (.bin).

The .nb0 file format is a raw binary image of the boot loader. The image is as it appears in the memory on the target device and does not contain the header information that the .bin file includes. The .nb0 file is typically larger than the .bin file. The .nb0 file is useful for placing the initial boot loader image on the target device. This is usually done with a built-in monitor program provided by the board manufacturer. You can also place the initial boot loader image on the target device through a JTAG connection using a JTAG probe. Once the .nb0 image is stored on the device, it should be able to download and update itself using the .bin file format from then on.

我使用的是ADS开发的bootloader,这个bin文件不存在什么段的问题吧,应该和微软不一样的,全局变量的问题在哪里呢?但是现在造成偶 尔不能启动是什么原因呢?最后发现又回到了原点。看来ADS下的bin文件格式也要搞清楚才行哦。

2010年5月24日 星期一

MAC 好用程式

BBEdit
好用的文字編輯軟體,還可以比code

FileMerge
高級Mac版的beyond compare

Adium
代替msn的軟體

MP3Tag
解決iTunes中文字亂碼的問題
http://www.mobile01.com/topicdetail.php?f=482&t=447185&p=1
http://www.anytag.de/forums/index.php?showtopic=57


NTFS3G
解決 mac 下讀取NTFS 檔案
http://www.macuknow.com/node/107

2010年5月21日 星期五

[轉] SLC and MLC

http://stenlyho.blogspot.com/2008/08/nand-flash-slcmlc.html

NAND Flash SLC、MLC技術解析

許多人對Flash Memory的SLC和MLC區分不清。就拿目前熱銷的MP3隨身聽來説,是買SLC還是MLC Flash Memory Chip的呢?在這裏先告訴大家,如果你對容量要求不高,但是對機器質量、數據的安全性、機器壽命等方面要求較高,那麽SLC Flash Memory Chip的首選。但是大容量的SLC晶片成本要比MLC晶片高很多,所以目前2G以上的大容量,低價格的MP3多是採用MLC晶片。大容量、低價格的 MLC晶片自然是受大家的青睞,但是其固有的缺點,也不得不讓我們考慮一番。

什麽是SLC?
SLC英文全稱(Single Level Cell——SLC)即單層式儲存 。主要由三星(samsung)、海力士(Hynix)、美光(Micron)、東芝(toshiba)等使用。

SLC技術特點是在浮 置閘極與源極之中的氧化薄膜更薄,在寫入數據時通過對浮置閘極的電荷加電壓,然後透過源極,即可將所儲存的電荷消除,通過這様的方式,便可儲存1個信息單 元,這種技術能提供快速的程序編程與讀取,不過此技術受限于Silicon efficiency的問題,必須要由較先進的流程强化技術(Process enhancements),才能向上提升SLC制程技術。

什麽是MLC?
MLC英文全稱(Multi Level Cell——MLC)即多層式儲存。主要由東芝、Renesas、三星使用。
英特爾(Intel)在1997年9月最先開發成功MLC,其作用 是將兩個單位的信息存入一個Floating Gate(Flash Memory存儲單元中存放電荷的部分),然後利用不同電位(Level)的電荷,通過内存儲存的電壓控制精准讀寫。MLC通過使用大量的電壓等級,每一 個單元儲存兩位數據,數據密度比較大。SLC架構是0和1兩個值,而MLC架構可以一次儲存4個以上的值,因此,MLC架構可以有比較好的儲存密度。

SLC 比較MLC的優勢:
目前市場主要以SLC和MLC儲存為主,我們多了解下SLC和MLC儲存。SLC架構是0和1兩個值,而MLC架構可以一次 儲存4個以上的值,因此MLC架構的儲存密度較高,並且可以利用老舊的生産程備來提高産品的容量,無須額外投資生産設備,擁有成本與良率的優勢。
與 SLC相比較,MLC生産成本較低,容量大。如果經過改進,MLC的讀寫性能應該還可以進一步提升。

SLC比較MLC的缺點:
MLC 架構有許多缺點,首先是使用夀命較短,SLC架構可以存取10萬次,而MLC架構只能承受约1萬次的存取。
其次就是存取速度慢,在目前技術條件 下,MLC晶片理論速度只能達到2MB左右。SLC架構比MLC架構要快速三倍以上。
再者,MLC能耗比SLC高,在相同使用條件下比SLC要 多15%左右的電流消耗。
雖然與SLC相比,MLC缺點很多,但在單顆晶片容量方面,目前MLC還是占了絶對的優勢。由于MLC架構和成本都具 有絶對優勢,能滿足未來2GB、4GB、8GB甚至更大容量的市場需求。 

SLC與MLC的識別:
一、看傳輸速度
比 如有兩款採用Rockchip晶片的産品,測試時寫入速度有2、3倍優勢的應該是SLC,而速度上稍慢的則是MLC。即使同様採用了USB2.0高速接口 的MP3,也不能改變MLC寫入慢的缺點。
二、看FLASH型號
一般來説,以K9G或K9L為開頭型號的三星Flash Memory則是MLC,以HYUU或HYUV為開頭型號的現代Flash Memory應是MLC。具體晶片編號以三星和現代為例:三星MLC晶片編號為:K9G****** K9L*****。現代MLC晶片編號為:HYUU**** HYUV***

簡單總結:
如果説MLC是一種新興的 Flash Memory技術,那麽它的“新”就表現在:成本低!
雖然MLC的各項指標都落後於SLC Flash Memory。但是MLC在架構上取勝SLC,MLC肯定是今後的發展方向,而對于MLC傳輸速度和讀寫次數的問題已經有了相當多的解决方法,例如採用三 星主控晶片,wear leveling技術,4bit ECC校驗技術,都可以在採用MLC晶片的時候同様獲得很好的使用效果,其性能和使用SLC晶片的没有什麽差別,而會節省相當多的成本.


=================================


NOR和NAND是現在市場上兩種主要的非易失閃存技術。Intel於1988年首先開發出NOR flash技術,徹底改變了原先由EPROM和EEPROM一統天下的局面。緊接著,1989年,東芝公司發表了NAND flash結構,強調降低每比特的成本,更高的性能,並且象磁盤一樣可以通過接口輕鬆升級。但是經過了十多年之後,仍然有相當多的硬件工程師分不清NOR 和NAND閃存。

  相「flash存儲器」經常可以與相「NOR存儲器」互換使用。許多業內人士也搞不清楚NAND閃存技術相對於 NOR技術的優越之處,因為大多數情況下閃存只是用來存儲少量的代碼,這時NOR閃存更適合一些。而NAND則是高數據存儲密度的理想解決方案。

   NOR的特點是芯片內執行(XIP, eXecute In Place),這樣應用程序可以直接在flash閃存內運行,不必再把代碼讀到系統RAM中。

NOR的傳輸效率很高,在 1~4MB的小容量時具有很高的成本效益,但是很低的寫入和擦除速度大大影響了它的性能。

  NAND結構能提供極高的單元密度,可以達 到高存儲密度,並且寫入和擦除的速度也很快。應用NAND的困難在於flash的管理和需要特殊的系統接口。



性 能比較

   flash閃存是非易失存儲器,可以對稱為塊的存儲器單元塊進行擦寫和再編程。任何flash器件的寫入操作只能在空或已擦除的單元內進行,所以大多數 情況下,在進行寫入操作之前必須先執行擦除。NAND器件執行擦除操作是十分簡單的,而NOR則要求在進行擦除前先要將目標塊內所有的位都寫為0。

   由於擦除NOR器件時是以64~128KB的塊進行的,執行一個寫入/擦除操作的時間為5s,與此相反,擦除NAND器件是以8~32KB的塊進 行的,執行相同的操作最多只需要4ms。

  執行擦除時塊尺寸的不同進一步拉大了NOR和NADN之間的性能差距,統計表明,對 於給定的一套寫入操作(尤其是更新小文件時更多的擦除操作必須在基於NOR的單元中進行。這樣,當選擇存儲解決方案時,設計師必須權衡以下的各項因素。

   ● NOR的讀速度比NAND稍快一些。

  ● NAND的寫入速度比NOR快很多。

  ● NAND的4ms擦除速度遠比NOR的5s快。

  ● 大多數寫入操作需要先進行擦除操作。

  ● NAND的擦除單元更小,相應的擦除電路更少。



接口差別

  NOR flash帶有SRAM接口,有足夠的地址引腳來尋址,可以很容易地存取其內部的每一個字節。

  NAND器件使用複雜的I/O口來串 行地存取數據,各個產品或廠商的方法可能各不相同。8個引腳用來傳送控制、地址和數據信息。

  NAND讀和寫操作採用512字節的塊, 這一點有點像硬盤管理此類操作,很自然地,基於NAND的存儲器就可以取代硬盤或其他塊設備。



容量和成 本

  NAND flash的單元尺寸幾乎是NOR器件的一半,由於生產過程更為簡單,NAND結構可以在給定的模具尺寸內提供更高的容量,也就相應地降低了價格。

   NOR flash佔據了容量為1~16MB閃存市場的大部分,而NAND flash只是用在8~128MB的產品當中,這也說明NOR主要應用在代碼存儲介質中,NAND適合於數據存儲,NAND在CompactFlash、 Secure Digital、PC Cards和MMC存儲卡市場上所佔份額最大。



可靠性和耐用性


   採用flahs介質時一個需要重點考慮的問題是可靠性。對於需要擴展MTBF的系統來說,Flash是非常合適的存儲方案。可以從壽命(耐用性)、位交 換和壞塊處理三個方面來比較NOR和NAND的可靠性。

壽命(耐用性)

  在 NAND閃存中每個塊的最大擦寫次數是一百萬次,而NOR的擦寫次數是十萬次。NAND存儲器除了具有10比1的塊擦除週期優勢,典型的NAND塊尺寸要 比NOR器件小8倍,每個NAND存儲器塊在給定的時間內的刪除次數要少一些。

位交換

   所有flash器件都受位交換現象的困擾。在某些情況下(很少見,NAND發生的次數要比NOR多),一個比特位會發生反轉或被報告反轉 了。

  一位的變化可能不很明顯,但是如果發生在一個關鍵文件上,這個小小的故障可能導致系統停機。如果只是報告有問題,多讀幾次就可能 解決了。

  當然,如果這個位真的改變了,就必須採用錯誤探測/錯誤更正(EDC/ECC)算法。位反轉的問題更多見於NAND閃 存,NAND的供應商建議使用NAND閃存的時候,同時使用EDC/ECC算法。

  這個問題對於用NAND存儲多媒體信息時倒 不是致命的。當然,如果用本地存儲設備來存儲操作系統、配置文件或其他敏感信息時,必須使用EDC/ECC系統以確保可靠性。

壞 塊處理

  NAND器件中的壞塊是隨機分佈的。以前也曾有過消除壞塊的努力,但發現成品率太低,代價太高,根本不划 算。

  NAND器件需要對介質進行初始化掃瞄以發現壞塊,並將壞塊標記為不可用。在已製成的器件中,如果通過可靠的方法不能進行這項處 理,將導致高故障率。



易於使用


  可以非常直接地使用基於NOR 的閃存,可以像其他存儲器那樣連接,並可以在上面直接運行代碼。

  由於需要I/O接口,NAND要複雜得多。各種NAND器件的存取方 法因廠家而異。

  在使用NAND器件時,必須先寫入驅動程序,才能繼續執行其他操作。向NAND器件寫入信息需要相當的技巧,因為設計 師絕不能向壞塊寫入,這就意味著在NAND器件上自始至終都必須進行虛擬映射。



軟件支持

   當討論軟件支持的時候,應該區別基本的讀/寫/擦操作和高一級的用於磁盤仿真和閃存管理算法的軟件,包括性能優化。

  在NOR器件上 運行代碼不需要任何的軟件支持,在NAND器件上進行同樣操作時,通常需要驅動程序,也就是內存技術驅動程序(MTD),NAND和NOR器件在進行寫入 和擦除操作時都需要MTD。

   使用NOR器件時所需要的MTD要相對少一些,許多廠商都提供用於NOR器件的更高級軟件,這其中包括M-System的TrueFFS驅動,該驅動被 Wind River System、Microsoft、QNX Software System、Symbian和Intel等廠商所採用。

   驅動還用於對DiskOnChip產品進行仿真和NAND閃存的管理,包括糾錯、壞塊處理和損耗平衡。

[轉]iPhone OpenFlow

http://fajkowski.com/blog/2009/08/02/openflow-a-coverflow-api-replacement-for-the-iphone/