📄 ucos_dso.c
字号:
if(select>3)
select=3;
break;
case GUI_KEY_UP:
select-=2;
if(select<0) select=0;
break;
case GUI_KEY_DOWN:
select+=2;
if(select>3)
select=3;
break;
case GUI_KEY_ENTER:
if(select==0)
sel1=1;
if(select==2)
sel1=0;
if(select==1)
sel2=1;
if(select==3)
sel2=0;
break;
case GUI_KEY_ESCAPE:
break;
}
}
}
}
//wait message fifo
//
void task2 (void * pdata)
{ INT8U key;
INT8U return_code = OS_NO_ERR;
INT8U i,select;
// msg * in;
int site;
GUI_RECT rect;
site=disHight/2;
while( (key = (INT8U )OSMboxPend(mailbox3, 0, &return_code))!=DSO_RUN);
DrawDSOdeskTop(site);
while(1)
{
for(i=0;i<3;i++)
{ rect.x0=button_rect[i].x0+2;
rect.y0=button_rect[i].y0+10;
rect.x1=button_rect[i].x1-1;
rect.y1=158;
GUI_ClearRect(button_rect[i].x0+1,button_rect[i].y0+1,button_rect[i].x1-1,button_rect[i].y1-1);
GUI_DispStringAt(button_key_name[i],button_rect[i].x0+2,button_rect[i].y0+2);
GUI_DispStringInRect(button_name[i],&rect,GUI_TA_LEFT);
GUI_DrawBitmap(DSOBmp[i],rect.x0+35,button_rect[i].y0+1);
if(i==select)
GUI_InvertRect(button_rect[i].x0+1,button_rect[i].y0+1,button_rect[i].x1-1,button_rect[i].y1-1);
}
OSMboxPost(mailbox4,(void*)LCD_DISP);
key = (INT8U )OSMboxPend(mailbox1, 0, &return_code);
//in=(msg * ) OSMboxPend(mailbox1, 0, &return_code);
// in=(msg *)OSQPend(Fifo, 0, return_code);
alt_ucosii_check_return_code(return_code);
// if(in->type==KEY_MSG)
{
switch(key)
{ case KEY_F1:
select=0;
break;
case KEY_F2:
select=1;
break;
case KEY_F3:
select=2;
break;
case GUI_KEY_LEFT:
break;
case GUI_KEY_RIGHT:
break;
case GUI_KEY_UP:
if(select==0){
site-=3;
if(site<3)
site=3;
Draw_Gridding(XOFFSET,YOFFSET,site);
}
break;
case GUI_KEY_DOWN:
if(select==0){ site+=3;
if(site>(disHight-3))
site=disHight-3;
Draw_Gridding(XOFFSET,YOFFSET,site);
}
break;
case GUI_KEY_ENTER:
if(select==1)
{ OSMboxPost(setup_dialog_mailbox,(void*)RUN_SETUP_DIALOG);
while( (key = (INT8U )OSMboxPend(mailbox3, 0, &return_code))!=DSO_RUN);
DrawDSOdeskTop(site);
// select=0;
}
break;
case GUI_KEY_ESCAPE:
OSMboxPost(mailbox2,(void*)PROGRAM_EXIT);
while( (key = (INT8U )OSMboxPend(mailbox3, 0, &return_code))!=DSO_RUN);
DrawDSOdeskTop(site);
select=0;
break;
}
}
}
}
void task1(void* pdata)
{
static INT8U select;
INT8U i;
// msg * in;
INT8U return_code = OS_NO_ERR;
INT8U key;
GUI_RECT rect;
select=0;
GUI_Init();
DrawDeskTop();
while (1)
{ //DispDeskTOP(select);
for(i=0;i<4;i++)
{ rect.x0=xy[i][0]+12;rect.y0=xy[i][1];
rect.x1=xy[i][0]+75;rect.y1=xy[i][1]+12;
GUI_ClearRect(rect.x0,rect.y0,rect.x1,rect.y1);
if(i==select)
{// GUI_FillRectEx(&rect);
// GUI_SetTextMode(GUI_TEXTMODE_REV);
GUI_DispStringInRect(str[i],&rect,GUI_TA_CENTER);
GUI_InvertRect(rect.x0,rect.y0,rect.x1,rect.y1);
}
else
{
GUI_DispStringInRect(str[i],&rect,GUI_TA_CENTER);
}
}
OSMboxPost(mailbox4,(void*)LCD_DISP);
key = (INT8U )OSMboxPend(mailbox1, 0, &return_code);
// in=(msg *) OSMboxPend(mailbox1, 0, &return_code);
// alt_ucosii_check_return_code(return_code);
//in=(msg *) OSQPend(Fifo, 0, return_code);
alt_ucosii_check_return_code(return_code);
// if(in->type==KEY_MSG)
{
switch (key)
// switch(in->value)
{ case GUI_KEY_LEFT:
if(select==0) select=3;
else
select--;
break;
case GUI_KEY_RIGHT:
if(select==3) select=0;
else
select++;
break;
case GUI_KEY_UP:
if(select==0) select=0;
else
if(select==1) select=1;
else
select-=2;
break;
case GUI_KEY_DOWN:
select+=2;
if(select>3)
select=3;
break;
case GUI_KEY_ENTER:
if(select==0) //run data sample
OSMboxPost(mailbox3,(void*)DSO_RUN);
// if(select==2)
// OSMboxPost(setup_dialog_mailbox,(void*)RUN_SETUP_DIALOG);
while((key = (INT8U )OSMboxPend(mailbox2, 0, &return_code))!=PROGRAM_EXIT);
DrawDeskTop();
break;
case GUI_KEY_ESCAPE:
break;
}
}
}
}
void Keyboard_interrupt_irq(void* base, alt_u32 id)
{
OSIntEnter();
INT8U key=0;
// msg dat;
INT32U status = IORD_ALTERA_AVALON_SPI_STATUS(base);
if ((status & ALTERA_AVALON_SPI_STATUS_RRDY_MSK) != 0)
{ INT32U rxdata = IORD_ALTERA_AVALON_SPI_RXDATA(base);
switch (rxdata)
{case 0x41:
key=GUI_KEY_LEFT;
break;
case 0x81:
key=GUI_KEY_RIGHT;
break;
case 0x21:
key=GUI_KEY_UP;
break;
case 0x11:
key=GUI_KEY_DOWN;
break;
case 0x88:
key=GUI_KEY_ENTER;
break;
case 0x18:
key=GUI_KEY_ESCAPE;
break;
case 0x14:
key=KEY_F1;
break;
case 0x28:
key=KEY_F2;
break;
case 0x48:
key=KEY_F3;
break;
}
// dat.type=KEY_MSG;
// dat.value=key;
printf("key=0x%x\n" ,key);
OSMboxPost(mailbox1,(void*)key); /* Post to Mailbox4 */
// OSQPost(Fifo, (void*)&dat);
//GUI_StoreKey(key);
}
OSIntExit();
}
void KeyboardInit(void * base,alt_u32 irq)
{
IOWR_ALTERA_AVALON_SPI_CONTROL(base, ALTERA_AVALON_SPI_CONTROL_IRRDY_MSK);
alt_irq_register (irq,base,Keyboard_interrupt_irq); //register a/d interrupt
}
/* The following task is used to initialize the operating system data structures
* and to create the task. It also kicks off the passing of messages by
* "Posting" a message to Mailbox 1. The task deletes itself as it is not needed
* after initialization is complete.
*/
void initialize_task(void* pdata)
{
INT8U return_code = OS_NO_ERR;
//INT32U mbox1_contents = 0;
/*create os data structures */
initOSDataStructs();
KeyboardInit(SPI_BASE,SPI_IRQ);
/* create the tasks */
initCreateTasks();
return_code = OSTaskDel(OS_PRIO_SELF);
alt_ucosii_check_return_code(return_code);
while (1);
}
/* Main creates a single task and starts task switching
*/
int main (int argc, char* argv[], char* envp[])
{
INT8U return_code = OS_NO_ERR;
return_code = OSTaskCreateExt(initialize_task,
NULL,
&initialize_task_stk[TASK_STACKSIZE],
INITIALIZE_TASK_PRIORITY,
INITIALIZE_TASK_PRIORITY,
initialize_task_stk,
TASK_STACKSIZE,
NULL,
0);
alt_ucosii_check_return_code(return_code);
OSStart();
return 0;
}
/* This function simply creates the three Mailboxes
*/
int initOSDataStructs(void)
{
mailbox1 = OSMboxCreate((void *)NULL);
mailbox2 = OSMboxCreate((void *)NULL);
mailbox3 = OSMboxCreate((void *)NULL);
mailbox4 = OSMboxCreate((void *)NULL);
setup_dialog_mailbox= OSMboxCreate((void *)NULL);
//Fifo = OSQCreate(&FifoTbl[0], MSG_QUEUE_SIZE);
return 0;
}
/*This function creates three tasks
*/
int initCreateTasks(void)
{
INT8U return_code = OS_NO_ERR;
return_code = OSTaskCreateExt(task1,
NULL,
&task1_stk[TASK_STACKSIZE],
TASK1_PRIORITY,
TASK1_PRIORITY,
task1_stk,
TASK_STACKSIZE,
NULL,
0);
alt_ucosii_check_return_code(return_code);
return_code = OSTaskCreateExt(task2,
NULL,
&task2_stk[TASK_STACKSIZE],
TASK2_PRIORITY,
TASK2_PRIORITY,
task2_stk,
TASK_STACKSIZE,
NULL,
0);
alt_ucosii_check_return_code(return_code);
return_code = OSTaskCreateExt(task3,
NULL,
&task3_stk[TASK_STACKSIZE],
TASK3_PRIORITY,
TASK3_PRIORITY,
task3_stk,
TASK_STACKSIZE,
NULL,
0);
alt_ucosii_check_return_code(return_code);
return_code = OSTaskCreateExt(task4,
NULL,
&task4_stk[TASK_STACKSIZE],
TASK4_PRIORITY,
TASK4_PRIORITY,
task4_stk,
TASK_STACKSIZE,
NULL,
0);
alt_ucosii_check_return_code(return_code);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -