vc上使用ucosii

因爲工作關係,最近的開發平臺變成了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 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章