最新FreeRtos(版本8.0)上手指南

+最新FreeRtos(版本8.0)上手指南
最近折腾一块stm32f107rc的板子,摸索了一下FreeRTOS 的使用
发现起步不太难有点经验和大家分享。
1,先从官网http://www.freertos.org/下载 FreeRTOS 8.0.0 
2,用标准库(STM32F10x_StdPeriph_Lib_V3.5.0)模板建工程
3, 在工程中添加FreeRTOS 文件。tasks.c  list.c queue.c heap_2.c
   port.c  其中port.C是cotex M3的移植文件。选择目录..\..\Source\portable\RVDS\ARM_CM3\
   下的port.c
 
3,修改启动代码(.s文件)如下,主要是链接FreeRTOS的三个中断函数
 
                                IMPORT xPortPendSVHandler
                                IMPORT xPortSysTickHandler
                                IMPORT vPortSVCHandler
                                .....
                                DCD     vPortSVCHandler           ; SVCall Handler
        DCD     DebugMon_Handler          ; Debug Monitor Handler
        DCD     0                         ; Reserved
        DCD     xPortPendSVHandler        ; PendSV Handler
        DCD     xPortSysTickHandler       ; SysTick Handler                        
                                
4.在main中建立自己任务开始 rtos
 
  /* Create one task. */
    xTaskCreate(    vTask1,     /* Pointer to the function that implements the task. */
                    "Task 1",   /* Text name for the task.  This is to facilitate debugging only. */
                    200,        /* Stack depth in words. */
                    NULL,       /* We are not using the task parameter. */
                    1,          /* This task will run at priority 1. */
                    NULL );     /* We are not using the task handle. */
 
    /* Create one task. */
    xTaskCreate(    vTask2,     /* Pointer to the function that implements the task. */
                    "Task 2",   /* Text name for the task.  This is to facilitate debugging only. */
                    200,        /* Stack depth in words. */
                    NULL,       /* We are not using the task parameter. */
                    2,          /* This task will run at priority 1. */
                    NULL );     /* We are not using the task handle. */
 
    /* Start the scheduler so our tasks start executing. */
    vTaskStartScheduler();
..............
..............
 
void vTask1( void *pvParameters )
{
    /* As per most tasks, this task is implemented in an infinite loop. */
    while(1)
    {
        LED_Toggle(0);
                LED_Toggle(2);
        vTaskDelay(800);
    }
}
 
void vTask2( void *pvParameters )
{
    /* As per most tasks, this task is implemented in an infinite loop. */
    while(1)
    {
        LED_Toggle(1);
                LED_Toggle(3);
        vTaskDelay(1600);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值