OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3504|回复: 0

关于任务切换与调度的问题

[复制链接]

4

主题

8

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2019-5-28
在线时间
14 小时
发表于 2019-7-10 07:19:13 | 显示全部楼层 |阅读模式
最近需要做一个基于UCOSII的音乐播放器,使用战舰板载VS1053实现硬件解码,参考原子哥的裸机例程,自己直接将播放音乐作为一个任务,然后再添加其余的任务,但是后面添加的任务都没法得到运行。还有关于任务调度,我使用OSTimeDly()做任务调度延时,原子哥使用delay_ms(),为什么我用OSTimeDly程序会死在一个位置,当有多任务的时候也没法进行切换。希望懂的大佬能帮忙看看,谢谢。
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"                           
#include "lcd.h"  
#include "key.h"     
#include "usmart.h"
#include "malloc.h"
#include "sdio_sdcard.h"  
#include "w25qxx.h"   
#include "ff.h"  
#include "exfuns.h"   
#include "text.h"
#include "vs10xx.h"
#include "mp3player.h"       
#include <includes.h>

#define TASKA_PRIO              5      //è&#206;&#206;&#241;Aó&#197;&#207;è&#188;&#182;
#define STK_TASKA_SIZE          512    //è&#206;&#206;&#241;A&#182;&#209;&#213;&#187;′óD&#161;
OS_STK TASKA_STK[STK_TASKA_SIZE]; //è&#206;&#206;&#241;A&#182;&#209;&#213;&#187;
#define TASKB_PRIO              4      //è&#206;&#206;&#241;Bó&#197;&#207;è&#188;&#182;
#define STK_TASKB_SIZE          256    //è&#206;&#206;&#241;B&#182;&#209;&#213;&#187;′óD&#161;
OS_STK TASKB_STK[STK_TASKB_SIZE]; //è&#206;&#206;&#241;B&#182;&#209;&#213;&#187;
#define TASKC_PRIO              7      //è&#206;&#206;&#241;Có&#197;&#207;è&#188;&#182;
#define STK_TASKC_SIZE          64    //è&#206;&#206;&#241;C&#182;&#209;&#213;&#187;′óD&#161;
OS_STK TASKC_STK[STK_TASKC_SIZE]; //è&#206;&#206;&#241;C&#182;&#209;&#213;&#187;
OS_EVENT * KEYbox;   //′′&#189;¨&#207;&#251;&#207;¢óê&#207;&#228;
void TASKA(void *pdata)
{
        u32 cpu_sr;
        pdata=pdata;
        while(1)
        {
                 POINT_COLOR = BLACK;                       
                 mp3_play();               
     OSTimeDlyHMSM(0,0,0,20);       
};        
}
void TASKB(void *pdata)
{
        pdata=pdata;
        while(1)
        {
//                 Key_value=mp3_key();
//                if(!Key_value)
//                {
//     OSMboxPost(KEYbox,(void*)Key_value);       
//                }
//     OSTimeDly(10);               
        }
}
void TASKC(void *pdata)
{
        pdata=pdata;
        while(1)
        {
    LED1=!LED1;
    OSTimeDly(100);                       
        };
}
void TaskCreate(void)
{
        u32 cpu_sr;
//        KEYbox=OSMboxCreate((void*)0);
        OS_ENTER_CRITICAL();
        OSTaskCreate(TASKC,(void *)0,(OS_STK*)&TASKC_STK[STK_TASKC_SIZE-1],TASKC_PRIO);
  OSTaskCreate(TASKA,(void *)0,(OS_STK*)&TASKA_STK[STK_TASKA_SIZE-1],TASKA_PRIO);
//        OSTaskCreate(TASKB,(void *)0,(OS_STK*)&TASKB_STK[STK_TASKB_SIZE-1],TASKB_PRIO);
        OS_EXIT_CRITICAL();
}

main.c
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"                           
#include "lcd.h"  
#include "key.h"     
#include "usmart.h"
#include "malloc.h"
#include "sdio_sdcard.h"  
#include "w25qxx.h"   
#include "ff.h"  
#include "exfuns.h"   
#include "text.h"
#include "vs10xx.h"
#include "mp3player.h"       
#include <includes.h>
#include <taskcof.h>
/*****************************************************/
///////////////////////////////////////////////////////
/**************UCOSii_ò&#244;à&#214;2¥·&#197;&#198;÷**********************/
void system_init(void)
{
        delay_init();                      
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        uart_init(115200);                
        LED_Init();                                         
        KEY_Init();                                       
        LCD_Init();                                     
        W25QXX_Init();                               
        VS_Init();                                         
        my_mem_init(SRAMIN);               
        exfuns_init();                               
        f_mount(fs[0],"0:",1);                
        f_mount(fs[1],"1:",1);                
        POINT_COLOR=RED;      
        while(font_init())                                
        {            
                LCD_ShowString(30,50,200,16,16,"Font Error!");
                delay_ms(200);                                  
                LCD_Fill(30,50,240,66,WHITE);     
        }
}
int main(void)
{                
        system_init();
        OSInit();   
  TaskCreate();
        OSStart();       
}



















正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 22:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表