cyy的垃圾堆


  • 首页
  • 归档
  • 标签
  • 关于CYY
  • 友链

© 2025 CYY

Theme Typography by Makito

Proudly published with Hexo

一点与stm32的笔记(3)-freertos常用API函数使用

发布于 2023-02-25 嵌入式 

空间不足导致卡死

任务创建,动态创建

1
2
3
4
5
6
xTaskCreate((TaskFunction_t)App_Task1,           //任务入口函数
(const char *)"App_Task1", //任务名字
(uint16_t)configMINIMAL_STACK_SIZE, //任务栈大小
(void*)NULL, //任务入口函数参数
(UBaseType_t)6, //任务优先级,数值越大,优先级越高
(TaskHandle_t*)&app_task1_handle); //任务句柄

任务函数

1
2
3
4
5
TaskHandle_t app_task1_handle = NULL;
void App_Task1(void *pvParameters)
{
for(;;){ }//相关任务
}

任务挂起,恢复,删除

1
2
3
4
5
6
7
vTaskSuspend(app_task1_handle);//挂起
vTaskResume(app_task1_handle);//恢复
//删去任务
vTaskDelete(app_task1_handle);
app_task1_handle = NULL;//没有程序动不了
//删去自己
vTaskDelete(NULL);

延时

1
2
vTaskDelay(1000);
vTaskDelay(pdMS_TO_TICKS(1000));//将tick转成ms

队列

1
2
3
4
5
6
7
8
9
10
11
QueueHandle_t aa;
//main中
aa=xQueueCreate(1,4);
//发送任务中
xQueueOverwrite(aa,&key_a);//适合队列长度为1
xQueueSendToBack(aa,&key_a);//尾部发送,先进先出
//接受任务中
xQueueReceive(aa,&key_a,portMAX_DELAY);//同时删去该数据
xQueuePeek(aa,&key_a,portMAX_DELAY);//不删去
//删去队列
vQueueDelete(aa);

信号量,每种信号量get和take函数都一样

计数信号量

1
2
3
4
5
6
7
8
9
10
11
12
13
//全局定义
static SemaphoreHandle_t g_xSemTicks;
//main中
g_xSemTicks=xSemaphoreCreateCounting(3, 2);//前面为最大计数,后面为初始计数
//任务中
void App_Task1(void *pvParameters)
{
xSemaphoreTake(g_xSemTicks,portMAX_DELAY);//获取信号量,portMAX_DELAY可替换为具体数字,take-1
for(;;)
{
if(xxxx){xSemaphoreGive(g_xSemTicks);}//释放信号量,超过最大计数会导致程序出错,give+1
}
}

二值信号量

1
g_xSemTicks=xSemaphoreCreateBinary();//与计数任务通知类似,等于g_xSemTicks=xSemaphoreCreateCounting(1, 0);

互斥量,不能在中断使用,用之前需要在freertosconfig.h使能

1
g_xSemTicks1=xSemaphoreCreateMutex();

任务通知

1
2
3
4
//简化版
xTaskNotifyGive(app_task2_handle);//发送,参数为通知的句柄
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);//接收,接收一次将已接收状态变为没接收
//专业版

事件组

1

软件定时器

1

分享到 

 上一篇: 一点与stm32的笔记(2)-外设 下一篇: 遇到的坑&目前的计划 

© 2025 CYY

Theme Typography by Makito

Proudly published with Hexo