系統程式 -- RSS

Parser -- 剖析器

by ccckmitccckmit 13 Aug 2010 00:11

[[code]]
#ifndef PARSER_H
#define PARSER_H

Scanner -- 詞彙掃描器

by ccckmitccckmit 13 Aug 2010 00:09

[[code]]
#ifndef SCANNER_H
#define SCANNER_H

CPU0 的虛擬機

by ccckmitccckmit 13 Aug 2010 00:06

[[code]]
#ifndef CPU0_H
#define CPU0_H

Assembler -- CPU0 的組譯器

by ccckmitccckmit 13 Aug 2010 00:04

[[code]]
#ifndef ASSEMBLER_H
#define ASSEMBLER_H

HashTable -- 雜湊表

by ccckmitccckmit 13 Aug 2010 00:00

[[code]]
#ifndef HASHTABLE_H
#define HASHTABLE_H

Array — 動態陣列

by ccckmitccckmit 12 Aug 2010 23:58

[[code]]
#ifndef ARRAY_H
#define ARRAY_H

基本函式庫

by ccckmitccckmit 12 Aug 2010 23:12

[[code]]
#ifndef LIB_H
#define LIB_H

VMWare 虛擬機

by ccckmitccckmit 25 Jul 2010 02:58

VMWare 是 x86 系列處理器上最常被使用的虛擬機,可分為 VMWare Workstation、VMWare Server、VMWare Player 等版本,其中的 VMWare Player 是免費軟體。

從 Android 看嵌入式產業

by ccckmitccckmit 24 Jul 2010 05:56

嵌入式系統的產業是一個龐大的市場,在 2005 年以前由於處理器尚不具備影音上網等能力,因此大部分的公司都以垂直整合的方式進行開發,但是在 2007 年之後,由於 Google 利用 Android 作業系統殺入嵌入式市場,開始造成軟硬體公司分離的現象,這對嵌入式產業的公司而言,是一個危機,但也是一個契機。

本書目錄

by ccckmitccckmit 24 Jul 2010 04:42

[[code]]
第 1 章 系統軟體
1.1 何謂系統程式?
1.2 系統程式與系統軟體
1.3 本書的章節架構
1.4 實務案例:Dev C++開發環境
1.5 實務案例:GNU 開發工具

Java 與執行緒

by ccckmitccckmit 07 Jul 2010 02:20

新華 ARM9_S3C2410 實驗板 - 小銀幕 LCD 輸出範例

by ccckmitccckmit 07 Jul 2010 01:30

[[code]]
============================ demo.c ===============================
int main(void)
{
int i;
Initial_Creator();
for (i=0; i<10; i++)
LCD_printf("Hello!\n");
while (1) {}
return(0);
}

新華 ARM9 S3C2410 實驗版 - 鍵盤程式追蹤

by ccckmitccckmit 07 Jul 2010 01:26

原理

1. 首先利用 void Initial_TIMER0(void) 中的 register_irq(IRQ_TIMER0, TIMER0_ISR, "Timer ISR")
   註冊 TIMER0_ISR 函數,該函數即會在 void CIrqHandler(void) 函數中被呼叫如下
    ..
    irq_table[IRQindex].handler();
    ..
   CirqHandler 乃為中斷向量處理函數,因此、只要時間計數器一觸發,就會被執行
    ..
    b        IrqHnd
    b        FiqHnd
    ...
    IrqHnd:
        stmdb    sp!,{r0-r12,lr}
        bl    CIrqHandler
        ldmia    sp!,{r0-r12,lr}
        subs    pc,lr,#4
    ...

2. void  TIMER0_ISR(void) 函數中,藉由掃描的方式,掃描四次後即可解出按鍵碼
     Keypad 功能主要藉由程式對 IO_REG2 的位元 0-3 代表的 SCAN_Ox 輸出 0 後,接著藉由 IO_REG1 
     的位元 8-11 代表的 SCAN_Ix 所讀入的資料,來判斷該列中 4 個 key 的哪一個 key 被按下了,
     (參考 : 課本 (實作版) 5-5 頁), 然後將 key 放入 scan_key_buf[16] 陣列中暫存。

