2008年9月20日 星期六
2008年8月24日 星期日
2008年8月14日 星期四
輕鬆輸出 ASCII 藝術畫
在許多的說明檔裡常可以見到漂亮的 ASCII Art 作品,這些神奇的圖案到底是怎麼做出來的呢?其實只要有 ASCII Generator dotNET ,你也能夠自己輕鬆動手做喔。
官方網站:http://ascgendotnet.jmsoftware.co.uk/
下載網址:http://sourceforge.net/project/showfiles.php?group_id=133786&package_id=146945&release_id=577709
Tutorials : http://ascgendotnet.jmsoftware.co.uk/tutorials
淺談UML
資料來源:http://www.iiiedu.org.tw/knowledge/knowledge20031231_2.htm
UML是什麼?
UML是Unified Modeling Language的簡稱,中譯為「統一塑模語言」。其中:
●Unified:UML是一種標準語言,廣泛運用於全世界。
●Modeling:UML用途在於塑模(Modeling),也就是畫軟體藍圖。
●Language:UML是一種塑模語言,而非程式語言或標示語言。
也就是說,UML是軟體系統發展人員用以建造模型,而這些模型使得工作團隊能夠:將系統具象化(Visualization)、將系統結構及行為規格化 (Specification)、建構(Construction)系統、以及記錄(Documentation)發展系統過程中之各項決策。
什麼是塑模?
作曲家會將其腦袋中的旋律譜成樂曲,建築師會將其設計之建築物畫成藍圖,行銷廣告人員會將其創意製作成簡報;這些樂曲、藍圖及簡報就是模型(Model),而建構這些模型的過程就稱為塑模(Modeling)。
軟體開發如同音樂譜曲及建築設計,其過程中也必須將需求、分析、設計、實作、佈署等各項工作流程之構想與結果予以呈現,這就是軟體系統之塑模。
為什麼要塑模?
絕大部份的音樂演奏都需要樂譜(除了少數即性式表演外)!
絕大部份的建築施工都需要藍圖(除非要蓋的是一間狗屋)!
同樣的,所有軟體系統的建構最好都有適當的分析設計藍圖,因為軟體開發的過程絕對不是任意的、隨性的、且戰且走的、天馬行空的。
UML在軟體塑模中所扮演的角色是什麼?
軟體發展之方法論中包含了程序(Process)及表示法(Notation)兩個部份,其中:
●程序指的是系統開發的流程,例:瀑布模式、漸增模式、擴展模式、雛型模式、螺旋模式等。
●表示法指的是建構軟體模型中所會用到之符號及規則。
UML所涵蓋的內容是表式法而非程序,UML是與程序無關的(Process Independent),也就是說,無論以任何程序來開發軟體系統,都可以使用UML來建構軟體模型。
UML與物件導向方法之關係
●UML之訂定與物件導向方法的確有非常密切之關係。
●UML中的各種符號及規則與物件導向語言(Java,C++)之結構有完整對應。
●但是,UML絕對不僅限用在物件導向軟體開發,UML中有些概念與圖形甚至可說是與物件導向無關,
例:Use Case Diagram及Statechart Diagram
●因此,軟體開發時無論是否採用物件導向方法,UML都是適用的。
UML的重要性
●UML是OMG公佈的官方標準。
●UML已為全世界軟體業者所廣泛採用,各大軟體公司(Microsoft、IBM、Oracle等)
在其產品中均支援UML。
●UML的應用領域越來越廣(資料庫設計、韌體設計、資訊管理等)。
UML的現行版本
UML現行版本為1.5版(http://www.omg.org/technology/documents/formal/uml.htm),但2.0版將近完成,應會在短期內正式公佈(http://www.omg.org/uml)。
UML的內容到底是什麼?
UML對於軟體開發相關人員而言,其實就只是一組符號及規則,其中包括:
1.Basic Building Blocks(都有其相對的符號)
(1) Things
●Structura˙Things:Class、Interface、Collaboration、Use Case、Active Class、Component、Node
●Behaviora˙Things:Interaction、State Machine
●Grouping Things:Package
●Annotation Things:Note
(2) Relationships:Association、Generalization、Dependence、Realization
(3) Diagrams
●Structural:Class、Object、Component、Deployment
●Behavior:Use Case、Activity、Statechart、Sequence、Collaboration
2.Rules(符號的使用規則)
Name、Scope、Visibility、Integrity、Execution
3.Common Mechanisms(各類符號及圖形通用的機制)
Specification、Adornments、Common Division、Extensibility Mechanisms
如何學習UML?
●找本淺顯易懂的入門書籍,先掌握UML的全貌,千萬不要被過多抽象的軟體工程專有名詞所絆住。記住:UML只是一組符號而已!
●先學習讀圖,讓自己先習慣於UML之各種符號,尤其注意UML中以擴充機制(Extensibility Mechanisms)所產生之符號,此部份最容易使初學者迷惑。
●練習畫圖,訓練自已將心中之構想以UML符號呈現出來,注意各類符號之正確表示法,不要隨意更改之。
●選用適當之CASE工具,Rationa˙Rose,Microsoft Visio,Borland Together都是很好的軟體工具。
如何應用UML於軟體開發?
●選擇一個適當之開發程序(Process),例:RUP
●選擇一個適當之UML發展工具,例:Rationa˙Rose
●相關人員接受完整之訓練
2008年8月13日 星期三
QT視窗程式設計
C++ GUI Programming with Qt 4, Second Edition | ||||
by Jasmin Blanchette; Mark Summerfield | ||||
| ||||
Publisher: Prentice Hall | ||||
Pub Date: February 04, 2008 | ||||
| ||||
Pages: 752 |
ARM Developer Suite Linker and Utilities Guide
上課時數: 三 整天 (18 hours)
ARM組合語言程式設計
�� 小晶片的面積低功耗
�� ARM架構還採用了一些特別的技術,在性能的前提下儘量縮小晶片的面積,並降低功耗。
�� 條件式指令
�� 所有的指令都可根據前面的執行結果決定是否被執行,從而提高指令的執行效率。
�� 連續存取資料
�� 可用載入/存儲指令連續傳輸資料,以提高資料的傳輸效率。
�� 同時完成邏輯處理和移位元
�� 可在一條資料處理指令中同時完成邏輯處理和移位處理。
�� 自動增減迴圈
�� 在迴圈處理中使用位址的自動增減來提高執行效率。
ARM處理器模式
�� ARM架構支援7種處理器模式。
�� 模式改變
�� 在軟體控制下可以改變模式
�� 外部中斷或例外處理也可以引起模式發生改變。
�� 大多數應用程式在使用者模式下執行。
�� 當處理器工作在使用者模式時,正在執行的程式不能存取某些被保護的系統資源,也不能改
變模式,除非例外(exception)發生。
ARM支援的7種工作模式
處理器模式 說明
System (sys) 執行特權作業系統工作
Undefined (und) 支援硬體輔助運算器的軟體仿真
Abort mode (abt) 實現虛擬記憶體和/或記憶體保護
Supervisor (svc) 作業系統保護模式
IRQ (irq) 用於通用中斷處理
FIQ (fiq) 支援高速資料傳送或通道處理
User (usr) 正常程式執行模式
how to use keyboard for mouse functions in linux X window system.
You enable and disable it by hitting control-shift-numberlock.
Apparently the speaker should beep but mine never does.
Then you use the number pad to move around:
/ * - select mouse buttons: first, second, third in that order
. 8 . becomes . up .
4 . 6 becomes left . right
. 2 . becomes . down .
Holding one of 2,4,6,8 down and pressing number 5 down speeds the mouse
up.
Pressing 5 down on its own does a mouse click with the current button.
Pressing + down on its own does a double-click with the current button.
0 clicks and holds down the current button.
. releases the button that 0 held down.
資料來源:http://www.topology.org/linux/xcursor.html
本來在找其他資料,不小心找到好玩的功能.......
大概是說:如何使用鍵盤來控制滑鼠的功能,
當你按下 control-shift-numberlock 可以啟動此功能
其他功能自己看吧.....
2008年7月27日 星期日
在linux環境下啟動時打開numlock
---以下純轉錄---
要在開機時自動設定 NumLock,則在/etc/rc.d/rc.sysinit中加入以下內容:
for tty in /dev/tty[1-9]*; do
setleds -D +num < $tty
done
來源網址:Tips:在linux環境下啟動時打開numlock
2008年7月8日 星期二
Linux Socket 程式-行程間通訊簡介
- 同一主機上,不同程序間的通訊:IPC ( Inter-Process Communication)
- 不同主機上,不同程序間的通訊:網路應用程式(Network Programming)
- Pipe 函式
int pipe( int fd[2] ) ;
傳回值:如果OK,傳回0;如果錯誤,傳回-1
- 先瞭解 單一行程中的PIPE-單向資料流的設計
- fork之後,單一行程中的PIPE
- 關閉適當描述子後,兩個行程間的pipe
- 在了解運用兩條PIPE-雙向資料流的設計
- 提供雙向資料流的兩個PIPE
- 簡單的主從式範例:用兩個PIPE實作
Linux環境下的Socket programming
什麼是Socket
Socket接口是TCP/IP網絡的API,Socket接口定義了許多函數或例程,程序員可以用它們來開發TCP/IP網絡上的應用程序。要學Internet上的TCP/IP網絡編程,必須理解Socket接口。
Socket接口設計者最先是將接口放在Unix操作系統裡面的。如果瞭解Unix系統的輸入和輸出的話,就很容易瞭解Socket了。網絡的 Socket數據傳輸是一種特殊的I/O,Socket也是一種文件描述符。Socket也具有一個類似於打開文件的函數調用Socket(),該函數返 回一個整型的Socket描述符,隨後的連接建立、數據傳輸等操作都是通過該Socket實現的。常用的Socket類型有兩種:流式Socket (SOCK_STREAM)和數據報式Socket(SOCK_DGRAM)。流式是一種面向連接的Socket,針對於面向連接的TCP服務應用;數據 報式Socket是一種無連接的Socket,對應於無連接的UDP服務應用。
Socket建立
為了建立Socket,程序可以調用Socket函數,該函數返回一個類似於文件描述符的句柄。socket函數原型為:
int socket(int domain, int type, int protocol);
domain指明所使用的協議族,通常為PF_INET,表示互聯網協議族(TCP/IP協議族);type參數指定socket的類型: SOCK_STREAM 或SOCK_DGRAM,Socket接口還定義了原始Socket(SOCK_RAW),允許程序使用低層協議;protocol通常賦值"0"。 Socket()調用返回一個整型socket描述符,你可以在後面的調用使用它。
Socket描述符是一個指向內部數據結構的指針,它指向描述符表入口。調用Socket函數時,socket執行體將建立一個Socket,實際上"建立一個Socket"意味著為一個Socket數據結構分配存儲空間。Socket執行體為你管理描述符表。
兩個網絡程序之間的一個網絡連接包括五種信息:通信協議、本地協議地址、本地主機端口、遠端主機地址和遠端協議端口。Socket數據結構中包含這五種信息。
如何存取VM ware 機器內的資料到PC上面
(1) 使用 winSCP
(2) 利用 Samba (設定一次一勞永逸)
===========================================
(1) 使用 winSCP
- 到這裡去看如何使用 WinSCP 簡易教學(Mini User Guide) http://www.ascc.sinica.edu.tw/winscp
- 灌好上述軟體後,到你的虛擬機器去設定你的網路卡
- 請看下面圖片Eathnet請設定 Host-only
- 然後下指令 ifconfig 找到你的網路IP 例如 下面圈起來的地方
- 接著打開winscp 登入你的虛擬機器,接著應該就會如上面教學的樣子可以連接兩個系統了
- 請點圖片可以放大
=============================================
另外依各更簡單的方法
(2) 利用 Samba (設定一次一勞永逸)
- 接著請跟著我在VMware裡面這樣做
- # vi /etc/samba/smb.conf
- 然後 找到裡面有 [homes] 的地方在下面 browseable 改成 yes
- 在下面加一行字 path = /root /*這裡是你要分享的資料夾*/
- 在 [global] 中加入 一行 netbios name = XXX /*自訂網路電腦名稱*/
- 然後存檔離開
- 請再重新開機 # reboot
- 這樣就可以了....
- 到PC的我的電腦上的網址列 打 \\XXX
- 登入帳號及密碼就是你的VMware的帳號密碼 例如 root /root
- 然後你就可以看到分享的資料夾了,你就可以在PC上直接打一打程式碼丟上去就可以了
- 點圖可以放大
2008年7月4日 星期五
ARM 的第一隻組合語言
使用工具:IAR.ARM.ADS1.2
我的第一隻組合語言,哈哈!!!
=============================
;ARM ASM Example
;
AREA ARMex, CODE, READONLY
ENTRY
start
MOV r0,#10
MOV r1,#3
ADD r0,r0,r1
stop
MOV r0,#0x18
LDR r1,=0x20026
SWI 0x123456
END
Linux device driver 的種類
Linux device driver 的種類:
(1) Char module
- open, read, write, close
- 像檔案一樣存取,ex: /dev/console ; /dev/ttys0
- 只能循序存取
(2) Block module
- 一個block (512bytes)
- request queue . 無read, write
↑___command - hot plug(熱插拔)
(3) Network module (機構獨樹一格,無法掌控、不可預期)
- 封包收發時機? 不可預期
Kernel Module V.S. Programs
Programs : begin with main()
Kernel Module: begin with init_module() ; end by cleanup_module()
Insert ==> init_module()
Remove ==> cleanup_module()
2008年6月28日 星期六
Linked list
(optional): 試試讓該Linked list反轉,該如何做?
========================================================
拙著,請指教......
// 使用動態記憶體配置與linked list 撰寫程是讓使用者逐一輸入學生姓名,
// 成績,並依成績高低由高至低排好結點串接的順序,並可印出學生成績,
// 以及查詢某位學生成績
#include
#include
typedef struct TagStudent
{
char name[30];
int grade;
struct TagStudent *next;
}Student;
void InsertStudent(char newname[30],int newgrade);
int StudentCount();
void StudentPrint();
void StudentSearch(char search[]);
Student Head,*ptr=&Head,*current,*previous;
int main(int argc, char *argv[])
{
char ch,Newname[10],SearchName[10];
int Newgrade;
puts("學生成績查詢及輸入系統(停止輸入請按q或Q)\n");
while(1) //當按下不是 Ctrl+q 時
{
printf("請輸入學生姓名:");
scanf("%s",Newname);
if(!stricmp(Newname,"q")) break;
printf("請輸入成績:");
scanf("%d",&Newgrade);
InsertStudent(Newname,Newgrade);
}
puts("輸入結束!!");
printf("共有%d個學生\n",StudentCount());
StudentPrint();
printf("\n請輸入欲查詢學生姓名:");
scanf("%s",SearchName);
StudentSearch(SearchName);
system("PAUSE");
return 0;
}
void StudentSearch(char search[])
{
Student *p=ptr->next;
while(p!=NULL)
{
if(!strcmp(search,p->name))
printf("%s 成績:%d\n",p->name,p->grade);
p=p->next;
}
}
void StudentPrint()
{
Student *p = ptr->next;
while(p!=NULL)
{
printf("姓名:%s \t 分數:%d\n",p->name, p->grade);
p = p->next;
}
}
int StudentCount()
{
int count=0;
Student *p = ptr->next;
while(p!=NULL)
{
count++;
p = p->next;
}
return count;
}
void InsertStudent(char newname[],int newgrade)
{
Student *NewNode;
NewNode=(Student*)malloc(sizeof(Student));
if(NewNode == NULL)
puts("malloc Fail!!");
strcpy(NewNode->name ,newname);
NewNode->grade = newgrade;
NewNode->next=NULL;
if(StudentCount()==0)
{
NewNode->next = ptr->next;
ptr->next = NewNode;
}else
{
previous = ptr;
current = ptr->next;
while(current->grade > NewNode->grade)
{
previous = current;
if (current->next != NULL)
current=current->next;
else
goto END;
}
NewNode->next = current;
END:
previous->next = NewNode;
}
}
2008年7月 課表
年月:2008年7月 課表 | << 依班級:SI502 >> | 製成時間:2008/7/1上午 01:40:04 |
週別 | 星期一 | 星期二 | 星期三 | 星期四 | 星期五 | 星期六 | 星期日 | |
1 週 | 上 午 | 6/30 | 7/1 陳衍華 TCP/IP 310 | 7/2 黃馨瑧 DS 310 | 7/3 蔡宜璋 嵌入式處理器架構 310 | 7/4 李志賢 OS 310 | 7/5 鄧淇文 驅動程式 310 | 7/6 鄧淇文 驅動程式 310 |
下 午 | | 李志賢 OS 310 | 李志賢 黃馨瑧 專題 孫文駿 106 | 蔡宜璋 嵌入式處理器架構 310 | 黃馨瑧 程式設計(C/C++) 310 | 鄧淇文 驅動程式 310 | 鄧淇文 驅動程式 310 | |
夜 間 | | | | | | | | |
2 週 | 上 午 | 7/7 | 7/8 李俊傑 Socket程式 310 | 7/9 黃馨瑧 程式設計(C/C++) 310 | 7/10 黃馨瑧 程式設計(C/C++) 310 | 7/11 李俊傑 Socket程式 310 | 7/12 蔡宜璋 嵌入式處理器架構 310 | 7/13 鄧淇文 驅動程式 310 |
下 午 | | 李志賢 OS 310 | | 李志賢 OS 310 | 黃馨瑧 程式設計(C/C++) 310 | 蔡宜璋 嵌入式處理器架構 310 | 鄧淇文 驅動程式 310 | |
夜 間 | | | 孫文駿 Linux程式設計 310 | | | | | |
3 週 | 上 午 | 7/14 | 7/15 | 7/16 孫文駿 Linux程式設計 310 | 7/17 李俊傑 Socket程式 310 | 7/18 專題觀摩 310 | 7/19 蔡宜璋 嵌入式作業系統 310 | 7/20 鄧淇文 驅動程式 310 |
下 午 | | 李俊傑 Socket程式 310 | 黃馨瑧 程式設計(C/C++) 310 | 黃馨瑧 DS 310 | 李志賢 OS 310 | 蔡宜璋 嵌入式作業系統 310 | 鄧淇文 驅動程式 310 | |
夜 間 | | | | | | | | |
4 週 | 上 午 | 7/21 | 7/22 | 7/23 李俊傑 Socket程式 310 | 7/24 李俊傑 Socket程式 310 | 7/25 李志賢 OS 310 | 7/26 蔡宜璋 嵌入式作業系統 310 | 7/27 鄧淇文 驅動程式 310 |
下 午 | | 黃馨瑧 程式設計(C/C++) 310 | 李志賢 OS 310 | 李志賢 黃馨瑧 專題 孫文駿 310 | 黃馨瑧 DS 310 | 蔡宜璋 嵌入式作業系統 310 | 鄧淇文 驅動程式 310 | |
夜 間 | | | | | | | | |
5 週 | 上 午 | 7/28 | 7/29 | 7/30 李俊傑 Socket程式 310 | 7/31 黃馨瑧 DS 310 | 8/1 李俊傑 Socket程式 310 | 8/2 陳裕生 嵌入式Linux系統 310 | 8/3 鄧淇文 嵌入式作業系統 310 |
下 午 | | | 李志賢 OS 310 | 李志賢 黃馨瑧 專題 孫文駿 106 | 李志賢 OS 310 | 陳裕生 嵌入式Linux系統 310 | 鄧淇文 嵌入式作業系統 310 | |
夜 間 | | | | | | | |
2008年6月13日 星期五
03.堆疊與佇列( Stack and Queue )
上課內容精要!!
3.1 堆疊和佇列基本觀念
堆疊(Stack)
加入(push)與刪除(pop)於同一端。後進先出(LIFO)
例子:堆積木、蓋房子
佇列(Queue)
加入與刪除於不同端(front & rear)。先進先出(FIFO)
例子:排隊買票、坐公車
3.2 堆疊的加入與刪除
3.2.1 堆疊加入函數(top的初始值為-1)
3.2.2 堆疊刪除函數
3.3 佇列的加入與刪除
3.3.1 佇列加入函數(front、rear的初始值分別為0、-1)
3.3.2 佇列刪除函數
[ 問題 ] 佇列前端還有空位,但要加入元素卻發現此佇列已滿
[ 解決方式 ] 環狀佇列
3.3.3 環狀佇列加入函數(front、rear的初始值均為MAX-1)
3.3.4 環狀佇列刪除函數
3.4 堆疊與佇列的應用
堆疊的應用 :副程式的呼叫 (subroutine calls)
中序表示式 → 後序表示式
佇列的應用 : 作業系統的工作安排(job scheduling)
中序表示式 :「運算子」(operator)置於「運算元」(operand)的中間
Ex: A*B / C
後序表示式 :「運算子」置於「運算元」的後面
Ex:AB * C /
3.5 如何計算後序表示式
利用<運算元堆疊法>
3.6 老掉牙的應用問題
數獨遊戲 (個人經常給學生玩的數獨網站) http://oddest.nc.hcc.edu.tw/sumain.htm
Algorithm Gossip: 八個皇后
老鼠走迷官(一)
河內塔
(以上三個連結取自 良葛格學習筆記 - 困在技術撰稿人身體裡的小說家)
2008年5月30日 星期五
2008年5月28日 星期三
Linux Programming (2) Wrapper
上課的內容:如何在上班時偷看股票~~~
1.先去找你要的網頁資料,並透過lynx 去抓股票:2475 下來存到aaa.txt[root@SI502U30 Class]# lynx -dump http://tw.stock.yahoo.com/q/q?s=2475 > aaa.txt
2.人工搜尋你要的資料。例如我想要的股票資料為 [19] 和 [20] 那兩行中間(請自行打開aaa.txt文件檔)
[18]2475M
[19][X
14:30 9.55 9.55 9.56 0.24 29,595 9.79 9.80 9.82 9.55
[20]N@[21]sD
@[22]wX
xU (_) R (_) _____ i [BUTTON] [23]s
3.所以利用grep和cut去搜尋[19] 和 [20] 在檔案的那一行?
如例子上所列為 aaa.txt的 20行 和 22行
cut -d: -f1 表示 以 ":" 作分隔 ,並取 f1 (第一欄)
所以得到的 19\] 位於檔案的20行 ; 20\] 位於檔案的22行 ;
[root@SI502U30 Class]# grep -n 19\] aaa.txt |cut -d: -f1
20
[root@SI502U30 Class]# grep -n 20\] aaa.txt |cut -d: -f1
22
4.利用head 和 tail 將資料擷取出來 所以得到的資料
head -21 表示將檔案的第一行到第21行保留,第22行以下刪除
tail -1 表示將檔案的最底下數來第1行以下保留,倒數第2行以上刪除
[root@SI502U30 Class]# head -21 aaa.txt > temp.txt
[root@SI502U30 Class]# tail -1 temp.txt > temp2.txt
[root@SI502U30 Class]# cat temp2.txt
14:30 9.55 9.55 9.56 0.24 29,595 9.79 9.80 9.82 9.55
5.在利用cut把剩下精簡的資料作分欄
# cut -d" " -f9 temp2.txt 以空格當分隔 所以9.55為第九個分隔 14:30 為第6個分隔
[root@SI502U30 Class]# cat temp2.txt
14:30 9.55 9.55 9.56 0.24 29,595 9.79 9.80 9.82 9.55
[root@SI502U30 Class]# cut -d" " -f9 temp2.txt
9.55
6. 將上述所學的指令串成一個shell script (stock.sh)
如此就可以將每日的股票資料和你所想要觀察的資料當漏下來寄給自己。
如果公司有擋網頁的話就可以在上班的時候利用電子郵件看股票。
#(stock.sh)
i=2601
lynx -dump http://tw.stock.yahoo.com/s/s/kimo_day${i}.html >${i}.txt
begin_line=`grep -n 19\] ${i}.txt|cut -d: -f1`
echo "begin_line= $begin_line"
end_line=`grep -n 21\] ${i}.txt|cut -d: -f1`
echo "end_line= $end_line"
cut_line=$(( (end_line + begin_line)/2 ))
echo "cut_line= $cut_line"
head -${cut_line} ${i}.txt > tmp.txt
tail -1 tmp.txt > tmp2.txt
echo
echo time:`cut -d' ' -f4 tmp2.txt`
echo price:`cut -d' ' -f5 tmp2.txt`
exit
rm tmp.txt
rm tmp2.txt
rm ${i}.txt
2008年5月27日 星期二
Linux Programming (1) Shell
- Shell is a piece of software that provides an interface for users.
- Executable File VS. Built-in Commands
- #echo $SHELL //顯示目前使用中的SHELL
- #chsh -s /bin/tcsh //改變SHELL
- A shell script will be writen by a text editor.
- Begin with " #!/bin/bash ".
- " # " 註解!! 只能寫在每一行的 head
- echo -n " my name is " // " -n "means that don't the newline
whoami - 執行 shell script 可以增加權限以後就不需加 sh 去執行
#chmod +x hello.sh 或是 #chmod hello.sh 777
#hello.sh (就可以直接執行) - 若是不行,需要增加執行目錄=>編輯 .bash_pprofile 加入 PATH= . : $PATH
- Shell變數 (1) 預定變數(Predefined variables) local variable (2) 環境變數(Environment variables) Global variable , ex: PATH、HOME
- 設定變數,a=3,等號前後不能有空格。
- #longpath=/usr/home/ee/99/kph
#cd $longpath (使用$符號取得設定的變數) - set 可以查看所有已設定的變數
#set grep longpath - unset varName 移除設定的變數
- 變數輸出 echo 相當於printf() ; 變數輸入 read 相當於 scanf() ;
#echo test (直接顯示"test")
#echo $test (顯示 test變數內容)
#read test (讀進來的取名test) - 宣告環境變數:
export變數名稱=內容 =>Global變數
變數名稱=內容=>Local變數
查看 set (宣告local) #set test=abc (宣告global) #export test=abc
移除 unset (宣告local) #unset test (宣告global) #export -n test - 引號:單引號:(" ' " ,所夾的所有內容保持不變)
#echo 'pig cat $dog'
#pig cat $dog (裡面所有符號皆無效) - 引號:雙引號:(" " " ,所夾的內容保持不變)
有三種例外(1)變數 $var ($ 跳脫字元) (2)反斜線 \ (3)反單引號:`
(1)變數 $var ($ 跳脫字元)
#color=blue
#echo $color ==>#blue
#echo '$color' ==>#$color
#echo "$color" ==>#blue
(2)反斜線 \ (其後的字元的特殊意義會被取消)
#num=10
#echo "#num" ===>#10
#echo "\$num" ===>#$num
#echo "\"$num\"" ===>#"10"
(3)反單引號:` (不同於單引號 ' ,所夾內容會先執行)
#echo "Your....is `pwd`"
#Your....is /home/jhhsu - ..
- .待續.......
2008年5月25日 星期日
嵌入式班:2008年6月 課表
週別 | 星期一 | 星期二 | 星期三 | 星期四 | 星期五 | 星期六 | 星期日 | |
1 週 | 上 午 | 5/26 | 5/27 孫文駿 Linux程式設計 310 | 5/28 郭惠民 計算機組織 310 | 5/29 孫文駿 Linux程式設計 310 | 5/30 郭惠民 計算機組織 310 | 5/31 莊博景 8051微處理器 310 | 6/1 |
下 午 | 孫文駿 Linux程式設計 310 | 黃馨瑧 DS 310 | 孫文駿 Linux程式設計 310 | | 黃馨瑧 DS 310 | 莊博景 8051微處理器 310 | | |
夜 間 | | | | | | | | |
2 週 | 上 午 | 6/2 孫文駿 Linux程式設計 310 | 6/3 郭惠民 計算機組織 310 | 6/4 黃馨瑧 DS 310 | 6/5 郭惠民 計算機組織 310 | 6/6 | 6/7 | 6/8 |
下 午 | 黃馨瑧 DS 310 | 孫文駿 Linux程式設計 310 | 黃馨瑧 專題 310 | 孫文駿 Linux程式設計 310 | | | | |
夜 間 | | | | | | | | |
3 週 | 上 午 | 6/9 | 6/10 | 6/11 黃馨瑧 DS 310 | 6/12 孫文駿 Linux程式設計 310 | 6/13 李志賢 嵌入式系統概論 310 | 6/14 蔡宜璋 嵌入式處理器架構 310 | 6/15 |
下 午 | | 李志賢 嵌入式系統概論 310 | 陳衍華 TCP/IP 310 | 黃馨瑧 DS 310 | 孫文駿 Linux程式設計 310 | 蔡宜璋 嵌入式處理器架構 310 | | |
夜 間 | | | | | | | | |
4 週 | 上 午 | 6/16 | 6/17 陳衍華 TCP/IP 310 | 6/18 蔡宜璋 嵌入式處理器架構 310 | 6/19 陳衍華 TCP/IP 310 | 6/20 陳衍華 TCP/IP 310 | 6/21 | 6/22 |
下 午 | | 黃馨瑧 DS 310 | 蔡宜璋 嵌入式處理器架構 310 | 黃馨瑧 DS 310 | 黃馨瑧 程式設計(C/C++) 310 | | | |
夜 間 | | | | | | | | |
5 週 | 上 午 | 6/23 | 6/24 陳衍華 TCP/IP 310 | 6/25 | 6/26 蔡宜璋 嵌入式處理器架構 310 | 6/27 | 6/28 莊博景 8051微處理器 310 | 6/29 鄧淇文 驅動程式 310 |
下 午 | | 黃馨瑧 程式設計(C/C++) 310 | 黃馨瑧 程式設計(C/C++) 310 | 蔡宜璋 嵌入式處理器架構 310 | 黃馨瑧 程式設計(C/C++) 310 | 莊博景 8051微處理器 310 | 鄧淇文 驅動程式 310 | |
夜 間 | | | | | | | | |
6 週 | 上 午 | 6/30 | 7/1 | 7/2 陳衍華 TCP/IP 310 | 7/3 蔡宜璋 嵌入式處理器架構 310 | 7/4 方華韋 OS 310 | 7/5 鄧淇文 驅動程式 310 | 7/6 |
下 午 | | 方華韋 OS 310 | 李志賢 黃馨瑧 專題 孫文駿 106 | 蔡宜璋 嵌入式處理器架構 310 | 黃馨瑧 程式設計(C/C++) 310 | 鄧淇文 驅動程式 310 | | |
夜 間 | | | | | | |
2008年5月20日 星期二
一天只睡四小時的拿破崙讀書法
轉貼部分給大家看,全文請到該出處。
一天只睡四小時的拿破崙讀書法
傳說拿破崙一天只睡四小時,然而卻仍能有旺盛的精力,清楚的頭腦處理法國軍政大事。實在令人欽佩。
凡夫俗子如我等之輩,要像拿破崙般精力旺盛,長期只睡四小時,處理龐大的國家事物,自然不太可能。
然而,人生難免會遇到決定未來的重要關卡,例如聯考、研究所考試、國家考試等。在這些關卡之前,任誰都希望多一些的時間,盡可能的準備完全,好上考場,贏取好成績。
「一天只睡四小時的拿破崙讀書法」,正是一項為特殊需求而延伸的「讀書時間安排術」,作者在此並不推薦長期使用。最好以四十天為最上限。但是,有效使用, 卻可以幫助全職準備考試,或即將面臨人生重大大考的考生,甚至需要臨時報佛腳的考生,在不傷害身體與影響作息的狀況下,盡可能的充分利用時間,讓一天變三 天使用,爭取更多的時間準備考試,讓自己的考試更有勝算。
「一天只睡四小時的拿破崙讀書法」,能否切實實行,更考驗著考生的毅力與決心,若是能夠貫徹者,心智能力也會被鍛鍊到某種程度的堅毅,思想能夠更清楚而專注在考試上,讓學習效能更加倍。
主軸
拿破崙讀書法並不鼓勵熬夜,其核心是利用最有效而省時的睡眠,在不影響身體狀況之下,將時間做最有效益的切割和安排,幫助考生盡可能擠出時間複習。
一天只睡四個小時。建議睡眠時間有三種:
22:00~02:00
23:00~03:00
24:00~04:00
並沒有硬性規定哪一種,得看考生的學習準備需要而定。但是,00:00~03:00的肝臟休息時間,一定要有睡到。否則長期熬夜,身體會壞掉。
詳細作息表(以24:00~4:00睡眠時間為例):
24:00~4:00,睡覺
04:00~4:10,刷牙、洗臉、上廁所(規定自己背1~3個不熟悉的單字/片語/成語/公式),喝杯熱可可或溫牛奶,吃點東西墊肚子。
04:10~8:00,第一階段閱讀。每五十分鐘,休息五分鐘。休息時間可以做做運動,上廁所或喝水。
08:00~08:10,早餐時間,早餐要吃飽且吃的好,這是最大原則。
08:10~12:00,第二階段閱讀。每五十分鐘,休息五分鐘。休息時間可以做做運動,上廁所或喝水。第二階段的第一個時段(也就是用完早餐之後的時間),用來閱讀報刊雜誌社論專欄(可自選),掌握時事。
12:00~13:00,午休。午餐十分鐘,不用吃多,但要營養。吃多中午容易昏。飯後休息五分鐘(規定自己背1~3個不熟悉的單字/片語/成語/公式),然後午睡四十五分鐘。
13:00~17:00,第三階段閱讀。每五十分鐘,休息五分鐘。休息時間可以做做運動,上廁所或喝水。
17:00~18:00,晚餐與電視。晚餐十五分鐘,和家人、朋友聊聊天。剩下四十五分鐘或看電視新聞,或休閒娛樂。
18:00~21:00,第四階段閱讀時間。每五十分鐘,休息十分鐘。休息時間可以做做運動,上廁所或喝水。到了第四階段,身體雖有經過午睡,但已經較為 疲累,顧每五十分鐘就休息十分鐘,以恢復疲勞。這個階段一定不可以喝咖啡茶或有刺激性的飲料,可以喝薰衣草等有助睡眠和放鬆的花草茶。避免影響到主體睡眠 時間。
21:00~24:00,第五階段閱讀書。時間每五十分鐘,休息十分鐘。休息時間可以做做運動,上廁所或喝水。這段時間可以做全天的總複習,或者自我測驗,寫寫考古題。
休息的五或十分鐘,可以用來做運動,或者複習剛才所念科目中,尚不清楚/非常能掌握的部分(看個人需要而取捨),可以加強記憶。另外,做測驗或考古題的動腦思考(請不要做在書桌前做),或和一起讀書的朋友同學討論一下剛才所碰到的難題。
拿破崙讀書法的作息注意事項
1四個小時的主體睡眠,一定要睡好。
2在第五階段閱讀時間,可以輔助喝一些助睡的飲料。
3三餐分配,早餐要營養豐富,中餐要營養但不需多吃,晚餐少吃。但一定都要吃青菜水果。
4三餐點心可以請家人代為準備。若是外宿者,可以事先選定好幾家乾淨衛生的餐館,但可能就必須連帶壓縮其他的休息時間。
5早上起床時的點心和可可一定要吃,補充營養。書桌邊可以放一些甜食、糖果,在疲勞時吃一點,補充血糖。
6午睡是一定要的。午睡是一定要的輔助軸線,沒有午睡時間,拿破崙一天只睡四小時讀書法,很難貫徹。
善加利用「一天只睡四小時的拿破崙讀書法」,一天將至少有完整的十八小時可供學習,半小時的時事新聞資料複習整理(這對現代靈活考試題目非常有幫助),半 小時左右的各式小複習(上廁所、飯後、小時段休息時間),你將能夠非常有效率的分配與使用時間。再加上規律的作息,充足的營養和睡眠,都可以幫助你專注於 學習,有效提升學習效果。還可以培養毅力耐力(早起對學生來說事件困難的事情)。
另外,在執行拿破崙讀書法之前,請先確定確切的執行日期,並且定下每一個時段的複習計畫和閱讀進度,這樣才不至於空有許多時間,卻不能平均分配在各科複習進度上,而讓這套讀書法打了折扣。
後記:
此套拿破崙讀書法,其想法和操作原則,都是來自於現在就讀於台大化工研究所的林姓學弟。他說當年準備大學聯考,就是以此拿破崙讀書法,和朋友相互砥礪,方 能一口氣順利考上台大,是他個人珍藏的讀書密法。今特此公開,與大家分享。盼望大家都能夠如願以償,考上自己理想的學校/職缺!
2008年5月18日 星期日
Class2 I/O 、掃秒技巧、七段顯示、keyboard (ch4)
delay的問題
//********************** 4_1.c *******************
//動作:令P10反相輸出指定時間的方波,送到喇叭發出聲音
//***********************************************
#include
void delay_1m(unsigned int dly); //宣告延時1m秒函數
main()
{
P0 = 0x04;
loop:
P1=P1^0x01; //P10和1做xor會反相,令喇叭發出聲音
delay_1m(1); //呼叫延時函數1ms,自行調整延時時間
goto loop;
}
void delay_1m(unsigned int dly) //自訂1ms延時函數
{
int count;
while(dly>0)
{
count=120; //延時1ms的空轉次數
while (count>0) count--; //延時1ms
dly--; //dly遞減
}
}//********** 4_2.c *****************************
//動作:令P10輸出方波到喇叭發出聲音,由P3決定延時時間
//**********************************************
//#include
#include "reg51.h"
unsigned int dly;
void delay (void); //宣告自定延時函數
main()
{
while(1) //不斷循環執行
{
// P1_0=!P1_0; //P10反相,令喇叭發出聲音
P1 = ~P1;
delay(); //呼叫延時函數
}
}
void delay(void) //自訂延時函數
{
dly= P3*100; //由P1輸入決定延時時間
while (dly>0) //若dly>0 則再遞減
dly--; //dly遞減
}
//********** 4_3.c *****************************
//動作:令P10輸出嗶嗶聲
//**********************************************
#include
void delay(int dly); //宣告自定延時函數
void beep(char i);
main()
{
while(1)
{
beep(1); //嗶一聲
delay(30000); //間隔時間
beep(2); //嗶一聲
delay(30000); //間隔時間
beep(3); //嗶一聲
delay(30000); //間隔時間
}
}
void beep(char i)
{
int j;
while(i>0) //嗶聲次數
{
for(j=0;j<400;j++) //令輸出反相400次
{
P1_0=!P1_0; //P10反相,令喇叭發出聲音
delay(10); /呼叫延時函數
}
delay(10000); //嗶聲的間隔時間
i--;
}
}
void delay(int dly) //自訂延時函數
{
while (dly>0) //若dly>0 則再遞減
dly--; //dly遞減
}
未解碼七段顯示器範例實習
l程式7seg.c
l修改程式使七段顯示器顯示0~9
l讓七段顯示器顯示0~9,在顯示9~0
l配合作業1的版子,用兩個PORT的輸出控制兩個七段顯示器動作做00~99的計數(SEG4.c)
作業
設計一程式,使用一個七段顯示器及一顆按鈕,設計亂數程式,按下按鈕後使七段顯示器亂數顯示1~6的其中一個數字。(參考3-82頁3_45.c使用rand()函式)