2009年4月15日 星期三

●memtest86+教學 Part10

圖一
上幾回我有提過memtest86+可以透過uart將畫面透過com port傳送到console;其畫面如圖一。今天我們先來介紹一些重要的變數:
struct vars variables = {};
struct vars * const v = &variables;
別小看這個"v",它運行於整個memtest86,可以說是核心資料結構;所以我們先從了解它著手:
struct vars {
int test; //目前所選取或正在測試中的pattern
int pass; //已經passㄉloop數
unsigned long *eadr; //沒用到,所以不知道宣告這ㄍ做什麼,真正用到ㄉ是在struct err_info erri裡面。
unsigned long exor; //同上
int msg_line; //要印出文字或數字ㄉ列數
int ecount; //錯誤數量
int ecc_ecount; //ecc錯誤數量,這應該也沒用到,因為我們不是測server dimm
int msegs; //從呼叫int 15h ax=e820h所得到ㄉ實體記憶體的segment數量
int testsel; //目前所選取ㄉpattern
int scroll_start; //看這個v->scroll_start = v->msg_line * 160;就知道意思
int rdtsc; //是否開始計時的變數(這ㄍ變數和assembly 指令一模一樣,不要搞混)
int pae; //判斷cpu是否支援分頁ㄉ變數
int pass_ticks; //目前的滴答數
int total_ticks; //總滴答數
int pptr; //顯示"#"總進度Progress的目前位置資訊
int tptr; //顯示"#"目前測試pattern進度Progress的目前位置資訊
int beepmode; //是否啟用pc喇叭
struct err_info erri; //這ㄍ結構底下會介紹
struct pmap pmap[MAX_MEM_SEGMENTS]; //以下4ㄍ這裡很難--
struct mmap map[MAX_MEM_SEGMENTS]; //用幾ㄍ字說清楚,--
ulong plim_lower; //我已另有--
ulong plim_upper; //文章說明。
ulong clks_msec; //CPU時脈
ulong starth; //開始計時ㄉ滴答數高32bits
ulong startl; //開始計時ㄉ滴答數低32bits
ulong snaph; //因為這ㄍ#undef TEST_TIMES所以沒用到此變數
ulong snapl; //因為這ㄍ#undef TEST_TIMES所以沒用到此變數
ulong extclock; //這也是CPU時脈,不知道為什麼要搞死大家
int printmode; //顯示fail的模式:預設值是PRINTMODE_ADDRESSES1
int numpatn; //當fail顯示模式為PRINTMODE_PATTERNS2時,要知道有幾個pattern fail
struct pair patn [BADRAM_MAXPATNS]; //還沒研究
ulong test_pages; //所插記憶體pmap總數
ulong selected_pages; //所插記憶體pmap總數(所以真ㄉ要搞死大家)
ulong reserved_pages; //type2及type4的pmap總數
};

struct err_info {
struct xadr low_addr;
struct xadr high_addr;
unsigned long ebits;
long tbits;
short min_bits;
short max_bits;
unsigned long maxl;
unsigned long eadr;
unsigned long exor;
unsigned long cor_err;
short hdr_flag;
};
以上這ㄍstruct在init.c中有初始化如下
v->erri.low_addr.page = 0x7fffffff;
v->erri.low_addr.offset = 0xfff;
v->erri.high_addr.page = 0;
v->erri.high_addr.offset = 0;
v->erri.min_bits = 32;
v->erri.max_bits = 0;
v->erri.min_bits = 32;
v->erri.max_bits = 0;
v->erri.maxl = 0;
v->erri.cor_err = 0;
v->erri.ebits = 0;
v->erri.hdr_flag = 0;
v->erri.tbits = 0;
當然要研究這ㄍstruct就是要搞懂error.c。
--> 閱讀更多...

●基礎1-EXCEL VBA初體驗

圖一
自定表單/工具箱
屬性視窗

專案視窗
我開使接觸VBA(visual basic application )是從office 2000開始,結果現在2009年office也release到office 2007,而且office也增加ㄌ更多的應用。但綜觀使用者的使用頻率,好像excel、word、power point、Access,才是大家最常用的。連linux也搞open office,但它好像不支援巨集(macro)功能,至少以前不支援,現在我就不知道ㄌ,雖然open office格式相容於MS Office但相容性有限。好ㄌ少說廢話,進入主題ㄅ,我又扯遠ㄌ。反正標題就是要說excel vba,其它就不講ㄌ:
首先學會如何開啟VBA功能,接著就來點簡單ㄉㄅ。以下我們所談內容都表示你已經開啟vba編輯視窗。要會VBA首先要認識專案視窗及屬性視窗;
專案視窗中:This Workbook指ㄉ就是你現在已經開啟ㄉexcel活頁簿,sheet1~sheet3指ㄉ就是活頁簿中的那三個工作表。專案視窗中左上角ㄉ按鈕(檢視程式碼)(檢視物件)便是切換編輯畫面的功能鍵。
今天我們先來和vba表單見個面ㄅ,因為我ㄉ習慣是若excel沒表單,那它就沒有讓我愛不釋手ㄉ理由ㄌ。在插入/自訂表單就會代出如上圖片。我們透過工具箱/Label,產生一個文字標籤,如上圖一,由屬性視窗我們知道,表單ㄉname屬性是UserForm1(可自行定義);接著我們今天來寫一行code如下。點選This Workbook,再點選(檢視程式碼),在程試碼編輯區上方有下拉視窗,目前應該顯示為"一般",改選為"Workbook";便會自動帶出兩行code如下,我在中間加入一行:
Private Sub Workbook_Open()
UserForm1.Show
End Sub
大功告成,儲存檔案。記得回excel(2007)設定開發人員/巨集安全性/巨集設定/啟用所有巨集。若是Excel(2003)則是工具/巨集/安全性/安全性層級/
如此你已完程第一個vba程式,並且會在這ㄍexcel檔開啟時也開啟那個表單視窗。
--> 閱讀更多...