2009年6月20日 星期六

錯誤代碼KERN-EXEC 3

發生錯誤代碼KERN-EXEC 3,通常是存取非法的記憶體位址

例如使用一個指向NULL的指標


TInt CRingContainer::CountComponentControls() const
{
return 3;
// return number of controls inside this container
}

CCoeControl* CRingContainer::ComponentControl(TInt aIndex) const
{
switch ( aIndex )
{
case 0:
return iLabel;
case 1:
return iToDoLabel;
default:
return NULL;
}
}


若定義CountComponentControls()函數

則創建Container時會呼叫ComponentControl()函數,將控制項顯示出來。

如果return NULL的話,並不是一個合法存取位址

因此出現錯誤代碼KERN-EXEC 3。

錯誤代碼CONE 15

昨天莫名其妙被錯誤代碼CONE 15重擊

查了一下錯誤代碼列表

很明顯Resource File沒讀進去

Google一下發現,原來必須給Resource File一組4byte的辨識代碼

NAME ADZW
#include
#include
.
.
.
RESOURCE RSS_SIGNATURE{}
.
.



查看錯誤代碼

Symbian Emulator若在你開發過程中發生kernel panic

是不會發出錯誤代碼的,若要看程式異常結束的原因

在\Epoc32\winscw\c\system\bootdata\

建立ErrRd檔(無副檔名),此後程式發生錯誤Emulator便會顯示錯誤代碼。

移除模擬器中的專案

在Symbian Emulator中會留下開發過得專案

即使在IDE中移除了專案,模擬器還是存在開發過得專案的APP檔

可從\Epoc32\release\winscw\udeb\z\system\apps\中

找到開發過得專案資料夾刪除即可。

2009年5月16日 星期六

該死的ACPI

最近ubuntu 8.04安全更新後,搞得NB不斷重開

懷疑跟更新後的acpid有關,消極的作法是只好把acpid關閉




sysv-rc-conf --list |grep acpid

acpid 1:off 3:on 4:on 5:on

sysv-rc-conf acpid --level 35 acpid off

2009年5月13日 星期三

位元平面轉換

位元平面轉換,就是指將每個像點0~7 bit抽出來

分別合成為八張二值圖,範例如下


原圖:
57 130
10 250

bit7:
0 1
0 0

bit6:
0 0
0 1

bit0:
1 0
0 0

依照上述轉換,越高位元權重越,因此越高位元的二值圖越接近原始影像

假使我們將二值影像只保留高四位元,即可形成一個兩倍壓縮的圖形

原圖


bit7 二值圖


bit6 二值圖


bit0 二值圖


兩倍壓縮影像


經過兩倍壓縮的影像,與原圖相比畫質還在可接受的範圍 :)

2009年4月13日 星期一

ubuntu下的超級終端機

最近因為在寫與serial port溝通的應用程式

所以會使用到windows超級終端機

而在linux下則有gtkterm可以取代

安裝方式非常簡單

$ sudo apt-get install gtkterm

用法都與超級終端機類似,但似乎超級終端機的功能較完整

因為gtkterm並不支援 xmodem ymodem

雖然這xmodem ymodem大部分已經被tftp取代了

不過剛好別的專案有用到,所以還是稍嫌不方便。

但是至少比minicom 三不五時出現排版錯誤來的好~ :)