当前位置:网站首页>电子产品量产工具(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);
}
边栏推荐
- MySQL
- CVPR 2022 |节省70%的显存,训练速度提高2倍
- 【论文阅读-表情捕捉】High-quality Real Time Facial Capture Based on Single Camera
- MySQL主从复制—有手就能学会的MySQL集群搭建教程
- 网络信息安全运营方法论 (中)
- 【Kaggle项目实战记录】一个图片分类项目的步骤和思路分享——以树叶分类为例(用Pytorch)
- GIS面试问题
- Tensorflow踩坑笔记,记录各种报错和解决方法
- 【Pytorch学习笔记】9.分类器的分类结果如何评估——使用混淆矩阵、F1-score、ROC曲线、PR曲线等(以Softmax二分类为例)
- 如何组织一场安全、可靠、高效的网络实战攻防演习?
猜你喜欢
随机推荐
《基于机器视觉测量系统的工业在线检测研究》论文笔记
单变量线性回归
tensorflow的session和内存溢出
网工必用神器:网络排查工具MTR
Redis设计与实现(第一部分):数据结构与对象
Redis设计与实现(第二部分):单机数据库的实现
[Pytorch study notes] 10. How to quickly create your own Dataset dataset object (inherit the Dataset class and override the corresponding method)
Comparison and summary of Tensorflow2 and Pytorch in terms of basic operations of tensor Tensor
读论文- pix2pix
【22李宏毅机器学习】课程大纲概述
Facial Motion Capture 调研
[Kaggle project actual combat record] Steps and ideas sharing of a picture classification project - taking leaf classification as an example (using Pytorch)
LeetCode刷题之第746题
【Pytorch学习笔记】9.分类器的分类结果如何评估——使用混淆矩阵、F1-score、ROC曲线、PR曲线等(以Softmax二分类为例)
LeetCode刷题之第1024题
发顶会顶刊论文,你应该这样写作
轻松接入Azure AD+Oauth2 实现 SSO
LeetCode刷题之第61题
单片机按键开发库-支持连击、长按等操作
【shell编程】第二章:条件测试语句









