首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

freereos.zip

行业研究 4.41KB 22 需要积分: 1
立即下载

资源介绍:

freereos.zip
#include "freertos_demo.h" #include "stm32f10x.h" /*FreeRTOS*********************************************************************************************/ //#include "FreeRTOS.h" //#include "task.h" //#include "timers.h" #include "OLED.h" #include "Encoder.h" #include "event_groups.h" #include "task.h" unsigned char okay,flg; unsigned char flag=1; int16_t Num; //定义待被旋转编码器调节的变量 unsigned char hour,min,second; unsigned char tim_arv=0; EventBits_t bits1; EventGroupHandle_t eventGroup; BaseType_t xHigherPriorityTaskWoken=pdFALSE; #define START_TASK_PRIO 1 #define START_TASK_STACK_SIZE 128 TaskHandle_t start_task_handler; void start_task( void * pvParameters ); #define TASK1_PRIO 1 #define TASK1_STACK_SIZE 800 TaskHandle_t task1_handler; void task1( void * pvParameters ); #define TASK2_PRIO 2 #define TASK2_STACK_SIZE 128 TaskHandle_t task2_handler; void task2( void * pvParameters ); #define TASK3_PRIO 1 #define TASK3_STACK_SIZE 800 TaskHandle_t task3_handler; void task3( void * pvParameters ); #define TASK4_PRIO 2 #define TASK4_STACK_SIZE 800 TaskHandle_t task4_handler; //void task4( void * pvParameters ); #define TaskTimer_PRIO 2 #define TaskTimer_STACK_SIZE 128 TaskHandle_t TaskTimer_handler; //#define a_handler TaskTimer_handler void TaskTimer( void * pvParameters ); TimerHandle_t xTimer; void vTimerCallback(TimerHandle_t xTimer); void freertos_demo(void) { xTaskCreate((TaskFunction_t ) start_task, (char * ) "start_task", (configSTACK_DEPTH_TYPE ) START_TASK_STACK_SIZE, (void * ) NULL, (UBaseType_t ) START_TASK_PRIO, (TaskHandle_t * ) &start_task_handler ); vTaskStartScheduler(); } void start_task( void * pvParameters ) { taskENTER_CRITICAL(); // TimerHandle_t xTimer; // if(xTimer!=NULL){ // // if(xTimerStart(xTimer,0)!=pdPASS){print("Failed to start timer\n");} // else{print("Failed to create timer\n");} // // } eventGroup=xEventGroupCreate(); xTaskCreate((TaskFunction_t ) TaskTimer, (char * ) "TaskTimer", (configSTACK_DEPTH_TYPE ) TaskTimer_STACK_SIZE, (void * ) NULL, (UBaseType_t ) TaskTimer_PRIO, (TaskHandle_t * ) &TaskTimer_handler ); xTaskCreate((TaskFunction_t ) task1, (char * ) "task1", (configSTACK_DEPTH_TYPE ) TASK1_STACK_SIZE, (void * ) NULL, (UBaseType_t ) TASK1_PRIO, (TaskHandle_t * ) &task1_handler ); xTaskCreate((TaskFunction_t ) task2, (char * ) "task2", (configSTACK_DEPTH_TYPE ) TASK2_STACK_SIZE, (void * ) NULL, (UBaseType_t ) TASK2_PRIO, (TaskHandle_t * ) &task2_handler ); xTaskCreate((TaskFunction_t ) task3, (char * ) "task3", (configSTACK_DEPTH_TYPE ) TASK3_STACK_SIZE, (void * ) NULL, (UBaseType_t ) TASK3_PRIO, (TaskHandle_t * ) &task3_handler ); xTaskCreate((TaskFunction_t ) task4, (char * ) "task4", (configSTACK_DEPTH_TYPE ) TASK4_STACK_SIZE, (void * ) NULL, (UBaseType_t ) TASK4_PRIO, (TaskHandle_t * ) &task4_handler ); vTaskDelete(NULL); taskEXIT_CRITICAL(); } void TaskTimer( void * pvParameters ) { while(1){ // EventBits_t bits1; bits1=xEventGroupWaitBits(eventGroup,BIT1,pdTRUE,pdTRUE,portMAX_DELAY); if(bits1)OLED_ShowString(4,7, "YE"); OLED_ShowString(4,11, "ok"); break; } } void vTimerCallback(TimerHandle_t xTimer) { tim_arv=1; // vTaskDelay(pdMS_TO_TICKS(1000)); // vTaskDelete(NULL); // Num += Encoder_Get(); //获取自上此调用此函数后,旋转编码器的增量值,并将增量值加到Num上 // okay=ok1(); TaskHandle_t xTask3Handle=(TaskHandle_t)pvTimerGetTimerID(xTimer); xTaskNotifyGive(xTask3Handle); } void task1( void * pvParameters ) { uint32_t task1_num = 0; // unsigned char ok_task2=0; // OLED_ShowString(2, 1, "V:"); // OLED_ShowString(3, 1, "R:"); // OLED_ShowString(4, 1, "H:"); // // Num += Encoder_Get(); //获取自上此调用此函数后,旋转编码器的增量值,并将增量值加到Num上 // okay=ok1(); OLED_ShowSignedNum(1, 5, Num, 2); //显示Num OLED_ShowString(2, 1, "V:"); OLED_ShowString(3, 1, "R:"); OLED_ShowString(4, 1, "H:"); // if(Num==1&&okay==1)task1(task1); // if(Num==2&&okay==1)task2(task2); // if(Num==3&&okay==1)task3(task3); task1_num=1; vTaskDelay(5000); OLED_ShowString( 2, 11, "put"); vTaskDelay(2000); // while(1) // { // ok_task2=ok1(); // if(ok_task2==1)break; // } OLED_ShowString(2, 10, "c"); task1_num=0; vTaskDelay(3000); OLED_ShowString(2, 10, "ok "); vTaskDelete(NULL); } void task2( void * pvParameters ) { uint32_t task2_num = 0; task2_num=1; vTaskDelay(10000); OLED_ShowString(3, 10, "ok"); vTaskDelete(NULL); } void task3( void * pvParameters ) { // vTaskDelay(pdMS_TO_TICKS(2000)); xTimer=xTimerCreate("Timer",pdMS_TO_TICKS(1000),pdTRUE, (void*)xTaskGetCurrentTaskHandle(), vTimerCallback); if(xTimer!=NULL){ xTimerStart(xTimer,0);} flg=1; while(1){ ulTaskNotifyTake(pdTRUE,portMAX_DELAY); if(tim_arv==1) { tim_arv=0; second++; if(second>60){min++;second=0;} if(min>60){hour++;min=0;} if(hour>24){hour=0;} OLED_ShowString(1, 9, "TIM: "); OLED_ShowSignedNum(1, 14,second, 2); //显示Num // vTaskDelay(pdMS_TO_TICKS(10)); } } } void task4( void * pvParameters ) { EventBits_t bits; // BaseType_t xHigherPriorityTaskWoken=pdFALSE; while(1) { bits=xEventGroupWaitBits(eventGroup,BIT0|BIT2,pdTRUE,pdFALSE,portMAX_DELAY); if(bits&&flag) { Num += Encoder_Get(); //获取自上此调用此函数后,旋转编码器的增量值,并将增量值加到Num上 okay=ok1(); OLED_ShowSignedNum(1, 5, Num, 2); //显示Num flag=0; } // portYIELD_FROM_ISR(xHigherPriorityTaskWoken); } // portYIELD_FROM_ISR(xHigherPriorityTaskWoken); // xEventGroupSetBitsFromISR(eventGroup,BIT1,NULL); }

