⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ucos_dso.c

📁 USB接口虚拟示波器软件软件工程
💻 C
📖 第 1 页 / 共 2 页
字号:
                    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 + -