?? test.c
字號:
#include "includes.h"
#define TASK_STK_SIZE 512 //任務堆棧長度
OS_STK StartTaskStk[TASK_STK_SIZE]; //定義任務堆棧區
OS_STK MyTaskStk[TASK_STK_SIZE];
OS_MEM *IntBuffer; /*內存控制塊指針*/
INT8U IntPart[4][6]; /*空間數組*//*四塊,每塊6個字節*/
INT8U *IntBlkPtr[4]; /*存儲獲取內存塊的指針-32位為了能顯示原來存在的鏈表指針數據*/
INT16S key; //用于退出uCOS_II的鍵
INT8U err;
INT8U x=0,y=0; //字符顯示位置
void StartTask(void *data);
void MyTask(void *data);
void Quitkey(void);
/************************主函數*********************************************/
void main (void)
{
OSInit(); //初始化uCOS_II
PC_DOSSaveReturn(); //保存Dos環境
PC_VectSet(uCOS, OSCtxSw); //安裝uCOS_II中斷
IntBuffer=OSMemCreate(IntPart,4,6,&err);
if(err!=OS_NO_ERR)
{PC_DispStr(20,20,"Mem create error",DISP_BGND_BLACK+DISP_FGND_WHITE);}/*檢測是否創建成功*/
OSTaskCreate(StartTask,0,&StartTaskStk[TASK_STK_SIZE - 1],5);
OSStart();
}
//*****************************StartTask********************************************
void StartTask(void *pdata)
{
pdata=pdata;
OS_ENTER_CRITICAL();
PC_VectSet(0x08, OSTickISR);
PC_SetTickRate(OS_TICKS_PER_SEC);
OS_EXIT_CRITICAL();
// OSStatInit();
OSTaskCreate(MyTask,0,&MyTaskStk[TASK_STK_SIZE - 1],6);
OSTaskSuspend(OS_PRIO_SELF);
}
//*****************************MyTask********************************************
void MyTask (void *pdata)
{
char temp[20];
pdata = pdata;
for (;;)
{
/*Do some display init*/
PC_DispStr(2,8,"Get Order block header Put Oder",DISP_BGND_BLACK+DISP_FGND_WHITE);
PC_DispStr(5,9,"0123:",DISP_BGND_BLACK+DISP_FGND_WHITE);
// PC_DispStr(34,8,"Put Order",DISP_BGND_BLACK+DISP_FGND_WHITE);
PC_DispStr(16,13,"Pointer got",DISP_BGND_BLACK+DISP_FGND_WHITE);
PC_DispStr(34,9,"3210:",DISP_BGND_BLACK+DISP_FGND_WHITE);
PC_DispStr(34,10,"0123:",DISP_BGND_BLACK+DISP_FGND_WHITE);
PC_DispStr(34,11,"0312:",DISP_BGND_BLACK+DISP_FGND_WHITE);
/*第一次獲取內存塊然后放回*/
for(x=0;x<4;x++)
{
IntBlkPtr[x]=OSMemGet(IntBuffer,&err);
sprintf(temp,"%d",*(INT32U *)IntBlkPtr[x]);
PC_DispStr(11+x*6,9,temp,DISP_BGND_BLACK+DISP_FGND_YELLOW);
sprintf(temp,"%d",IntBlkPtr[x]);
PC_DispStr(11+x*6,14,temp,DISP_BGND_BLACK+DISP_FGND_YELLOW);
}
for(x=0;x<4;x++)
{
OSMemPut(IntBuffer,IntBlkPtr[3-x]);
}
/*第二次獲取內存塊然后逆序放回*/
for(x=0;x<4;x++)
{
IntBlkPtr[x]=OSMemGet(IntBuffer,&err);
/*強制轉換為32位數據指針為了能顯示原來存在的鏈表指針數據*/
sprintf(temp,"%d",*(INT32U *)IntBlkPtr[x]);
PC_DispStr(11+x*6,10,temp,DISP_BGND_BLACK+DISP_FGND_YELLOW);
sprintf(temp,"%d",IntBlkPtr[x]);
PC_DispStr(11+x*6,15,temp,DISP_BGND_BLACK+DISP_FGND_YELLOW);
}
for(x=0;x<4;x++)
{
OSMemPut(IntBuffer,IntBlkPtr[x]);
}
/*第三次獲取內存塊然后亂序放回0312*/
for(x=0;x<4;x++)
{
IntBlkPtr[x]=OSMemGet(IntBuffer,&err);
sprintf(temp,"%d",*(INT32U *)IntBlkPtr[x]);
PC_DispStr(11+x*6,11,temp,DISP_BGND_BLACK+DISP_FGND_YELLOW);
sprintf(temp,"%d",IntBlkPtr[x]);
PC_DispStr(11+x*6,16,temp,DISP_BGND_BLACK+DISP_FGND_YELLOW);
}
OSMemPut(IntBuffer,IntBlkPtr[0]);
OSMemPut(IntBuffer,IntBlkPtr[3]);
OSMemPut(IntBuffer,IntBlkPtr[1]);
OSMemPut(IntBuffer,IntBlkPtr[2]);
/*第四次獲取內存塊*/
for(x=0;x<4;x++)
{
IntBlkPtr[x]=OSMemGet(IntBuffer,&err);
sprintf(temp,"%d",*(INT32U *)IntBlkPtr[x]);
PC_DispStr(11+x*6,12,temp,DISP_BGND_BLACK+DISP_FGND_YELLOW);
sprintf(temp,"%d",IntBlkPtr[x]);
PC_DispStr(11+x*6,17,temp,DISP_BGND_BLACK+DISP_FGND_YELLOW);
}
Quitkey();
OSTimeDlyHMSM(0,1,0,0);
}
}
//*****************************Quitkey()********************************************
void Quitkey(void)
{
if(PC_GetKey(&key)==TRUE)
{
if(key==0x1B)
{PC_DOSReturn();}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -