📄 test.c
字号:
/*
*********************************************************************************************************
* uC/OS-II
* The Real-Time Kernel
*
*
*
* DSC Example
*********************************************************************************************************
*/
#include "includes.h"
/*
*********************************************************************************************************
* CONSTANTS
*********************************************************************************************************
*/
#define TASK_STK_SIZE 512 /* Size of each task's stacks (# of WORDs) */
#define N_TASKS 4 /* Number of identical tasks */
/*
*********************************************************************************************************
* VARIABLES
*********************************************************************************************************
*/
OS_STK TaskStk[N_TASKS][TASK_STK_SIZE]; /* Tasks stacks */
OS_STK TaskStartStk[TASK_STK_SIZE]; /* TaskStart task stack */
INT8U TaskData[N_TASKS]; /* Parameters to pass to each task */
OS_EVENT *KeyQ[2];
void *KeyMsg[2][2];
INT8U Mode = 1; /* 1-prev 2-play 3-setup */
/*
*********************************************************************************************************
* FUNCTION PROTOTYPES
*********************************************************************************************************
*/
void Task_Pre(void *pdata); /* Function prototypes of tasks */
void Task_Play(void *pdata);
void Task_Setup(void *pdata);
void Task_Sacnkey(void *pdata);
void TaskStart(void *pdata); /* Function prototypes of Startup task */
static void TaskStartCreateTasks(void); /* Function prototypes of creat task */
static void TaskStartDispInit(void); /* Function prototypes of Initialization the display */
static void Disp(INT8U); /* Function prototypes of displaying the information of task */
/*
*********************************************************************************************************
* MAIN
*********************************************************************************************************
*/
void main (void)
{
PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); /* Clear the screen */
OSInit(); /* Initialize uC/OS-II */
PC_DOSSaveReturn(); /* Save environment to return to DOS */
PC_VectSet(uCOS, OSCtxSw); /* Install uC/OS-II's context switch vector */
KeyQ[0] = OSQCreate(&KeyMsg[0],2); /* main */
KeyQ[1] = OSQCreate(&KeyMsg[1],2); /* dsc */
OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 4);
OSStart(); /* Start multitasking */
}
/*
*********************************************************************************************************
* STARTUP TASK
*********************************************************************************************************
*/
void TaskStart (void *pdata)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
char *mg;
INT8U err,i;
pdata = pdata; /* Prevent compiler warning */
TaskStartDispInit(); /* Initialize the display */
OS_ENTER_CRITICAL();
PC_VectSet(0x08, OSTickISR); /* Install uC/OS-II's clock tick ISR */
PC_SetTickRate(OS_TICKS_PER_SEC); /* Reprogram tick rate */
OS_EXIT_CRITICAL();
OSStatInit(); /* Initialize uC/OS-II's statistics */
/* Create all the application tasks */
for (i = 0; i < N_TASKS; i++) { /* Create tasks */
TaskData[i] = i; /* Each task will display its own information */
}
OSTaskCreate(Task_Sacnkey, (void *)&TaskData[0], &TaskStk[0][TASK_STK_SIZE - 1], 5);
OSTaskCreate(Task_Pre, (void *)&TaskData[1], &TaskStk[1][TASK_STK_SIZE - 1], 6);
/*err=OSTaskSuspend(6);*/
OSTaskCreate(Task_Play, (void *)&TaskData[2], &TaskStk[2][TASK_STK_SIZE - 1], 7);
err=OSTaskSuspend(7);
OSTaskCreate(Task_Setup, (void *)&TaskData[3], &TaskStk[3][TASK_STK_SIZE - 1], 8);
err=OSTaskSuspend(8);
TaskStartDispInit(); /* Initialize the display */
for (;;) {
mg = (char *)OSQPend(KeyQ[0],1,&err); /* apply for message */
if (err == OS_NO_ERR) {
if (strcmp(mg,"Exit") == 0) {
PC_DOSReturn(); /* Return to DOS */
}
}
OSCtxSwCtr = 0; /* Clear context switch counter */
OSTimeDlyHMSM(0, 0, 1, 0); /* Wait one second */
}
}
/*
*********************************************************************************************************
* INITIALIZE THE DISPLAY
*********************************************************************************************************
*/
static void TaskStartDispInit (void)
{
PC_DispStr( 0, 0, " DSC Example ", DISP_FGND_WHITE + DISP_BGND_RED + DISP_BLINK);
PC_DispStr( 0, 1, "------------------------------", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 2, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 3, " Mode: ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 4, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 5, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 6, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 7, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 8, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 9, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 10, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 11, "------------------------------", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 24, " <-PRESS 'ESC' TO QUIT-> ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);
}
/*
*********************************************************************************************************
* Key Scan TASK
*
*********************************************************************************************************
*/
void Task_Sacnkey(void *pdata)
{
// INT8U i;
INT8U err;
INT16S key;
static char *s[]={ "Pre","Play","Setup","Exit","Capure","U","D"};
// i=*(int *)pdata;
for (;;) {
key = 0 ;
if (PC_GetKey(&key) == TRUE) { /* See if key has been pressed */
if (key == 0x1B) { /* Yes, see if it's the ESCAPE key */
// PC_DispStr( 0, 3, " Mode: oooo ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
err = OSQPost(KeyQ[0],(void*)s[3]);
}
else if (key == 0x50) { /* P */
err=OSTaskSuspend(6);
err=OSTaskSuspend(7);
err=OSTaskSuspend(8);
err=OSTaskSuspend(9);
err=OSTaskResume(6);
err = OSQPost(KeyQ[1],(void*)s[0]);
}
else if (key == 0x4C) { /* L */
err=OSTaskSuspend(6);
err=OSTaskSuspend(7);
err=OSTaskSuspend(8);
err=OSTaskSuspend(9);
err=OSTaskResume(7);
err = OSQPost(KeyQ[1],(void*)s[1]);
}
else if (key == 0x53) { /* S */
err=OSTaskSuspend(6);
err=OSTaskSuspend(7);
err=OSTaskSuspend(8);
err=OSTaskSuspend(9);
err=OSTaskResume(8);
err=OSQPost(KeyQ[1],(void*)s[2]);
}
else if (key == 0x43) { /* C */
if(Mode == 1)
{
err=OSQPost(KeyQ[1],(void*)s[4]);
}
}
else if (key == 0X55) { /* U */
if (Mode == 2 || Mode == 3)
{
err=OSQPost(KeyQ[1],(void*)s[5]);
} }
else if (key == 0x44) { /* D */
if (Mode == 2 || Mode ==3)
{
err=OSQPost(KeyQ[1],(void*)s[6]);
}
}
}
OSTimeDlyHMSM(0, 0, 0, 50);
}
}
void Task_Pre(void *pdata)
{
char *CommRAM1;
char *mg;
INT8U err;
INT8U error;
char s[80];
pdata = pdata; /* Prevent compiler warning */
TaskStartDispInit(); /* Initialize the display */
PC_DispStr( 0, 3, " Mode: Preview ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
for (;;) {
Mode = 1 ;
mg = (char *)OSQPend(KeyQ[1],10,&err);
if (err == OS_NO_ERR) {
if (strcmp(mg,"Capure") == 0) {
PC_DispStr( 0, 3, " Mode: Capture ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
OSTimeDlyHMSM(0, 0, 0, 500);
if(use<=PHOTO_NUM)
{
use++;
total--;
}
}
}
OSTimeDlyHMSM(0, 0, 0, 20); /* Wait one second */
PC_DispStr( 0, 3, " Mode: Preview ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
if(use <= PHOTO_NUM)
{
PC_DispStr( 0, 5, " number of photos: / ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
sprintf(s,"%d",use);
PC_DispStr( 20, 5, s, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
sprintf(s,"%d",total);
PC_DispStr( 24, 5,s, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
}
else
{ // CommRAM1 = OSMemGet(CommRAM,&error);
if(error == OS_NO_ERR)
{
}
sprintf(s," ");
PC_DispStr( 0, 5,s, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 5, "the memory is full ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
}
}
}
void Task_Play(void *pdata)
{
char *mg;
INT8U err;
INT8U error;
INT8U Blk_ptr;
char s[80];
int n = use;
pdata = pdata; /* Prevent compiler warning */
for (;;) {
mg = (char *)OSQPend(KeyQ[1],10,&err);
if (err == OS_NO_ERR) {
if (strcmp(mg,"U") == 0){
n ++;
if (n > use)
n = 1;
}
else if(strcmp(mg,"D") == 0){
n --;
if (n < 1)
n = use;
}
}
Mode = 2 ;
OSTimeDlyHMSM(0, 0, 0, 20);
sprintf(s," ");
PC_DispStr( 0, 5,s, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); /* Wait one second */
PC_DispStr( 0, 3, " Mode: Playback ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 5, " Number: Image ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
sprintf(s,"%d",n);
PC_DispStr( 16, 5, s, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
}
}
void Task_Setup(void *pdata)
{
char *mg;
INT8U err;
int i=0;
char s[80];
static char *lightmode[]={"on","off"};
pdata = pdata; /* Prevent compiler warning */
TaskStartDispInit(); /* Initialize the display */
for (;;) {
mg = (char *)OSQPend(KeyQ[1],10,&err);
if (err == OS_NO_ERR) {
if (strcmp(mg,"U") == 0)
{
i++;
if(i > 1)
i = 0;
}
else if (strcmp(mg, "D") == 0)
{
i--;
if(i < 0)
i = 1;
}
}
Mode = 3 ;
OSTimeDlyHMSM(0, 0, 0, 20);
sprintf(s," ");
PC_DispStr( 0, 5,s, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 3, " Mode: Setup ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 5, " lightmode: ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
sprintf(s,"%s", (void*)lightmode[i]);
PC_DispStr( 12, 5, s, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
}
}
void Task_Play(void *pdata)
{
char *mg;
INT8U err;
pdata = pdata; /* Prevent compiler warning */
TaskStartDispInit(); /* Initialize the display */
Mode = 2 ;
PC_DispStr( 0, 3, " Mode: Playback ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
for (;;) {
mg = (char *)OSQPend(KeyQ[1],10,&err); /* apply for message */
if (err == OS_NO_ERR) {
/*if (strcmp(mg,"Pre") == 0) {
PC_DispStr( 0, 3, " Mode: Capture ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
}*/
;
}
OSTimeDlyHMSM(0, 0, 0, 20); /* Wait one second */
PC_DispStr( 0, 3, " Mode: Playback ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
}
}
void Task_Setup(void *pdata)
{
char *mg;
INT8U err;
pdata = pdata; /* Prevent compiler warning */
TaskStartDispInit(); /* Initialize the display */
Mode = 3 ;
PC_DispStr( 0, 3, " Mode: Setup ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
for (;;) {
mg = (char *)OSQPend(KeyQ[1],10,&err); /* apply for message */
if (err == OS_NO_ERR) {
/*if () == 0) {
PC_DispStr( 0, 3, " Mode: Capture ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
}*/
;
}
OSTimeDlyHMSM(0, 0, 0, 20); /* Wait one second */
PC_DispStr( 0, 3, " Mode: Setup ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -