果然真的是OSTaskStkInit出了問題…多push了一個register的值在stack裡,所以在作context switch的時候回復到register的值都是錯的。
Enable OSTicker's interrupt也必須在OSStart之後才能把它打開,也就是必須在第一個Task裡才能把該interrupt enable.因為OSStart是不會return的。
想不到這樣的修改以後它就能動了…
星期四, 3月 17, 2005
System crash..
原本一心只想讓OS能動起來,練習怎麼寫OS的code...看來還有一段距離。
把認為Porting好的uC/OS-II在MCU run後
它就馬上當給我看.......哎......網路上捉來的看來不怎麼好用
當掉的時候PC的內容看來錯的和其它Reg.的內容都差了一個byte的位址…
所以猜想應該是task stack initialize的問題
把認為Porting好的uC/OS-II在MCU run後
它就馬上當給我看.......哎......網路上捉來的看來不怎麼好用
當掉的時候PC的內容看來錯的和其它Reg.的內容都差了一個byte的位址…
所以猜想應該是task stack initialize的問題
星期五, 3月 11, 2005
Implement ENTER_Critical section.
在uC/OS中可選擇三種enter critical section的模式:
Method 1: Do not save CCR and directly disable interrupt.
Method 2: Save CCR into stack and disable interrupt.
Method 3: Before enter critical section uses a local variable to save CCR. and then disable interrupt.
作者建議使用第三種模式..
Method 1: Do not save CCR and directly disable interrupt.
Method 2: Save CCR into stack and disable interrupt.
Method 3: Before enter critical section uses a local variable to save CCR. and then disable interrupt.
作者建議使用第三種模式..
星期四, 3月 03, 2005
Class
class Node{
public:
Node(int,int);
....
....
};
const Node* f();
Node *const f();
兩個函數回傳值的差異?老實說我有點搞不清楚
哎…
如果宣告成
const Node n(1,2);
那n's member是在run time才決定的?應該是吧…
從程式執行的結果看來好像是這樣,但是執行的結果
似乎是錯的…所要初始的兩個member並沒有被初始化
成功...
是因為當n宣告成const時,它的位址就被配置在MCU
的ROM,所以當程式執行constructor的時候並不能
對ROM寫入。
看來要將class變數配置在ROM好像沒辦法!
public:
Node(int,int);
....
....
};
const Node* f();
Node *const f();
兩個函數回傳值的差異?老實說我有點搞不清楚
哎…
如果宣告成
const Node n(1,2);
那n's member是在run time才決定的?應該是吧…
從程式執行的結果看來好像是這樣,但是執行的結果
似乎是錯的…所要初始的兩個member並沒有被初始化
成功...
是因為當n宣告成const時,它的位址就被配置在MCU
的ROM,所以當程式執行constructor的時候並不能
對ROM寫入。
看來要將class變數配置在ROM好像沒辦法!
星期三, 3月 02, 2005
訂閱:
意見 (Atom)
11.jpg)