资源文件列表:

freereos.zip 大约有4个文件
  1. freereos/Encoder.c 6.46KB
  2. freereos/Encoder.h 199B
  3. freereos/freertos_demo.c 6.94KB
  4. freereos/freertos_demo.h 465B
0评论
提交 加载更多评论
其他资源 软件开发+数据库+Navicat premium 12+压缩包安装工具
Navicat Premium 12是一款全面的数据库管理工具,支持多种数据库系统,包括MySQL、SQLite、Oracle等。它具备数据同步、导入导出、可视化编辑和安全访问等功能,适用于专业开发者和新手用户。 该工具提供数据同步和传输功能,可在不同数据库之间快速迁移数据,并能从多种格式(如Excel、XML、TXT)导入导出数据,实现灵活的数据操作。通过网格和表单视图,用户可以直接编辑数据,无需编写复杂的SQL语句。 安全性也是Navicat Premium 12的重点,它支持通过SSH创建安全连接,确保数据传输的安全。此外,它还提供云服务,让用户可以随时访问数据库信息。 Navicat Premium 12还支持自动化批处理作业,如数据传输、数据同步等,能在指定时间自动执行,提升工作效率。用户还可以设计各种类型的报表,并将报表输出为PDF、Excel等格式,方便数据分享和分析。 总之,Navicat Premium 12以其多数据库支持、强大的数据处理和安全功能,成为广受欢迎的数据库管理工具。
软件开发+数据库+Navicat premium 12+压缩包安装工具 软件开发+数据库+Navicat premium 12+压缩包安装工具 软件开发+数据库+Navicat premium 12+压缩包安装工具
ball-screwball-screwball-screw
ball-screwball-screwball-screw
GD32H7xx系列CLion FreeRTOS工程模版
GD32H7xx系列CLion FreeRTOS工程模版
Python 3.12.5
Python 是一种广泛使用的高级编程语言,以其简洁易读的语法和强大的功能库而著称。它支持多种编程范式,包括面向对象、命令式和函数式编程。Python 的设计哲学强调代码的可读性和清晰的语法结构,这使得它成为初学者的理想选择,同时也深受专业开发者和数据科学家的喜爱。 Python 的特点: 易读性:Python 的代码设计得尽可能易于阅读,其语法清晰,结构简洁。 可扩展性:Python 可以通过 C 或 C++(或其他语言)编写的扩展模块来扩展其功能。 丰富的标准库:Python 自带了一个庞大的标准库,提供了许多常用的编程任务所需的功能。 跨平台:Python 程序可以在多种操作系统上运行,包括 Windows、macOS 和 Linux。 强大的社区支持:Python 拥有一个活跃的开发者社区,提供了大量的第三方库和工具。 Python 的应用领域: Web 开发:Python 可以用来开发服务器端的 Web 应用程序,如使用 Django 或 Flask 框架。 数据分析与科学计算:Python 是数据分析和科学计算领域的重要工具。
网络摄像机视觉系统 Network Camera Vision System
网络摄像机视觉系统 功能齐全的 IP 摄像机管理系统内置于 Qt Creator 中,可在 Windows 上实现 FFMPEG。包括预构建的二进制库,便于编译。需要 Qt、MS Visual Studio、NVIDIA Cuda 驱动程序。 有一个可执行文件的安装程序 # 功能 - ONVIF Network Camera Vision System Fully featured IP camera management system built in Qt creator implementing FFMPEG on windows. Includes pre built binary libraries for easy compilation. Requires Qt, MS Visual Studio, NVIDIA Cuda drivers. There is an install program for the executable # Features - ONVIF - Windows - FFMPEG - Qt - Cuda - IP Camera
A*算法、D*算法求机器人三维路径规划问题
机器人三维路径规划问题涉及在三维空间中为机器人规划出一条从起点到终点的最优路径,同时需要避开各种障碍物,并满足一定的性能指标。要实现这一目标,不仅需要对环境进行精确建模,还需要运用高效的搜索和优化算法。 A*算法是一种用于在图中找到从起始节点到目标节点的最短路径的启发式搜索算法,它结合了Dijkstra算法的确保性(保证找到一条最短路径)和贪心算法的高效性(快速找到目标)。
将Json数据保存到文件中
将Json数据保存到文件中
vue使用docxtemplater生成docx在线预览数据格式及.docx示例
vue使用docxtemplater生成docx在线预览数据格式及.docx示例
vue使用docxtemplater生成docx在线预览数据格式及.docx示例