因爲工作關係,最近的開發平臺變成了ucos上面,所以臨時突擊了一下這方面的內容,看了ucosii,發現上面的代碼是在bc上面編譯的,鑑於本人是vc的信徒,鍾愛vc,所以特別將它移植到了vc上面,以下是我做的一些修改,
1,去網站下載一份支持vc的ucos的代碼,網址爲http://www.micrium.com/windows/index.html#rtosports
2,去下載一份ucosii書本對應的borland的代碼,作者該版本上寫了pc.c作爲控制檯的輸出,這部分需要我們更改,更改後如下:
#include "WIN_ConsuleGUI.h"
#include <windows.h>
#include <Winuser.h>
#include <time.h>
static void gotoxy(INT16U x, INT16U y)
{
COORD c;
c.X = x ;
c.Y = y ;
SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}
void PC_DispStr(INT16U x, INT16U y, char *str, INT8U color)
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
gotoxy(x,y);
SetConsoleTextAttribute(hOut,160 );
printf("%s",str);
}
void PC_DispChar(INT16U x, INT16U y, char c, INT8U color)
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
gotoxy(x,y);
// SetConsoleTextAttribute(hOut,160 );
printf("%c",c);
}
void PC_DispClrScr(INT8U Mode)
{
HANDLE hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
// COORD coordScreen={2*head.coord.x,5}; //清屏後返回的座標
COORD coordScreen={0,5};
BOOL bSuccess;
DWORD cCharsWritten ;
CONSOLE_SCREEN_BUFFER_INFO csbi;//保存緩衝區信息
DWORD dwConSize;//當前緩衝區可容納的字符數
GetConsoleScreenBufferInfo(hConsole,&csbi);//獲得緩衝區信息
dwConSize=csbi.dwSize.X * csbi.dwSize.Y;//緩衝區容納字符數目
// dwConSize=(head.coord.x-tail.coord.x+1);
// SetConsoleTextAttribute(hConsole,200);
//用空格填充緩衝區
bSuccess=FillConsoleOutputCharacter(hConsole,(TCHAR)' ',dwConSize,coordScreen,&cCharsWritten);
//////////////能不能去除背景呀!!
// bSuccess=GetConsoleScreenBufferInfo(hConsole,&csbi);//獲得緩衝區信息
// cout<<"uuuuuuuuuuuuuuu"<<endl;
//填充緩衝區屬性
// bSuccess=FillConsoleOutputAttribute(hConsole,csbi.wAttributes,dwConSize,coordScreen,&cCharsWritten);
//光標返回屏幕左上角座標
bSuccess=SetConsoleCursorPosition(hConsole,coordScreen);
}
static void SetWindows(HANDLE hOut)
{
COORD size = {125, 44};
SMALL_RECT rc = {0,0, 125, 25}; // 重置窗口位置和大小
CONSOLE_SCREEN_BUFFER_INFO bInfo;
GetConsoleScreenBufferInfo(hOut, &bInfo ); // 獲取窗口緩衝區信息
SetConsoleScreenBufferSize(hOut,size); // 重新設置緩衝區大小
SetConsoleWindowInfo(hOut,TRUE ,&rc);
// CloseHandle(hOut); // 關閉標準輸出設備句柄
}
void PC_GUIInit()
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetWindows(hOut);
}
void PC_GUI_UnInit()
{
}
3.屏蔽所有編譯有問題的代碼,你就可以看到運行結果了,另外,注意的是在ucos測試的主函數模塊記得初始化一下GUI,也就是調用PC_GUIInit()。當然,目前這樣有個問題是它在統計cpu數據的時候不準確,問題怎麼解決還沒想好,希望有同行看到幫忙一下。
jeyawn