#include "main.h" #ifdef SYSTEM_FREERTOS_ENABLED static TaskHandle_t my_app_init_handle ; /*任务句柄*/ void vAppFreeRTOSStartUp(void) { #if configSUPPORT_STATIC_ALLOCATION AppTaskCreate_Handle = xTaskCreateStatic((TaskFunction_t )AppTaskCreate, (const char* )"AppTaskCreate", (uint32_t )128, (void* )NULL, (UBaseType_t )3, (StackType_t* )AppTaskCreate_Stack, (StaticTask_t* )&AppTaskCreate_TCB); if(NULL != AppTaskCreate_Handle) vTaskStartScheduler(); #else BaseType_t xReturn = pdPASS; xReturn = xTaskCreate((TaskFunction_t )my_app_init, (const char* )"my_app_init", (uint16_t )128, (void* )NULL, (UBaseType_t )1, (TaskHandle_t* )&my_app_init_handle); if(pdPASS == xReturn) vTaskStartScheduler(); #endif } #endif int main() { HAL_Init(); //初始化HAL库 Stm32_Clock_Init(RCC_PLL_MUL9); //设置时钟,72M __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_TIM1_CLK_ENABLE(); __HAL_RCC_TIM2_CLK_ENABLE(); __HAL_RCC_TIM3_CLK_ENABLE(); __HAL_RCC_TIM4_CLK_ENABLE(); __HAL_RCC_DMA1_CLK_ENABLE(); __HAL_RCC_AFIO_CLK_ENABLE(); //使能io复用时钟 delay_init(72); //初始化延时函数 log_init(); SystemIsr_PriorityInit(); #ifdef SYSTEM_FREERTOS_ENABLED vAppFreeRTOSStartUp(); #endif return(1); }
时间: 2023-12-21 15:06:28 浏览: 154
这段代码是一个基于STM32芯片的嵌入式系统的主函数,包含了一些初始化操作,如HAL库的初始化、时钟设置、IO口时钟使能等。其中#ifdef SYSTEM_FREERTOS_ENABLED表示如果开启了FreeRTOS系统,则调用vAppFreeRTOSStartUp()函数来启动任务调度器。如果没有开启,则直接返回1。在开启FreeRTOS系统的情况下,vAppFreeRTOSStartUp()函数会创建一个名为my_app_init的任务,并通过任务句柄my_app_init_handle来获取任务的状态信息。在任务创建成功后,会调用vTaskStartScheduler()函数来启动任务调度器,开始执行任务。
相关问题
#include <iostream> #include <unistd.h> #include "opencv_face_process.h" #include "socket_server.h" #include "user_mngr.h" #include <QApplication> /* C++ include C */ #ifdef __cplusplus extern "C" { #endif /* C head file */ #ifdef __cplusplus } #endif using namespace std; struct main_mngr_info main_mngr; int main(int argc, char* argv[]) { QApplication qtApp(argc, argv); (void)argc; (void)argv; cout << "hello background_app" << endl; memset(&main_mngr, 0, sizeof(struct main_mngr_info)); /* load config file */ main_mngr.config_ini = iniparser_load(PATH_CONFIG_INI); if(main_mngr.config_ini == NULL) { printf("WARNING: %s: load [%s] failed, will use default value.\n", __FUNCTION__, PATH_CONFIG_INI); //return -1; // will use default value } main_mngr.work_state = WORK_STA_NORMAL; main_mngr.user_handle = -1; main_mngr.mngr_handle = -1; main_mngr.capture_flag = 0; user_mngr_init(); start_face_process_task(); start_socket_server_task(); return qtApp.exec(); // start qt application, message loop ... }
这是一个C++程序的main函数,其中包含了一些头文件的引用和命名空间的声明。接下来创建了一个结构体main_mngr_info的实例main_mngr,并初始化为零。然后加载配置文件,并检查加载是否成功。如果加载失败,会打印警告信息,但程序会继续执行。接着对main_mngr的一些成员进行赋值操作。然后调用user_mngr_init()函数进行用户管理的初始化。接下来启动人脸处理任务和套接字服务器任务。最后通过qtApp.exec()启动Qt应用程序的消息循环。
#include <iostream> #include <unistd.h> #include "opencv_face_process.h" #include "socket_server.h" #include "user_mngr.h" #include <QApplication> /* C++ include C */ #ifdef __cplusplus extern "C" { #endif /* C head file */ #ifdef __cplusplus } #endif using namespace std; struct main_mngr_info main_mngr; int main(int argc, char* argv[]) { QApplication qtApp(argc, argv); (void)argc; (void)argv; cout << "hello background_app" << endl; memset(&main_mngr, 0, sizeof(struct main_mngr_info)); /* load config file */ main_mngr.config_ini = iniparser_load(PATH_CONFIG_INI); if(main_mngr.config_ini == NULL) { printf("WARNING: %s: load [%s] failed, will use default value.\n", __FUNCTION__, PATH_CONFIG_INI); //return -1; // will use default value } main_mngr.work_state = WORK_STA_NORMAL; main_mngr.user_handle = -1; main_mngr.mngr_handle = -1; main_mngr.capture_flag = 0; user_mngr_init(); start_face_process_task(); start_socket_server_task(); return qtApp.exec(); // start qt application, message loop ... }
这是一个使用C++编写的主函数。它包含了一些头文件的引用,以及一些全局变量和函数的定义。
主函数的功能是初始化一些变量,加载配置文件,启动一些任务,并启动一个Qt应用程序的消息循环。
在开始之前,它先调用了`memset`函数将`main_mngr`结构体清零。
然后加载配置文件,如果加载失败则给出一个警告,并继续使用默认值。
接着初始化一些变量,包括设置工作状态为正常,用户和管理句柄为-1,以及捕获标志为0。
然后调用`user_mngr_init`函数初始化用户管理。
接着启动人脸处理任务和套接字服务器任务。
最后调用`qtApp.exec()`启动Qt应用程序的消息循环。
以上就是这个主函数的基本流程。
阅读全文