3. 使用者可以藉由呼叫 KEYPAD_get_key(UC *ch) 函數以取出按鍵值,或藉由 UC KEYPAD_chk_key(UC *ch)
   以檢查按鍵值。

程式追蹤片段

[[code]]
===========================/7SEG/demo.c==========================
int main(void)
{
int i;
irq_init();
Initial_Creator();
enable_irq();

while (1)
{
UC ch;

while(KEYPAD_get_key(&ch) != OK);
for (i=0;i<80;i++)
{
IO_REG0 = 0x0e00+LED_tb5[ch];
Delay(2);

IO_REG0 = 0x0d00+LED_tb5[ch];
Delay(2);

IO_REG0 = 0x0b00+LED_tb5[ch];
Delay(2);

IO_REG0 = 0x0700+LED_tb5[ch];
Delay(2);
}
}

disable_irq();
return(0);
}

==========================/7SEG/driver.c ===============================

/* KEY_PAD */
UI scan_led=0x5500;
UC scan_key, scan_idx, scan_key_in_idx, scan_key_out_idx;
UI scan_key_buf[16], last_scan_key;
UC key_assigned;

/*
4X4 KEY PAD
*/
#define KEY_0 0xdfff
#define KEY_1 0xfffe
#define KEY_2 0xfffd
#define KEY_3 0xfffb
#define KEY_4 0xffef
#define KEY_5 0xffdf
#define KEY_6 0xffbf
#define KEY_7 0xfeff
#define KEY_8 0xfdff
#define KEY_9 0xfbff
#define KEY_A 0xfff7
#define KEY_B 0xff7f
#define KEY_C 0xf7ff
#define KEY_D 0x7fff
#define KEY_STAR 0xefff
#define KEY_POND 0xbfff

UC Creator_key2num(UI ch);

void Initial_KEYPAD(void)
{
UC i;

last_scan_key = 0xffff;
scan_key_in_idx = 0;
scan_key_out_idx = 0;
key_assigned = UM;
for(i=0; i<16; i++) scan_key_buf[i] = 0xffff;

}

UC KEYPAD_get_key(UC *ch)
{
UI temp;

if(scan_key_out_idx != scan_key_in_idx) {
temp = scan_key_buf[scan_key_out_idx++];
scan_key_out_idx &= 0xf;
*ch = Creator_key2num(temp);
return(OK);
}
return(UM);
}

UC KEYPAD_chk_key(UC *ch)
{
UI temp;

if(scan_key_out_idx != scan_key_in_idx) {
temp = scan_key_buf[scan_key_out_idx];
*ch = Creator_key2num(temp);
return(OK);
}
return(UM);
}

UI key2num_tbl[16] = {
KEY_0, KEY_1, KEY_2, KEY_3,
KEY_4, KEY_5, KEY_6, KEY_7,
KEY_8, KEY_9, KEY_A, KEY_B,
KEY_C, KEY_D, KEY_STAR, KEY_POND
};

UC Creator_key2num(UI ch)
{
UC idx;
for(idx=0; idx<16; idx++) {
if(ch == key2num_tbl[idx]) return(idx);
}
return(0xff);
}

跨平台虛擬機 - QEMU

by ccckmitccckmit 06 Jul 2010 08:57

QEMU 是一個執行速度相當快的虛擬機,原因是 QEMU 採用了動態轉譯的技術,這讓 QEMU 比同為開放原始碼的 Bochs 快上許多,其速度與 VMWare、Virtual PC、Virtual Box 等軟體相差不多。

下載

by ccckmitccckmit 11 Jun 2010 04:49

章節 簡報 程式
1. 系統軟體 ch01.ppt ch01.zip
2. 電腦的硬體結構 ch02.ppt ch02.zip
3. 組合語言 ch03.ppt ch03.zip
4. 組譯器 ch04.ppt ch04.zip
5. 連結與載入 ch05.ppt ch05.zip
6. 巨集處理器 ch06.ppt ch06.zip
7. 高階語言 ch07.ppt ch07.zip
8. 編譯器 ch08.ppt ch08.zip
9. 虛擬機器 ch09.ppt ch09.zip
10. 作業系統 ch10.ppt ch10.zip
11. 嵌入式系統 ch11.ppt ch11.zip
12. 系統軟體實作 ch12.ppt ch12.zip
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License