当前位置:网站首页>电子产品量产工具(5)- 页面系统实现
电子产品量产工具(5)- 页面系统实现
2022-08-05 05:16:00 【乛 乛 .】
电子产品量产工具
5 页面系统设计
5.1 页面系统头文件page_manager.h
在头文件中构建页面结构体
5.1.1 页面结构体PageAction
typedef struct PageAction {
char *name; /*页面名*/
void (*Run)(void *pParams); /*页面运行函数*/
struct PageAction *ptNext; /*指向下一个页面*/
}PageAction, *PPageAction;
5.1.2 page_manager.h完整代码
#ifndef _PAGE_MANAGER_H
#define _PAGE_MANAGER_H
typedef struct PageAction {
char *name;
void (*Run)(void *pParams);
struct PageAction *ptNext;
}PageAction, *PPageAction;
void PageRegister(PPageAction ptPageAction);
void PagesRegister(void);
PPageAction Page(char *name);
#endif
5.2 页面管理page_manager.c
5.2.1 页面注册函数PageAction
static PPageAction g_ptPages = NULL;
void PageRegister(PPageAction ptPageAction) /*将页面注册进链表*/
{
ptPageAction->ptNext = g_ptPages;
g_ptPages = ptPageAction;
}
void PagesRegister(void) /*注册多个页面*/
{
extern void MainPageRegister(void);
MainPageRegister();
}
5.2.2 页面获取函数Page
根据页面名找到指定页面
PPageAction Page(char *name)
{
PPageAction ptTmp = g_ptPages;
while (ptTmp)
{
if (strcmp(name, ptTmp->name) == 0)
return ptTmp;
ptTmp = ptTmp->ptNext;
}
return NULL;
}
5.2.3 page_manager.c完整代码
#include <common.h>
#include <page_manager.h>
#include <string.h>
static PPageAction g_ptPages = NULL;
void PageRegister(PPageAction ptPageAction)
{
ptPageAction->ptNext = g_ptPages;
g_ptPages = ptPageAction;
}
PPageAction Page(char *name)
{
PPageAction ptTmp = g_ptPages;
while (ptTmp)
{
if (strcmp(name, ptTmp->name) == 0)
return ptTmp;
ptTmp = ptTmp->ptNext;
}
return NULL;
}
void PagesRegister(void)
{
extern void MainPageRegister(void);
MainPageRegister();
}
5.3 测试程序page_test.c
5.3.1 page_test.c
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <linux/fb.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <sys/ioctl.h>
#include <stdlib.h>
#include <page_manager.h>
int main(int argc, char **argv)
{
PagesRegister();
Page("main")->Run(NULL);
return 0;
}
5.3.2 main_page.c
#include <page_manager.h>
#include <stdio.h>
static void MainPageRun(void *pParams)
{
printf("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);
}
static PageAction g_tMainPage = {
.name = "main",
.Run = MainPageRun,
};
void MainPageRegister(void)
{
PageRegister(&g_tMainPage);
}
边栏推荐
猜你喜欢

Facial Motion Capture 调研

Redis设计与实现(第三部分):多机数据库的实现

十一、拦截器运行原理

【shell编程】第三章:函数

基于STM32F407的一个温度传感器报警系统(用的是DS18B20温度传感器,4针0.96寸OLED显示屏,并且附带日期显示)
![[Practice 1] Diabetes Genetic Risk Detection Challenge [IFLYTEK Open Platform]](/img/10/7aa3153e861354178f048fb73076f7.png)
[Practice 1] Diabetes Genetic Risk Detection Challenge [IFLYTEK Open Platform]
![[Database and SQL study notes] 10. (T-SQL language) functions, stored procedures, triggers](/img/b9/06b90160c962a25a3cc44731afb6dc.png)
[Database and SQL study notes] 10. (T-SQL language) functions, stored procedures, triggers

Polygon计算每一个角的角度

spingboot 容器项目完成CICD部署

5G中切片网络的核心技术FlexE
随机推荐
CVPR 2020 - 频谱正则化
轻松接入Azure AD+Oauth2 实现 SSO
常用 crud 的思考和设计
Detailed explanation of BroadCast Receiver (broadcast)
【数据库和SQL学习笔记】9.(T-SQL语言)定义变量、高级查询、流程控制(条件、循环等)
「实用」运维新手一定不能错过的17 个技巧
十、视图解析原理与源码分析
《基于机器视觉的输电线路交叉点在线测量方法及技术方案》论文笔记
【Multisim仿真】直流稳压电源设计报告
读论文- pix2pix
深度学习系列(二)优化器 (Optimization)
八、响应处理——ReturnValueHandler匹配返回值处理器并处理返回值原理解析
十一、拦截器运行原理
物联网-广域网技术之NB-IoT
服务网格istio 1.12.x安装
Service
【Kaggle项目实战记录】一个图片分类项目的步骤和思路分享——以树叶分类为例(用Pytorch)
leetCode刷题之第31题
MySQL
关于存储IOPS你必须了解的概念