我参考邵子阳的《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'
哪位高手知道,如何解决?谢谢!
|