打印
[应用相关]

【安富莱——DSP教程】第45章 示波器设计—系统框架

[复制链接]
1000|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小浣熊|  楼主 | 2015-7-24 17:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

第45章  示波器设计—系统框架
    本章节主要是对示波器的系统框架做一个简单的介绍,后面会推出示波器的详细设计分析。示波器的的源码注释已经很详细,对框架有个了解之后看源码即可。
    45.1 ucos-iii任务分配
    45.2 示波器核心任务
    45.3 DAC实现方波的输出
    45.4 ADC实现数据的采集
    45.5 总结
沙发
小浣熊|  楼主 | 2015-7-24 17:34 | 只看该作者
45.1  uCOS-III任务分配
    主要创建了如下6个用户任务:
l  AppTaskStart----启动任务
l  AppTaskGUIUpdate---界面截图任务
l  AppTaskCOM----留待以后升级使用
l  AppTaskUserIF---留在以后升级使用
l  AppTaskGUI------emWin任务
l  AppTaskGUIRefresh---Led闪烁任务
下面主要对启动任务,界面截图任务,emWin任务,Led闪烁任务做一个介绍。

使用特权

评论回复
板凳
小浣熊|  楼主 | 2015-7-24 17:35 | 只看该作者
45.1.1  AppTaskStart—启动任务
启动任务用于硬件驱动的初始化,系统滴答时钟的初始化以及触摸扫描和按键扫描,代码如下:
/*
*********************************************************************************************************
*    函 数 名: AppTaskStart
*    功能说明: 这是一个启动任务,在多任务系统启动后,必须初始化滴答计数器(在BSP_Init中实现)
*    形    参: p_arg 是在创建该任务时传递的形参
*    返 回 值: 无
     优 先 级: 2
*********************************************************************************************************
*/
static  void  AppTaskStart (void *p_arg)
{
     OS_ERR   err;
     uint8_t  ucCount = 0;
   
     (void)p_arg;
     bsp_Init();
    CPU_Init();
     BSP_Tick_Init();                       

#if OS_CFG_STAT_TASK_EN > 0u
     OSStatTaskCPUUsageInit(&err);  
#endif

#ifdef CPU_CFG_INT_DIS_MEAS_EN
    CPU_IntDisMeasMaxCurReset();
#endif

    AppObjCreate();                                          
    AppTaskCreate();                                          
    while (1)
     {                                                
         /* 1ms一次触摸扫描 */
         TOUCH_Scan();
        
         /* 5ms一次按键检测 */
         ucCount++;
         if(ucCount == 5)
         {
              ucCount = 0;
              bsp_KeyScan();
         }
         BSP_OS_TimeDlyMs(1);
    }
}

使用特权

评论回复
地板
小浣熊|  楼主 | 2015-7-24 17:35 | 只看该作者
45.1.2  AppTaskGUIUpdate—界面截图任务
界面截图任务主要用于界面的截图并将图片以BMP格式保存到SD卡中。
/*
*********************************************************************************************************
*    函 数 名: AppTaskGUIUpdate
*    功能说明: 此任务主要实现截图功能.   
*    形    参: p_arg 是在创建该任务时传递的形参
*    返 回 值: 无
     优 先 级: 3
*********************************************************************************************************
*/
static void AppTaskGUIUpdate(void *p_arg)
{
     OS_ERR      err;
     uint8_t       Pic_Name = 0;
     char buf[20];
     CPU_BOOLEAN SemFlag;

     (void)p_arg;
         
     while(1)
     {   
         SemFlag = BSP_OS_SemWait(&SEM_SYNCH, 0);
        
         if(SemFlag == DEF_OK)
         {   
              sprintf(buf,"0:/PicSave/%d.bmp",Pic_Name);
              OSSchedLock(&err);
            
              /* 如果SD卡中没有PicSave文件,会进行创建 */
              result = f_mkdir("0:/PicSave");
              /* 创建截图 */
              result = f_open(&file,buf, FA_WRITE|FA_CREATE_ALWAYS);
              /* 向SD卡绘制BMP图片 */
              GUI_BMP_Serialize(_WriteByte2File, &file);
            
              /* 创建完成后关闭file */
             result = f_close(&file);
            
              OSSchedUnlock(&err);
              Pic_Name++;      
         }                                                                                                                  
     }  
}

使用特权

评论回复
5
小浣熊|  楼主 | 2015-7-24 17:35 | 只看该作者
45.1.3  AppTaskGUI—GUI任务
这个任务是示波器设计中最重要的任务,代码如下:
/*
*********************************************************************************************************
*    函 数 名: AppTaskGUI
*    功能说明: GUI任务                           
*    形    参:p_arg 是在创建该任务时传递的形参
*    返 回 值: 无
*   优 先 级:OS_CFG_PRIO_MAX - 4u
*********************************************************************************************************
*/
static void AppTaskGUI(void *p_arg)
{
    (void)p_arg;       /* 避免编译器告警 */
        
     while (1)
     {
         MainTask();                     
     }
}

使用特权

评论回复
6
小浣熊|  楼主 | 2015-7-24 17:35 | 只看该作者
45.1.4  AppTaskGUIRefresh—Led闪烁任务
这个任务主要通过LED的闪烁来指示系统的运行,代码如下:
/*
*********************************************************************************************************
*    函 数 名: AppTaskGUIRefresh
*    功能说明: Led闪烁任务,表示系统运行                  
*    形    参: p_arg 是在创建该任务时传递的形参
*    返 回 值: 无
*   优 先 级: OS_CFG_PRIO_MAX - 5u
*********************************************************************************************************
*/
static void AppTaskGUIRefresh(void *p_arg)
{
     (void)p_arg;       /* 避免编译器告警 */
         
     while (1)
     {
        BSP_OS_TimeDlyMs(200);
         bsp_LedToggle(2);
    }                           
}

使用特权

评论回复
7
小浣熊|  楼主 | 2015-7-24 17:35 | 只看该作者
45.1.5  其余任务
剩下的两个任务留着以后升级使用。
/*
*********************************************************************************************************
*    函 数 名: AppTaskCom
*    功能说明: 留待以后使用     
*    形    参:p_arg 是在创建该任务时传递的形参
*    返 回 值: 无
     优 先 级:3
*********************************************************************************************************
*/
static void AppTaskCOM(void *p_arg)
{   
   (void)p_arg;
      
     while(1)
     {   
         /* 100s执行一次 */
         BSP_OS_TimeDlyMs(1000000);
     }                                                                                                     
}

/*
*********************************************************************************************************
*    函 数 名: AppTaskUserIF
*    功能说明: 留待以后使用。
*    形    参: p_arg 是在创建该任务时传递的形参
*    返 回 值: 无
     优 先 级: 2
*********************************************************************************************************
*/
static void AppTaskUserIF(void *p_arg)
{
     (void)p_arg;  /* 避免编译器报警 */

     while (1)
     {  
         /* 100s执行一次 */
        BSP_OS_TimeDlyMs(1000000);      
     }
}

使用特权

评论回复
8
zh113214| | 2015-7-24 22:40 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

528

主题

2095

帖子

8

粉丝