?? main_entry.c
字號:
/*
*********************************************************************************************************
* uC/OS-II
* The Real-Time Kernel
*
description: 這個shell從skyeye項目中的ucos測試程序Genie shell移植過來
目前的genie shell帶有兩條命令:
hostname命令在屏幕上打印一句話,很簡單。
hello 命令可以帶多個參數,如hello a b c d,回車后會顯示:
hello,I am Genie
your argv is:
a
b
c
d
這個例子具體請看原作者寫的《Genie shell for UCOS II 詳細說明及使用指南》
具體在skyeye項目中有下載
移植此shell的目的是為下一步移植文件系統做準備
date: 20050409
author: 文佳 Email:ganganwen@163.com
*********************************************************************************************************
*/
#include "includes.h"
#include "shelltask.h"
/*
*********************************************************************************************************
* CONSTANTS
*********************************************************************************************************
*/
#define TASK_STK_SIZE 1024 /* Size of each task's stacks (# of WORDs) */
#define N_TASKS 10 /* Number of identical tasks */
#define TaskStart_Prio 1
#define Task1_Prio 2
/*
*********************************************************************************************************
* VARIABLES
*********************************************************************************************************
*/
OS_STK TaskStk[N_TASKS][TASK_STK_SIZE]; // Tasks stacks
BOOLEAN FlagEn = 1; //增加一個全局變量,做為是否時鐘調度的標志
char bufchar;
OS_EVENT *sem1;
/*
*********************************************************************************************************
* FUNCTION PROTOTYPES
*********************************************************************************************************
*/
void TaskStart(void * pParam) ;
void Task1(void * pParam) ; /* Function prototypes of tasks */
void VCInit(void); //初始化相關變量,一定需要
/*$PAGE*/
/*
*********************************************************************************************************
* MAIN
*********************************************************************************************************
*/
int main(int argc, char **argv)
{
VCInit(); //初始化一些變量
OSInit();
OSTaskCreate(TaskStart, 0, &TaskStk[0][TASK_STK_SIZE-1], TaskStart_Prio);
OSTaskCreate(shelltask, 0, &TaskStk[1][TASK_STK_SIZE-1], Task1_Prio);
OSStart(); //start never return
return 0;
}
void VCInit(void)
{
HANDLE cp,ct;
Context.ContextFlags = CONTEXT_CONTROL;
cp = GetCurrentProcess(); //得到當前進程句柄
ct = GetCurrentThread(); //得到當前線程偽句柄
DuplicateHandle(cp, ct, cp, &mainhandle, 0, TRUE, 2); //偽句柄轉換,得到線程真句柄
}
void TaskStart(void * pParam)
{
char err;
timeSetEvent(1000/OS_TICKS_PER_SEC, 0, OSTickISR, 0, TIME_PERIODIC); //開啟一個定時器線程,感覺10 ticks/s比較好
sem1 = OSSemCreate(0);
while(1)
{
OSSemPend(sem1, 0, &err); //sleep ,wait for sem1
OS_ENTER_CRITICAL(); //調用printf函數最好關中斷
printf( "Task1 running... Your input char: \"%c\"\n", bufchar );
OS_EXIT_CRITICAL();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -