量产工具一一页面系统(五)

news2024/12/29 10:08:28

目录

前言

一、产品页面数据结构抽象

1. page_manager.h

二、产品页面管理器

1.page_manager.c 

三、产品页面运行

1.main_page.c

四、单元测试

1.page_test.c

2.上机测试


前言

前面我们实现了显示系统框架,输入系统框架,文字系统框架和UI系统框架,链接:

  • 量产工具一一显示系统(一)-CSDN博客
  • 量产工具一一输入系统(二)-CSDN博客
  • 量产工具一一文字系统(三)-CSDN博客
  • 量产工具一一UI系统(四)-CSDN博客

接下来我们来实现页面系统框架。

一、产品页面数据结构抽象

很多产品的页面设计都有类似的效果,如以下这些系统的页面:对于每一个页面,我们可以抽象出其结构体

1. 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 PageSystemRegister(void); // 注册所有页面
PPageAction Page(char *name);

#endif

二、产品页面管理器

1.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 PageSystemRegister(void)
{
	extern void MainPageRegister(void);
	MainPageRegister();
}

三、产品页面运行

1.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);
}

四、单元测试

1.page_test.c

#include <sys/mman.h>   // 包含内存映射相关的头文件
#include <sys/types.h>  // 包含系统类型定义的头文件
#include <sys/stat.h>   // 包含文件状态相关的头文件
#include <unistd.h>     // 包含Unix标准函数定义的头文件
#include <linux/fb.h>   // 包含Linux帧缓冲设备相关的头文件
#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)
{
	PageSystemRegister();

	/* 查找名为"main"的页面动作,并执行其Run函数 */
	/* 这里传递了一个NULL参数,表示没有额外的参数传递给Run函数 */
	Page("main")->Run(NULL);
	
	return 0;	
}

2.上机测试

上电开发板,挂载 Ubuntu 的 NFS 目录,编译测试:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1905677.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WAIC热点聚焦|新质生产力与低空经济

WAIC热点聚焦|新质生产力与低空经济 概览 # WAIC热点聚焦 | 新质生产力与低空经济## 1. 新质生产力定义与特点 - 新质生产力是在新的经济社会发展阶段中形成的&#xff0c;具有变革性和高增长潜力的生产能力。## 2. 低空经济概念与构成 ### 2.1 低空经济定义 - 低空经济是依托…

斯坦福CS224n深度学习培训营课程

自然语言处理领域的经典课程涵盖了从基础知识到最新研究的全面内容。本培训营将精选课程内容&#xff0c;结合实际案例和项目实践&#xff0c;带领学员深入探索自然语言处理的前沿&#xff0c;学习最先进的深度学习技术。 课程大小&#xff1a;2.6G 课程下载&#xff1a;http…

仿哔哩哔哩视频app小程序模板源码

仿哔哩哔哩视频app小程序模板源码 粉色的哔哩哔哩手机视频网页&#xff0c;多媒体视频类微信小程序ui前端模板下载。包含&#xff1a;视频主页和播放详情页。 仿哔哩哔哩视频app小程序模板源码

Linux运维:mysql主从复制原理及实验

当一台数据库服务器出现负载的情况下&#xff0c;需要扩展服务器服务器性能扩展方式有向上扩展&#xff0c;垂直扩展。向外扩展&#xff0c;横向扩展。通俗的讲垂直扩展是将一台服务器扩展为性能更强的服务器。横向扩展是增加几台服务器。 主从复制好比存了1000块钱在主上&…

如何在 PostgreSQL 中实现数据的去重操作,尤其是对于复杂的数据结构?

文章目录 一、基本数据类型的去重二、多列数据的去重三、复杂数据结构的去重&#xff08;一&#xff09;数组类型的去重&#xff08;二&#xff09;JSON 类型的去重&#xff08;三&#xff09;结构体类型&#xff08;复合类型&#xff09;的去重 四、使用 GROUP BY 进行去重五、…

102.二叉树的层序遍历——二叉树专题复习

迭代方式&#xff1a; class Solution {// 定义一个成员变量res来存储层序遍历的结果List<List<Integer>> res new ArrayList<>();// levelOrder方法是层序遍历的接口&#xff0c;它接受一个二叉树的根节点rootpublic List<List<Integer>> lev…

计组-测验题6

7.假设有7位信息码0110101&#xff0c;则低位增设偶校验位的代码和低位增设奇校验位后的代码分别是&#xff08;&#xff09; A.01101010 01101010 B.01101010 01101011 C.01101011 01101010 D.01101011 01101011 B 奇校验码&#xff1a;整个校验码&#xff08;有效信息位…

