OpenEdv-开源电子网

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

uCOS-II 求解?

[复制链接]

14

主题

67

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2011-8-8
在线时间
15 小时
发表于 2011-8-30 08:41:39 | 显示全部楼层 |阅读模式

试玩了下uCOS-II ,但是不晓得是什么原因,每次都只进行一次任务调度就跑死了,希望指点一下~~~~~~~~~~
#include "includes.h" 

 
//设置任务堆栈大小
#define LED_STK_SIZE     64
#define KEY_STK_SIZE     64
#define START_STK_SIZE   128

//设置任务优先级
#define LED_TASK_Prio      6
#define KEY_TASK_Prio       5
#define START_TASK_Prio     14

//任务堆栈
OS_STK  TASK_KEY_STK[KEY_STK_SIZE];
OS_STK  TASK_LED_STK[LED_STK_SIZE];
OS_STK  TASK_START_STK[START_STK_SIZE];

OS_EVENT *Sem;//定义信号量指针

//任务申明
void TaskStart(void *pdata);
void TaskLed(void *pdata);
void TaskKEY(void *pdata);

//系统时钟配置函数
void SysTick_Configuration(void);

     
int main(void)
{       

 OSInit();
 OSTaskCreate( TaskStart, //task pointer
     (void *)0, //parameter
     (OS_STK *)&TASK_START_STK[START_STK_SIZE-1], //task stack top pointer
     START_TASK_Prio ); //task priority 
 OSStart();
 return 0;   
}

//开始任务
void TaskStart(void * pdata)
{
 pdata = pdata;
 Stm32_Clock_Init(9); //系统时钟设置
 delay_init(72);      //延时初始化
 uart_init(72,9600);  //串口初始化为9600
 LED_Init();      //初始化与LED连接的硬件接口 
 KEY_Init();
 LED0=1;
 LED1=1;
 SysTick_Configuration();
 OS_ENTER_CRITICAL();   //关中断
 OSStatInit(); 
 OSTaskCreate(TaskKEY, (void * )0, (OS_STK *)&TASK_KEY_STK[KEY_STK_SIZE-1], KEY_TASK_Prio);
 
 OSTaskSuspend(OS_PRIO_SELF); //挂起任务本身
 //OSTaskDel(OS_PRIO_SELF); //删除任务本身
 OS_EXIT_CRITICAL();  //开中断
}

//控制DS0的亮灭.
void TaskLed(void *pdata)
{
//    INT8U err;
   pdata = pdata;
// while(1)
 //{ 
     OSSchedLock();   //禁止任务调度
  //OSSemPend(Sem,0,&err); //等待信号量
  LED0=0;
 // OSTimeDly(100);
  OSTaskDel(OS_PRIO_SELF); //删除任务本身
 // OSTimeDlyResume(KEY_TASK_Prio);//取消任务延时 
     OSSchedUnlock(); //开锁
 //}
  
}

//按键任务.
void TaskKEY(void *pdata)

 INT8U key;
 pdata = pdata;  
 while(1)
 {  
     OSSchedLock();   //禁止任务调度
     key=KEY_Scan();
  LED0=1;
  if(key==1)
  {
      key=0; 
   OSTaskCreate(TaskLed, (void * )0, (OS_STK *)&TASK_LED_STK[LED_STK_SIZE-1], LED_TASK_Prio);
     // Sem=OSSemCreate(0);//创建信号量
  // OSSemPost(Sem);//发送信号量
  // OSTimeDly(100);
  }
  LED1=!LED1;
  OSTimeDly(100);
 // OSTimeDlyHMSM(0,0,0,100);
     OSSchedUnlock(); //开锁 
                  
    
 }
 
}
  
//系统时钟中断服务函数
void SysTick_Handler(void)
{
 OS_ENTER_CRITICAL(); /* Tell uC/OS-II that we are starting an ISR  */
    OSIntNesting++;
    OS_EXIT_CRITICAL();

    OSTimeTick();        /* Call uC/OS-II's OSTimeTick()               */
    OSIntExit();         /* Tell uC/OS-II that we are leaving the ISR  */
}

//系统时钟配置,设计1ms产生一次中断
void SysTick_Configuration(void)
{
  SysTick->CTRL&=~(1<<2);//SYSTICK使用外部时钟源
 SysTick->CTRL|=1<<1;   //开启SYSTICK中断
 SysTick->LOAD=9000;    //产生1ms中断
 //bit2清空,选择外部时钟  HCLK/8
 MY_NVIC_Init(3,3,SystemHandler_SysTick,2);//组2,最低优先级
 SysTick->CTRL|=1<<0;   //开启SYSTICK
}

                                                                                                                                                                                                                                                                                        

上帝之所以创造指纹,是因为他想让人们知道:其实,每个人都有伤痕。?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-8-30 08:56:45 | 显示全部楼层
时钟配置应该放到OS初始化之前吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

14

主题

67

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2011-8-8
在线时间
15 小时
 楼主| 发表于 2011-9-6 13:48:32 | 显示全部楼层
呵呵,貌似也没啥反应,看来uCOS-II的路还肯蛮漫长的啊
上帝之所以创造指纹,是因为他想让人们知道:其实,每个人都有伤痕。?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2011-9-6 20:27:41 | 显示全部楼层
呵呵,直接用我们的模板吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

14

主题

67

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
230
金钱
230
注册时间
2011-8-8
在线时间
15 小时
 楼主| 发表于 2011-9-8 22:36:14 | 显示全部楼层
呵呵,原子哥,有改良版的模板不,分享下下啊
上帝之所以创造指纹,是因为他想让人们知道:其实,每个人都有伤痕。?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 23:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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