注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

小白的博客

嵌入式爱好者

 
 
 

日志

 
 

数码相框——电子书程序阅读笔记  

2012-09-02 11:50:51|  分类: 项目班视频 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1、getopt
getopt(argc, argv, "ls:f:h:d:")
每调用一次,就会解析一个选项,optarg指向选项的参数。
单个字符:表示后面没有参数
单个字符加“:”:表示后面是空格加参数
单个字符加“::”:表示后面紧跟参数

2、strtoul
strtoul(optarg, NULL, 0);
将oprarg转化为10进制数
第一个参数:要转换的原数
第二个参数:不常用
第三个参数:表示第一个参数是多少进制的。比如16说明optarg是10进制的,0表示optarg是10进制的!

3、
AddFontOprForEncoding(&g_tAsciiEncodingOpr, GetFontOpr("freetype"));
AddFontOprForEncoding(&g_tAsciiEncodingOpr, GetFontOpr("ascii"));
AddFontOprForEncoding(&g_tAsciiEncodingOpr, GetFontOpr("gbk"));

int AddFontOprForEncoding(PT_EncodingOpr ptEncodingOpr, PT_FontOpr ptFontOpr)
{
PT_FontOpr ptFontOprCpy;
if (!ptEncodingOpr || !ptFontOpr)
{
return -1;
}
else
{
ptFontOprCpy = malloc(sizeof(T_FontOpr));
if (!ptFontOprCpy)
{
return -1;
}
else
{
memcpy(ptFontOprCpy, ptFontOpr, sizeof(T_FontOpr));
ptFontOprCpy->ptNext = ptEncodingOpr->ptFontOprSupportedHead;
ptEncodingOpr->ptFontOprSupportedHead = ptFontOprCpy;
return 0;
}
}
}

分析:首先freetype字体结构体指向head,head初始值为NULL,所以freetype字体结构体指向NULL,head指向freetype字体结构体;然后ascii字体结构体指向head,也就是指向freetypt字体结构体,head变为指向ascii字体结构体;再然后,gbk字体结构体指向head,也就是ascii字体结构体,head指向gbk字体结构体。分析的重点在于分清楚哪些是具体分配了空间的结构体,哪些是指针,分清楚之后,一切了然!

4、bList
如果命令行有-l选项的话,就会将bList设置为1,那么就会显示本程序所支持的显示器、字体与编码!

5、OpenTextFile(acTextFile);
功能:打开文本文件,并判断是什么编码的文件!

6、SetTextDetail(acHzkFile, acFreetypeFile, dwFontSize);
功能:对本编码所支持的所有字体文件进行初始化!

7、SelectAndInitDisplay(acDisplay);
功能:选择并初始化显示器!

8、 
ShowNextPage();
     ShowOnePage(pucTextFileMemCurPos);
           //获得编码
          g_ptEncodingOprForFile->GetCodeFrmBuf(pucBufStart, g_pucTextFileMemEnd, &dwCode);
          //根据编码获得位图
          ptFontOpr->GetFontBitmap(dwCode, &tFontBitMap);
          //处理换行、与满页的情况
          RelocateFontPos(&tFontBitMap)
          ShowOneFont(&tFontBitMap)//显示一个字体
          tFontBitMap.iCurOriginX = tFontBitMap.iNextOriginX;//下一个字体的原点
          tFontBitMap.iCurOriginY = tFontBitMap.iNextOriginY;

其实这个程序里面主要的难点就是ShowNextPage这个函数,而这个函数里面的难点就是位图的获取以及对换行换页的处理!对于这一切问题,我们要紧抓一点,那就是:所有的坐标都是lcd坐标,不是笛卡尔坐标!

接下来我们介绍一些本程序里面用到的一些函数:

(1)void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset);
参数:
fd:即将映射到进程空间的文件描述字,一般由open()返回。
len:映射到调用进程地址空间的字节数,它从被映射文件开头offset个字节开始算起。
prot:参数指定共享内存的访问权限。可取如下几个值的或:PROT_READ(可读),PROT_WRITE(可写),PROT_EXEC(可执行),PROT_NONE(不可访问)。
flags:由以下几个常值指定:MAP_SHARED, MAP_PRIVATE, MAP_FIXED。其中,MAP_SHARED,MAP_PRIVATE必选其一,而MAP_FIXED则不推荐使用;如果指定为MAP_SHARED,则对映射的内存所做的修改同样影响到文件。如果是MAP_PRIVATE,则对映射的内存所做的修改仅对该进程可见,对文件没有影响。
offset:参数一般设为0,表示从文件头开始映射。
addr:指定文件应被映射到进程空间的起始地址,一般被指定一个空指针,此时选择起始地址的任务留给内核来完成。函数的返回值为最后文件映射到进程空间的地址,进程可直接操作起始地址为该值的有效地址。

(2)void *memset(void *s,int c,size_t n)
功能:将已开辟内存空间s的首 n 个字节的值设为值 c

(3)fstat(g_iFdHZK, &tStat)
功能,获得文件信息,存放在tStat结构体里面。
struct stat
{
    dev_t       st_dev;     /* ID of device containing file -文件所在设备的ID*/
    ino_t       st_ino;     /* inode number -inode节点号*/
    mode_t      st_mode;    /* protection -保护模式?*/
    nlink_t     st_nlink;   /* number of hard links -链向此文件的连接数(硬连接)*/
    uid_t       st_uid;     /* user ID of owner -user id*/
    gid_t       st_gid;     /* group ID of owner - group id*/
    dev_t       st_rdev;    /* device ID (if special file) -设备号,针对设备文件*/
    off_t       st_size;    /* total size, in bytes -文件大小,字节为单位*/
    blksize_t   st_blksize; /* blocksize for filesystem I/O -系统块的大小*/
    blkcnt_t    st_blocks;  /* number of blocks allocated -文件所占块数*/
    time_t      st_atime;   /* time of last access -最近存取时间*/
    time_t      st_mtime;   /* time of last modification -最近修改时间*/
    time_t      st_ctime;   /* time of last status change - */
};

(3)DBG_PRINTF("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);
1. __FILE__ 是内置宏 代表源文件的文件名 
    __LINE__ 是内置宏,代表该行代码的所在行号 
    __FUNCTION__是内置宏,代表当前在哪个函数里面
\ 是行连接符,会将下一行和前一行连接成为一行,即将物理上的两行连接成逻辑上的一行

2. __FILE__, __LINE__, __FUNCTION__是编译的时候已经内置了的几个宏,用来表明当前程序运行到了哪个源文件的哪一行,同时表明当前在哪个函数里面。

3. 一般用于调试打印信息函数中,方便查找问题的出处。
  评论这张
 
阅读(916)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017