# base-application **Repository Path**: Jumping99/base-application ## Basic Information - **Project Name**: base-application - **Description**: 使用C++编写的基于FreeRTOS的一个基本多应用切换程序框架。 - **Primary Language**: C++ - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-01-25 - **Last Updated**: 2025-01-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # base-application #### 介绍 使用C++编写的基于FreeRTOS的一个基本多应用切换程序框架。 #### 使用说明 1. 通过继承`BaseApplication`类实现不同应用的派生类。 2. 重写`BaseApplication`的`Setup`,`Loop`和`Exit`函数。 3. 确定顶层应用,然后根据附属关系建立关系树。 #### 基类函数说明 1. 构造函数`BaseApplication(uint32_t stackDepth)` 有参构造函数,用于初始化一些变量。 2. 程序运行函数`Run()` 用于启动或从暂停状态继续运行程序,对于外部调用,通常用于顶层程序的启动,子程序则是通过下方的`RunChild()`函数。 3. 程序暂停函数`Pause()` 用于暂停程序运行。 4. 子程序添加函数`AddChild(BaseApplication *child)` 用于建立程序关系树的重要函数,向一个程序添加子程序。 5. 子程序运行函数`RunChild(int index)` 用于运行当前程序属下的其中一个子程序,会先挂起当前程序,然后运行子程序。 6. 子程序停止函数`Stop()` 用于停止当前正在运行的程序,如果这个程序有父级程序,则当前程序结束后解挂其父级程序,使其继续运行。 7. *事件发送函数`SendEvent()` 用于向当前正在运行的程序发送事件,接收到事件的程序会调用`EventHandler()`函数。 此函数会从其调用对象开始遍历程序关系树,找到正在运行的程序并发送事件,因此调用此 函数的对象通常是**顶层程序**。 8. *设置事件任务栈深度函数`SetEventTaskStackDepth(uint32_t stackDepth)` 为了确保事件的实时性,事件处理采用的是独立的线程,此函数可以设置该线程的栈深度, 由于事件线程是在程序启动后创建,因此栈深度需要在该程序运行前设定好。 #### 基类虚函数说明 这部分函数是留给派生类重写的,跟具体实现的功能相关,根据需要在派生类进行重写。 1. `Setup()函数` 仅在程序启动时执行一次,非纯虚函数,派生类不需要时可以不重写。 2. `Loop()函数` 程序运行过程中反复执行的函数,纯虚函数,需要实例化的派生类需要重写。 3. `Exit()函数` 仅在程序退出时执行一次,非纯虚函数,派生类不需要时可以不重写。 4. `EventHandler()函数` 程序事件处理函数,纯虚函数,需要实例化的派生类需要重写。由于使用的独立线程,因此需要线程安全和资源竟争问题。