打印
[AVR单片机]

FreeRTOS的问题

[复制链接]
1044|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
JY-DX-JY|  楼主 | 2016-4-11 11:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我参考邵子阳的《AVR单片机应用专题精讲》搞了个FreeRTOS,
程序如下:
/*
  单个任务的使用。

  * 使用 xTaskCreate 创建任务
  * vTaskStartScheduler 启动调度器
  * 在任务中使用 vTaskDelay 进行延时

*/
#include <avr/io.h>
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "semphr.h"
#include "cfg.h"
#include "macromcu.h"

//互斥信号
xSemaphoreHandle xSemaphore=NULL;

void vTask1( void * pvParameters )
{
  const portTickType xDelay = 500 / portTICK_RATE_MS;
  //创建互斥信号
  xSemaphore=xSemaphoreCreateMutex();

  for( ;; )
  {
    vTaskDelay( xDelay );
    if(xSemaphore!=NULL)
        {
                //是否可以获取互斥信号
                if(xSemaphoreTake(xSemaphore,(portTickType)10)==pdTRUE)
                {
                        PININV(LED1);
                        //归还互斥信号
                        xSemaphoreGive(xSemaphore);
                }
        }
  }
}

void vTask2(void * pvParameters)
{
        //const portTickType xDelay=660/portTICK_RATE_MS;
        for(;;)
        {
                taskYIELD();
                if(PININ(BUTTON)==0)
                {
                        if(xSemaphore!=NULL)
                        {
                                //获取互斥信号
                                if(xSemaphoreTake(xSemaphore,(portTickType)10)==pdTRUE)
                                {
                                        PINCLR(LED2);
                                        while(PININ(BUTTON)==0)
                                        {
                                                taskYIELD();
                                        }
                                        PINSET(LED2);
                                        //归还互斥信号
                                        xSemaphoreGive(xSemaphore);
                                }
                        }
                }
        }
}

int main()
{
  PINDIR(LED1, PIN_OUTPUT);
  PINDIR(LED2, PIN_OUTPUT);
  PINSET(LED2);
  PINDIR(BUTTON,PIN_INPUT);
  PINSET(BUTTON);
  //创建任务
  xTaskCreate( vTask1, "TASK1", configMINIMAL_STACK_SIZE, NULL, 2, NULL );
  xTaskCreate( vTask2, "TASK2", configMINIMAL_STACK_SIZE, NULL, 2, NULL );
  //启动任务调度器
  vTaskStartScheduler();

  while(1);

  return 0;
}

环境用的AVR STUDIO,
编译错误:
提示E:\CCB\AVR\stduy\FreeRTOS_SemaphoreCreateMutex\xTaskCreate\default/../main.c:24: undefined reference to `xQueueCreateMutex'
哪位高手知道,如何解决?谢谢!

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:晴天响霹雳,平地一声雷。

245

主题

3351

帖子

30

粉丝