alexant的笔记 https://bbs.21ic.com/?72205 [收藏] [复制] [RSS] 这里记录的是我上网时发现的一些比较好的文章和比较值得记录的知识,希望对大家有点帮助。

日志

原创:我在项目中的FreeRTOS源码-main.c

已有 2460 次阅读2007-3-21 20:20 |系统分类:ARM

//  FreeRTOS.org V4.0.2 - Copyright (C) 2003-2006 Richard Barry.
/*
 5月30日 
  1:30  内核调试成功。之前一直不工作是由于startup.S中的初始化参数设置有问题。
    注意软中断vPortYieldProcessor。
  3:10  FreeRTOS串口驱动调试成功,之前不工作的原因是自己已经把硬件初始化
    程序移到了startup.S中,而没有将GPIO相应管脚设置为串口;波特率设置
    也要作一点改动。为了串口稳定工作,建议初始化时缓冲区设置不少于128字节。


*/


// Scheduler includes.
#include "FreeRTOS.h"
#include "task.h"
#include "lpc214x.h"


// Demo application includes.
#include "serial.h"
#include "rtc.h"


#include "lcd_hardware.h"
#include "lcd_text.h"


#define LED_RED(b)   SET_PIN1(30,b)
#define LED_GREEN(b)  SET_PIN1(31,b)


#define Task_Uart_PRIO  tskIDLE_PRIORITY+1
#define Task_RF_PRIO  tskIDLE_PRIORITY+2
#define Task_GUI_PRIO  tskIDLE_PRIORITY+1


xTaskHandle RF_Handle,
   Uart_Handle,
   GUI_Handle;


/*----------------------idle hook----------------------------*/
void vApplicationIdleHook( void )
{
 PCON  = 0x1;
}


void Task_Uart( void *pvParameters )
{
 /* The parameters are not used in this function. */
 ( void ) pvParameters;
 signed portCHAR cByteRxed=0;


 for(;;)
 {
  if(xSerialGetChar(&cByteRxed, 0))
  {
   switch(cByteRxed)
   {
    case 'l': 
       break;   
    case 'd': 


       break;
    case 'q': 


       break;
    case 'w': 
       
       break;   
    case 'r': 


       break;
    case 'f': 


       break;
       
    default:   rprintf("unknown command:%x\r\n",cByteRxed);
       break;
   }    
  }
 }



void Task_RF( void *pvParameters )
{
 /* The parameters are not used in this function. */
 ( void ) pvParameters;
 for(;;)
 {
  
  vTaskDelay(50);
 }
}



void Task_GUI( void *pvParameters )
{
 /* The parameters are not used in this function. */
 ( void ) pvParameters;
 lcd_init();


 for(;;)
 {
  vTaskDelay(50);
  lcd_printf( 0,4,  "%2u-%2u-%2u      %2u:%2u:%2u",
      Rtc.year,
      Rtc.mon,
      Rtc.day,
      Rtc.hour,
      Rtc.min,
      Rtc.sec);
  lcd_flush_screen(0,0,0);// 刷屏需要9ms */
  LED_RED(2);
 }
}



void PortInit(void)
{
 IO1DIR |= (1<<30)|(1<<31);
 LED_RED(0);
 LED_GREEN(0);
}


//Starts all the other tasks, then starts the scheduler.
int main( void ) 
{


 PortInit();
 
 InitRTC();


 xSerialPortInitMinimal(115200 , 128);


 // 每个任务占用的堆栈空间为 StackDepth*4 字节
 // 所有任务占用堆栈空间与所有任务中使用的队列空间总和

 // 不能超过系统堆大小(configTOTAL_HEAP_SIZE)
 // 用户可以通过pvPortMalloc来使用剩下的空间,
 // 建议不要随意频繁的通过pvPortMalloc,vPortFree来使用系统堆,因为vPortFree没有把释放过的
 // 内存组合成块,随意的pvPortMalloc会使原来整块的内存逐渐成为碎片,
 // 最终pvPortMalloc不能申请到足够的内存而导致系统崩溃。
 // 当然,如果保证每次都申请相同大小的内存块,就不会产生内存碎片了。

 xTaskCreate(  Task_Uart,
     ( const signed portCHAR * const ) "UART",
     configMINIMAL_STACK_SIZE,
     NULL,
     Task_Uart_PRIO,
     &Uart_Handle  );
     
 xTaskCreate(  Task_RF,
     ( const signed portCHAR * const ) "RF",
     configMINIMAL_STACK_SIZE,
     NULL,
     Task_RF_PRIO,
     &RF_Handle ); 
     
 xTaskCreate(  Task_GUI,
     ( const signed portCHAR * const ) "Task1",
     configMINIMAL_STACK_SIZE,
     NULL,
     Task_GUI_PRIO ,
     &GUI_Handle  ); 

 rprintf("System starting...\r\n");
 
 vTaskStartScheduler();


 return 0;
}
/*-----------------------------------------------------------*/



 


路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (1 个评论)

回复 myhuge 2008-3-28 14:19
你好,我现在用FREERTOS在项目中,想与交流下,我的QQ254343091