行内元素、块级元素居中

行内元素居中 水平居中 {text-align&#xff1a;center;}垂直居中 单行——行高等于盒子高度 <head><style>.father {width: 400px;height: 200px;/* 行高等于盒子高度&#xff1a;line-height: 200px; */line-height: 200px;background-color: pink;}.son {}&…

码云远程仓库, 回滚到指定版本号

1. 打开项目路径, 右击Git Bash Here 2. 查找历史版本 git reflog 3. 回退到指定版本 git reset --hard 版本号 4. 强制推送到远程 git push -f

shared_ptr的operator = 里都发生了什么

std::shared_ptr<A01> ptr std::make_shared<A01>(); std::shared_ptr<A01> sec ptr; std::shared_ptr<A01> third ptr; std::cout << sec.use_count() << std::endl; sec third; //这一步的时候&#xff0c;计数有哪些逻辑&#xff1…

智能化代码审查系统设计

设计一个智能化代码审查系统&#xff0c;特别是针对Java开发&#xff0c;需要综合考虑多个维度来提升代码质量、提高审查效率&#xff0c;并促进团队间的协作。以下是该系统设计的关键要素和功能特性&#xff1a; 系统架构 客户端-服务器架构&#xff1a;前端提供友好的Web界面…

三级_网络技术_08_IP地址规划技术

1.如果内网的某Web服务器允许外网访问&#xff0c;并且该服务器NAT转换表如图所示&#xff0c;那么外网主机正确访问该服务器时使用的URL是()。 http://59.12.1.1:1423 http://135.2.2.1 http://135.2.2.1:5511 http://192.168.33.11:80 2.如果内网的某FTP服务器允许外网访…

深度学习3 基于规则的决策树模型

1.决策树是一种归纳学习算法&#xff0c;从一些没有规则、没有顺序、杂乱无章的数据中&#xff0c;推理出决 策模型。不管是什么算法的决策树&#xff0c;都是一种对实例进行分类的树形结构。决策树有三个要素&#xff1a;节点(Node)、分支(Branches)和结果(Leaf)。 训练决策树…

在线制作网页PHP源码+IAPPv3源码

好久以前刚学PHP的时候搞的&#xff0c;现在翻出来并修复了一下就分享出来了&#xff0c;希望可以给初学者一点借鉴学习例子&#xff0c;虽然不是很好哈&#xff0c;但拿来耍耍应该还算可以吧。 使用教程 环境是PHP就行&#xff0c;直接把源码上传到服务器&#xff08;虚拟主…

[算法] 优先算法(四):滑动窗口(下)

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

代码随想录算法训练营第五十三天| 739. 每日温度 , 496.下一个更大元素 I , 503.下一个更大元素II

739. 每日温度 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int[] dailyTemperatures(int[] temperatures) {int[] result new int[temperatures.length];Deque<Integer> monoStack new LinkedList<Integer>();for(int i0;i<temperatures…

PXIe-6674T PXIe,OCXO PXI同步模块

PXIe-6674T PXIe&#xff0c;OCXO PXI同步模块 PXIe‑6674T可生成时钟和触发信号&#xff0c;并在单个PXI Express机箱中的多个设备之间路由这些信号&#xff0c;也可将这些信号路由到其他PXI和PXI Express机箱或第三方仪器。 PXIe‑6674T可利用PXI Express的高级低电压差分…

项目一单机安装基于LNMP结构的WordPress网站 web与数据库服务分离

网站的类型&#xff1a; Jave:LNMT PHP:LNMP Python: LNMU 项目部署&#xff1a; 1.项目的类型&#xff08;项目的开发语言&#xff09; 2.项目运营平台的技术选择 3.尽快让项目运行起来 all in one部署 4. 架构的优化 配置ansible管理环境 配置nginx 配置数据库服务…

[Flink]二、Flink1.13

7. 处理函数 之前所介绍的流处理 API,无论是基本的转换、聚合,还是更为复杂的窗口操作,其实都是基于 DataStream 进行转换的;所以可以统称为 DataStream API ,这也是 Flink 编程的核心。而我们知道,为了让代码有更强大的表现力和易用性, Flink 本身提供了多…

数据库性能优化系统设计

设计一个数据库性能优化系统&#xff0c;目标是监测、诊断并改善数据库的运行效率&#xff0c;确保系统能够高效稳定地处理大量数据请求。以下是一个概要设计&#xff0c;包括关键模块、功能和实现思路&#xff1a; 1. 系统架构 分布式监控中心&#xff1a;采用分布式架构收集…