完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
6个回答
|
|
#include "stm32l4xx.h"
#include "delay.h" #include "led.h" #include "key.h" #include "FreeRTOS.h" #include "task.h" #include "semphr.h" #define u8 unsigned char #define START_TASK_PRIO 1 #define START_STK_SIZE 256 TaskHandle_t StartTask_Handler; void start_task(void *pvParameters); #define KEY_TASK_PRIO 2 #define KEY_STK_SIZE 256 TaskHandle_t KEYTask_Handler; void KEY_task(void *pvParameters); #define LED_TASK_PRIO 3 #define LED_STK_SIZE 256 TaskHandle_t LED_Handler; void LED_task(void *pvParameters); SemaphoreHandle_t BinarySemaphore; //二值信号量句柄 int main(void) { HAL_Init(); delay_Init(); //初始化延时函数 LED_Init(); //初始化LED端口 KEY_Init(); //创建开始任务 xTaskCreate((TaskFunction_t )start_task, //任务函数 (const char* )"start_task", //任务名称 (uint16_t )START_STK_SIZE, //任务堆栈大小 (void* )NULL, //传递给任务函数的参数 (UBaseType_t )START_TASK_PRIO, //任务优先级 (TaskHandle_t* )&StartTask_Handler); //任务句柄 vTaskStartScheduler(); //开启任务调度 } //开始任务任务函数 void start_task(void *pvParameters) { taskENTER_CRITICAL(); //进入临界区 BinarySemaphore=xSemaphoreCreateBinary(); //创建二值信号量 //创建KEY_task任务 xTaskCreate((TaskFunction_t )KEY_task, (const char* )"KEY_task", (uint16_t )START_STK_SIZE, (void* )NULL, (UBaseType_t )KEY_TASK_PRIO, (TaskHandle_t* )&KEYTask_Handler); //创建LED_task任务 xTaskCreate((TaskFunction_t )LED_task, (const char* )"LED_task", (uint16_t )LED_STK_SIZE, (void* )NULL, (UBaseType_t )LED_TASK_PRIO, (TaskHandle_t* )&LED_Handler); vTaskDelete(StartTask_Handler); //删除开始任务 taskEXIT_CRITICAL(); //退出临界区 } //KEY_task函数 void KEY_task(void *pvParameters) { while(1) { static unsigned char key_old=1; if(KEY==0&&key_old==1) xSemaphoreGive(BinarySemaphore); key_old=KEY; //vTaskDelay(10); delay_ms(10); } } //LED_task函数 void LED_task(void *pvParameters) { while(1) { xSemaphoreTake( BinarySemaphore, portMAX_DELAY ); HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_1); } } |
|
|
|
能发我邮箱吗?我下载不了 我的电脑的问题。
|
|
|
|
按键和灯都是在单独的.c和.h文件里,整个任务都在主函数里,移植的内容主要是主函数这部分,只不过f4是在发烧友的freertos例程基础上修改的,l4没有例程,是从网上找的工程,在这个基础上修改的,测试的时候任务都可以正常执行。
|
|
|
|
试了下,还是不行,我再自己重新移植下吧,多谢帮助了
|
|
|
|
解决了,把两个任务拆分出来,没用start任务,不过还是多谢帮助啦
|
|
|
|
分析过什么原因吗? 是不是堆栈空间不够了。之前有三个任务每个任务都是256的大小三个加起来就是256*3*4byte, 内存池够吗?你这个L4的芯片?
|
|
|
|
只有小组成员才能发言,加入小组>>
705 浏览 0 评论
1114 浏览 1 评论
2491 浏览 5 评论
2826 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2671 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
661浏览 9评论
669浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
789浏览 6评论
634浏览 5评论
679浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 19:18 , Processed in 1.131865 second(s), Total 90, Slave 70 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号