μC/OS-II移植到KeilC51小模式51單片機操作系統源代碼:一個基于51單片機的操作系統,想研究51單片機操作系統的速度圍觀
1概述
前段時間我閱讀了楊屹的關于“ucos51移植心得”,并考慮到能否將ucos-II移植到
KeilC51的小模式下。由于小模式運行速度比大模式運行速度快很多,這將有利于提高系統
的速度。
2移植
我的移植程序主要側重在結合KeilC51的特點,提高移植以后的代碼的執行效率。主要
做以下幾方面的優化:
2.1將所有的外部變量的存儲類型改為xdata類型
由于程序中存在大量的外部變量,其中包括大型數組,所以無法在小模式下編譯通過,
所以將所有的外部變量都申明為xdata類型。
2.2盡量使用指定存儲類型的指針(memory-specific pointer)不使用一
般指針(generic pointer)
使用指定存儲類型的指針比使用一般指針效率高。我們能夠將程序中所有的generic
pointer都改為memory-specific pointer,這是因為:
1)首先程序中用到的一般指針包括兩類:指向緩沖區的數據指針和指向函數的函數指
針。
2)緩沖區一般都定義為外部變量,而我們已經將外部變量都申明為xdata類型,所以
對于這種情況,只要指針改為指向xdata數據類型的指針就可以了。
3)指向函數的指針指向代碼區,所以將這種指針改為指code數據類型的指針。
2.3任務堆棧結構設計
任務堆棧結構設計是移植的關鍵部分。任務堆棧用于保存任務切換時的context。
由于程序在小模式下編譯所以仿真棧在內部RAM中,仿真棧將從0xFF地址開始向下
生長。可重入函數的局部變量和函數參數將放在仿真堆棧中。
所以當任務切換時需要保存的context有:
仿真棧指針?C_IBP、仿真棧內容、硬件棧大小(用于計算SP的值)、硬件棧內容(包括壓入
硬件棧的寄存器)。KeilC51程序在進入中斷函數以后有時將重要寄存器壓入堆棧,這就是這里所說的“壓
入硬件棧的寄存器”。任務堆棧結構中的寄存器的排列順序必須和KeilC51程序進入中斷以
后的寄存器壓棧順序相同。查看中斷函數的反匯編程序可以了解壓棧的順序。
最后的任務棧結構如圖1。
這么好的資料,值得收藏!!!!!!!!!!!!!!!!!!!!!
強勢圍觀。樓主,有感覺到我犀利的眼神么?哈哈哈~~~
{:13_800:}{:13_800:}好帖,謝謝
樓主辛苦,下載學習。
學習學習,下來看看!!!!
需要,想下來看看!!