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 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值