Arm MQX Lite LED任务不工作

Arm MQX Lite LED任务不工作,arm,codewarrior,cortex-m,mqx,Arm,Codewarrior,Cortex M,Mqx,我正在使用飞思卡尔公司的FRDM-KL25Z arm板,我已经成功地使用CodeWarrior IDE编写了LED闪烁程序。我还能够运行飞思卡尔启动工具包中的所有示例程序。 现在我正在编写一个MQX Lite程序,使用MQX任务闪烁LED。 我做了三个任务,一个用于初始化,另两个用于使用任务闪烁板上的LED。 task_template_list.c中的任务声明如下 #define TASK_TEMPLATE_LIST_END {0, 0, 0, 0, 0, 0, 0} /*

我正在使用飞思卡尔公司的FRDM-KL25Z arm板,我已经成功地使用CodeWarrior IDE编写了LED闪烁程序。我还能够运行飞思卡尔启动工具包中的所有示例程序。 现在我正在编写一个MQX Lite程序,使用MQX任务闪烁LED。 我做了三个任务,一个用于初始化,另两个用于使用任务闪烁板上的LED。 task_template_list.c中的任务声明如下

#define TASK_TEMPLATE_LIST_END         {0, 0, 0, 0, 0, 0, 0}


/* MQX task template list */
const TASK_TEMPLATE_STRUCT MQX_template_list[] =
{
  /* Task: InitTask */
  {
  /* Task number                      */  INITTASK_TASK,
  /* Entry point                      */  (TASK_FPTR)InitTask,
  /* Stack size                       */  INITTASK_TASK_STACK_SIZE,
  /* Task priority                    */  8U,
  /* Task name                        */  "inittask",
  /* Task attributes                  */  (MQX_AUTO_START_TASK),
  /* Task parameter                   */  (uint32_t)(0)
  },
  /* Task: LEDTask */
  {
  /* Task number                      */  LEDTASK_TASK,
  /* Entry point                      */  (TASK_FPTR)LEDTask,
  /* Stack size                       */  LEDTASK_TASK_STACK_SIZE,
  /* Task priority                    */  10U,
  /* Task name                        */  "ledtask",
  /* Task attributes                  */  (0),
  /* Task parameter                   */  (uint32_t)(0)
  },
  /* Task: GR_LED_ON */
  {
  /* Task number                      */  GR_LED_ON_TASK,
  /* Entry point                      */  (TASK_FPTR)GR_LED_ON,
  /* Stack size                       */  GR_LED_ON_TASK_STACK_SIZE,
  /* Task priority                    */  9U,
  /* Task name                        */  "gr_led_on",
  /* Task attributes                  */  (0),
  /* Task parameter                   */  (uint32_t)(0)
  },
  TASK_TEMPLATE_LIST_END
};
现在在mqx_tasks.c中,我编写了如下代码

