OpenEdv-开源电子网

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

我想用UcosIII做个让音乐播放9秒的程序,怎么做,一个按键启动播放,9秒后停止,再按还可以在播放9秒

[复制链接]

7

主题

27

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-9-5
在线时间
15 小时
发表于 2016-11-18 14:05:39 | 显示全部楼层 |阅读模式
13金钱
本帖最后由 ai602683692 于 2016-11-18 15:20 编辑

求救呀按两次Key3,key4就崩溃了,\template\default\common\header.htm
#include "includes.h
"#include "bell.h"        


#define START_TASK_PRIO                3
        
#define START_STK_SIZE                 64

OS_TCB StartTaskTCB;

CPU_STK START_TASK_STK[START_STK_SIZE];

void start_task(void *p_arg);


#define KEY_TASK_PRIO                4

#define KEY_STK_SIZE                 128

OS_TCB KeyTaskTCB;

CPU_STK KEY_TASK_STK[KEY_STK_SIZE];
void key_task(void *p_arg);


#define BELL_TASK_PRIO                10

#define BELL_STK_SIZE                 128

OS_TCB BellTaskTCB;

CPU_STK BELL_TASK_STK[BELL_STK_SIZE];
void bell_task(void *p_arg);


int main(void)
{
        OS_ERR err;
        CPU_SR_ALLOC();
          BSP_Init();

        
        OSInit(&err);               
        OS_CRITICAL_ENTER();
        
        OSTaskCreate((OS_TCB         * )&StartTaskTCB,               
                                 (CPU_CHAR        * )"start task",                 
                 (OS_TASK_PTR )start_task,                        
                 (void                * )0,                                       
                 (OS_PRIO          )START_TASK_PRIO,   
                 (CPU_STK   * )&START_TASK_STK[0],        
                 (CPU_STK_SIZE)START_STK_SIZE/10,        
                 (CPU_STK_SIZE)START_STK_SIZE,               
                 (OS_MSG_QTY  )0,                                
                 (OS_TICK          )0,                                
                 (void           * )0,                                
                 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
                 (OS_ERR         * )&err);                                
        OS_CRITICAL_EXIT();        
        OSStart(&err);
        while(1);
}

//¿aê¼èÎÎñoˉêy
void start_task(void *p_arg)
{
        OS_ERR err;
        CPU_SR_ALLOC();
        p_arg = p_arg;

        
        CPU_Init();
#if OS_CFG_STAT_TASK_EN > 0u
   OSStatTaskCPUUsageInit(&err);           
#endif
        
#ifdef CPU_CFG_INT_DIS_MEAS_EN               
    CPU_IntDisMeasMaxCurReset();        
#endif
        

        
        OS_CRITICAL_ENTER();        
        
                OSTaskCreate((OS_TCB         * )&KeyTaskTCB,        
        (CPU_CHAR        * )"key task",                 
                 (OS_TASK_PTR )key_task,                        
                 (void                * )0,                                       
                 (OS_PRIO          )KEY_TASK_PRIO,     
                 (CPU_STK   * )&KEY_TASK_STK[0],        
                 (CPU_STK_SIZE)KEY_STK_SIZE/10,        
                 (CPU_STK_SIZE)KEY_STK_SIZE,               
                 (OS_MSG_QTY  )0,                                       
                 (OS_TICK          )0,                                       
                 (void           * )0,                                       
                 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
                 (OS_ERR         * )&err);                                                
        
        OS_TaskSuspend((OS_TCB*)&StartTaskTCB,&err);                 
        OS_CRITICAL_EXIT();
}

void key_task(void *p_arg)
{
          u8 key;
                OS_ERR err;
           p_arg = p_arg;

while(1)
{

         key=KEY_Scan(0);
         
         switch(key)
                 {
                 case KEY3_PRES:
                         LED1=0;
                     OSTaskCreate((OS_TCB         * )&BellTaskTCB,        
               (CPU_CHAR        * )"bell task",                 
                 (OS_TASK_PTR )bell_task,                        
                 (void                * )0,                                       
                 (OS_PRIO          )BELL_TASK_PRIO,     
                 (CPU_STK   * )&BELL_TASK_STK[0],        
                 (CPU_STK_SIZE)BELL_STK_SIZE/10,        
                 (CPU_STK_SIZE)BELL_STK_SIZE,               
                 (OS_MSG_QTY  )0,                                       
                 (OS_TICK          )0,                                       
                 (void           * )0,                                       
                 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
                 (OS_ERR         * )&err);
          break;                                                                 
                  
                 case KEY4_PRES :
                        
                 LED1=1;
                                 
                 OSTaskDel((OS_TCB         * )&BellTaskTCB,&err);
                 
                 break;
                                         
                 case KEY5_PRES:
                            OS_TaskSuspend((OS_TCB*)&BellTaskTCB,&err);               
                 break;
                 case KEY6_PRES:
                            OS_TaskResume((OS_TCB*)&BellTaskTCB,&err);               
                 break;
                 
                  default :
      break;
         
         }

  delay_ms(30);
}
}

void bell_task(void *p_arg)
{

        p_arg = p_arg;
                  
        while(1)
        {               
         
                bmp3_play();
         
        }
        
  }                                          




让反思成为习惯!!!!!!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2016-11-18 14:07:28 | 显示全部楼层
不调试谁知道呀~。。。
回复

使用道具 举报

7

主题

27

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-9-5
在线时间
15 小时
 楼主| 发表于 2016-11-18 15:10:25 | 显示全部楼层
小陀螺爱炒蛋 发表于 2016-11-18 14:07
不调试谁知道呀~。。。

第一次跑系统,调的想哭了!!
让反思成为习惯!!!!!!!
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2016-11-18 20:54:34 | 显示全部楼层
本帖最后由 来俩不甜的 于 2016-11-18 20:55 编辑

一定要把任务删除、挂起吗。跑着呗,阻塞等待按键信号量,获得就播放,没获得就等着。搞的那么复杂呢删任务的时候把堆栈清一下,不一定管用,但看起来严谨些。
我有故事,你有酒吗
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-11-21 22:36:52 | 显示全部楼层
搞个全局变量都搞定了。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 21:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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