Linux基础项目开发1:量产工具——页面系统(六)

简介: Linux基础项目开发1:量产工具——页面系统(六)

一、数据结构抽象

很多产品的页面设计都有类似的效果,如以下这些系统的页面

对于每一个页面,抽象出如下结构体,

核心在于其中的Run函数:

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

第10行:注册一个页面

第11行:注册多个页面

第12行:在链表里找到同名的页面名字

二、页面管理器

页面管理器用来管理页面,只需要实现2个函数:

1. PagesRegister : 把多个页面注册进链表

2. Page(name) :取出某个页面

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();
}
 

第6行:存放链表头

第8~12行:链表,用于将页面头文件注册到链表里,与头文件进行链接

第14~26行:在链表中找到同名的页面

三、单元测试

创建一个PageAction MainPage:

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

第7行:__FILE__文件,__FUNCTION__ 函数名,__LINE__ 行数

第17行:将构建的结构体注册进上层的页面管理器

2.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; 
}
 
 

第16行:将页面管理器注册进去

第17行:调用Page里面的Run函数传入NULL

3.unitttest下的Makefile

EXTRA_CFLAGS  := 
CFLAGS_file.o := 
 
#obj-y += disp_test.o
#obj-y += input_test.o
#obj-y += font_test.o
#obj-y += ui_test.o
obj-y += page_test.o

4.page下的Makefile

EXTRA_CFLAGS  := 
CFLAGS_file.o := 
 
obj-y += page_manager.o
obj-y += main_page.o

四、上板测试

1.ubuntu上

book@100ask:~/source$ make
book@100ask:~/source$ cp -r 23_page_unittest/ ~/nfs_rootfs/

2. 开发板上

[root@100ask:/]#  mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt
[root@100ask:/mnt/23_page_unittest]# ./test ./simsun.ttc

3.运行效果:


目录
相关文章
|
7天前
|
资源调度 JavaScript 搜索推荐
Linux系统之部署envlinks极简个人导航页
【4月更文挑战第11天】Linux系统之部署envlinks极简个人导航页
41 2
|
10天前
|
缓存 Linux 测试技术
安装【银河麒麟V10】linux系统--并挂载镜像
安装【银河麒麟V10】linux系统--并挂载镜像
61 0
|
10天前
|
监控 Unix Linux
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
26 0
|
8天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
25 6
|
10天前
|
Linux
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
21 0
|
3天前
|
运维 网络协议 Unix
18.系统知识-Linux常用命令
18.系统知识-Linux常用命令
|
12天前
|
Prometheus 监控 Cloud Native
【Linux】查看系统内存命令(详细讲解)
【Linux】查看系统内存命令(详细讲解)
|
7月前
|
缓存 Ubuntu Linux
Vim编辑器入门指南:安装、基本操作和高级技巧详解 | 适用于Linux系统
Vim编辑器入门指南:安装、基本操作和高级技巧详解 | 适用于Linux系统
280 0
|
8月前
|
Oracle 关系型数据库 Linux
Virtualbox上安装Linux系统(CentOS7)(图文超详细)
Virtualbox上安装Linux系统(CentOS7)(图文超详细)
261 0
|
1月前
|
关系型数据库 MySQL Linux
【VMware安装+centos 7Linux系统+MySQL安装】——在Linux系统中安装MySQL步骤,以及遇见的各种问题(如:vm两个虚拟网卡消失、vm网络适配器有感叹号等等)
【VMware安装+centos 7Linux系统+MySQL安装】——在Linux系统中安装MySQL步骤,以及遇见的各种问题(如:vm两个虚拟网卡消失、vm网络适配器有感叹号等等)
178 0