/* ###################################################################
**     Filename    : mqx_tasks.c
**     Project     : ProcessorExpert
**     Processor   : MKL25Z128VLK4
**     Component   : Events
**     Version     : Driver 01.00
**     Compiler    : GNU C Compiler
**     Date/Time   : 2013-05-27, 17:44, # CodeGen: 0
**     Abstract    :
**         This is user's event module.
**         Put your event handler code here.
**     Settings    :
**     Contents    :
**         InitTask - void InitTask(uint32_t task_init_data);
**
** ###################################################################*/
/*!
** @file mqx_tasks.c
** @version 01.00
** @brief
**         This is user's event module.
**         Put your event handler code here.
*/        
/*!
**  @addtogroup mqx_tasks_module mqx_tasks module documentation
**  @{
*/        
/* MODULE mqx_tasks */
#include "Cpu.h"
#include "Events.h"
#include "mqx_tasks.h"
#ifdef __cplusplus
extern "C" {
#endif
/* User includes (#include below this line is not maintained by Processor Expert) */
#define RED_LED_LOC (1<<18)
#define GREEN_LED_LOC (1<<19)
#define BLUE_LED_LOC (1<<1)
#define RED_LED_OFF  GPIOB_PSOR = RED_LED_LOC
#define RED_LED_ON   GPIOB_PCOR = RED_LED_LOC
void Delay(int Ticks)
{
  int i;

  for(i=0;i<Ticks;i++)
  {
  }

}
/*
** ===================================================================
**     Event       :  InitTask (module mqx_tasks)
**
**     Component   :  Task1 [MQXLite_task]
**     Description :
**         MQX task routine. The routine is generated into mqx_tasks.c
**         file.
**     Parameters  :
**         NAME            - DESCRIPTION
**         task_init_data  -
**     Returns     : Nothing
** ===================================================================
*/
void InitTask(uint32_t task_init_data)
{
  //First order of business is to enable the Clocks to the ports!
  SIM_SCGC5 |= SIM_SCGC5_PORTB_MASK | SIM_SCGC5_PORTD_MASK;


  //Now,  setup the port mux for GPIO! See Page 163 and 183 of KL25 Sub-Family Reference Manual, Rev. 3, September 2012
  PORTB_PCR18 = PORT_PCR_MUX(1) | PORT_PCR_DSE_MASK;
  PORTB_PCR19 = PORT_PCR_MUX(1) | PORT_PCR_DSE_MASK;
  PORTD_PCR1 = PORT_PCR_MUX(1) | PORT_PCR_DSE_MASK;


  //Set the GPIO to outputs in the data direction register
  //See Page 778 of KL25 Sub-Family Reference Manual, Rev. 3, September 2012
  GPIOB_PDDR |=  RED_LED_LOC | GREEN_LED_LOC;
  GPIOD_PDDR |=  BLUE_LED_LOC;
  RED_LED_OFF;
  /* _task_id task_id;
  task_id=_task_create_at(0, LEDTASK_TASK, 0, LEDTask_task_stack, LEDTASK_TASK_STACK_SIZE);
  if(task_id=MQX_NULL_TASK_ID){
  printf("\n can not create led task");

  }else{
  printf("\n LED task created");
  }
  task_id=_task_create_at(0, GR_LED_ON_TASK, 0, GR_LED_ON_task_stack, GR_LED_ON_TASK_STACK_SIZE);
  if(task_id=MQX_NULL_TASK_ID){
  printf("\n can not create led task");

  }else{
  printf("\n LED task created");
  }*/
  _task_create_at(0, GR_LED_ON_TASK, 0, GR_LED_ON_task_stack, GR_LED_ON_TASK_STACK_SIZE);
  _task_create_at(0, LEDTASK_TASK, 0, LEDTask_task_stack, LEDTASK_TASK_STACK_SIZE);


}
/*
** ===================================================================
**     Event       :  LEDTask (module mqx_tasks)
**
**     Component   :  Task2 [MQXLite_task]
**     Description :
**         MQX task routine. The routine is generated into mqx_tasks.c
**         file.
**     Parameters  :
**         NAME            - DESCRIPTION
**         task_init_data  -
**     Returns     : Nothing
** ===================================================================
*/
void LEDTask(uint32_t task_init_data)
{
  int value=0;
  while(TRUE)
  {
  //The dedicated GPIO Set and clear registers make bit banging easier.  Just write to the port what bits
  //you want set or cleared.   The or-ing / not-anding  is done in *hardware*
  //see pages 775 - 778  of KL25 Sub-Family Reference Manual, Rev. 3, September 2012

  // RED_LED_OFF;
  // Delay(1000000);

  GPIOB_PSOR = GREEN_LED_LOC;
  Delay(1000000);

  GPIOD_PSOR = BLUE_LED_LOC;
  Delay(1000000);

  // RED_LED_ON;
  // Delay(1000000);

  GPIOB_PCOR = GREEN_LED_LOC;
  Delay(1000000);

  GPIOD_PCOR = BLUE_LED_LOC;
  Delay(1000000);
  value=value^1;
  }
}
/*
** ===================================================================
**     Event       :  GR_LED_ON (module mqx_tasks)
**
**     Component   :  Task3 [MQXLite_task]
**     Description :
**         MQX task routine. The routine is generated into mqx_tasks.c
**         file.
**     Parameters  :
**         NAME            - DESCRIPTION
**         task_init_data  -
**     Returns     : Nothing
** ===================================================================
*/
void GR_LED_ON(uint32_t task_init_data)
{
  int value=0;
  while(TRUE)
  {
  //The dedicated GPIO Set and clear registers make bit banging easier.  Just write to the port what bits
  //you want set or cleared.   The or-ing / not-anding  is done in *hardware*
  //see pages 775 - 778  of KL25 Sub-Family Reference Manual, Rev. 3, September 2012



  /* GPIOB_PSOR = GREEN_LED_LOC;
  Delay(1000000);

  GPIOD_PSOR = BLUE_LED_LOC;
  Delay(1000000);*/

  RED_LED_ON;
  Delay(1000000);

  /* GPIOB_PCOR = GREEN_LED_LOC;
  Delay(1000000);

  GPIOD_PCOR = BLUE_LED_LOC;
  Delay(1000000);*/

  RED_LED_OFF;
     Delay(1000000);
  value=value^1;
  }

}
/* END mqx_tasks */
#ifdef __cplusplus
}  /* extern "C" */
#endif
/*!
** @}
*/
/*
** ###################################################################
**
**     This file was created by Processor Expert 10.2 [05.06]
**     for the Freescale Kinetis series of microcontrollers.
**
** ###################################################################
*/
/*###################################################################
**文件名:mqx_tasks.c
**项目:ProcessorExpert
**处理器:MKL25Z128VLK4
**组成部分:事件
**版本:Driver 01.00
**编译器:GNUC编译器
**日期/时间:2013-05-2717:44
**摘要:
**这是用户的事件模块。
**将事件处理程序代码放在这里。
**设置:
**内容:
**InitTask-void InitTask(uint32任务初始化数据);
**
** ###################################################################*/
/*!
**@file mqx_tasks.c
**@version 01.00
**@brief
**这是用户的事件模块。
**将事件处理程序代码放在这里。
*/        
/*!
**@addtogroup mqx_tasks_模块mqx_tasks模块文档
**  @{
*/        
/*模块mqx_任务*/
#包括“Cpu.h”
#包括“Events.h”
#包括“mqx_tasks.h”
#ifdef_uucplusplus
外部“C”{
#恩迪夫
/*用户包含(#此行下方的包含不由处理器专家维护)*/

#定义RED_LED_LOC(1您的Delay()函数犯了一个致命的错误! 您在Delay()中编写的是一个占用所有CPU的活动循环, 没有为优先级较低的线程保留CPU时间

请使用_time_delay()(MQX API)而不是delay()函数,然后一切都应该正常