主机环境:Win10 64bit
开发环境:MDK5.23
目标板:LPC54608
之前在NXP论坛里得到了一块LPC54608开发板,最吸引人的地方是带了一块屏,如下图:
这也是第一次接触NXP的开发板,之前一直都是用的ST的MCU,NXP的库跟ST的还是差别蛮大的,自我感觉ST的开发入手要快一些,而NXP的相对慢一些,入手开发板之后就看了库里面自带的一些基本驱动例程,只熟悉了一下基本外设的开发,之前有次在群里看到有人询问单片机生成PDF的问题,突然觉得有些兴趣所以就有了前面的libHaru学习笔记,libHaru库是一个十分不错的库,对于PDF的实现来说也是相当齐全的,在PC上使用是完全没有问题的,但在资源紧张的MCU上,还是有些困难的,因此就想找一下适用于MCU的生成PDF的库,结果不太理想,都是一些需要实现动态内存管理的平台才行,而且这些库都是把生成的数据放在了内存中,直到保存文件时才写入到文件中,这对于一般只有几十或者几百KB级别的单片机来说更不可能了,于是乎,萌发了自己动手写一个基本的能用于MCU的生成PDF文件的库,我称之为libpdf,其中的接口参考了libHaru,如下所示:
当然有些接口还没有实现,但基本的操作还是可以的,等以后再逐渐完善吧,pdflib是生成pdf文件的,因此要基于Fatfs来实现文件的操作,pdflib库只有两个文件,也相应的参考了pdfgen库,该库在后面有链接,
头文件如下:
#ifndef __PDFLIB_H__
#define __PDFLIB_H__
#include "ff.h"
/*----- standard C library functions -----------------------------------------*/
#define LPDF_FOPEN f_open
#define LPDF_FCLOSE f_close
#define LPDF_FREAD f_read
#define LPDF_FWRITE f_write
#define LPDF_FFLUSH f_sync
#define LPDF_FSEEK f_seek
#define LPDF_FTELL f_tell
#define LPDF_FEOF f_eof
#define LPDF_FERROR f_error
#define LPDF_RENAME f_rename
#define LPDF_REMOVE f_unlink
#define LPDF_MALLOC malloc
#define LPDF_FREE free
#define LPDF_FILE FIL
#define LPDF_TIME time
#define LPDF_PRINTF printf
#define LPDF_SPRINTF sprintf
#define LPDF_FPRINTF f_printf
#define LPDF_VOID void
#define LPDF_SIN sin
#define LPDF_COS cos
/* native OS integer types */
typedef signed int LPDF_INT;
typedef unsigned int LPDF_UINT;
/* 32bit integer types
*/
typedef signed int LPDF_INT32;
typedef unsigned int LPDF_UINT32;
/* 16bit integer types
*/
typedef signed short LPDF_INT16;
typedef unsigned short LPDF_UINT16;
/* 8bit integer types
*/
typedef signed char LPDF_INT8;
typedef unsigned char LPDF_UINT8;
/* 8bit binary types
*/
typedef unsigned char LPDF_BYTE;
/* float type (32bit IEEE754)
*/
typedef float LPDF_REAL;
/* double type (64bit IEEE754)
*/
typedef double LPDF_DOUBLE;
/* boolean type (0: False, !0: True)
*/
typedef signed int LPDF_BOOL;
/* error-no type (32bit unsigned integer)
*/
typedef unsigned long LPDF_STATUS;
#define LPDF_OK 0
#define LPDF_FAILED 1
/*----- font state -----------------------------------------------------------*/
#define LPDF_FONT_INVALID 0x00FF
#define LPDF_FONT_COURIER 0x0000
#define LPDF_FONT_COURIER_B 0x0001
#define LPDF_FONT_COURIER_O 0x0002
#define LPDF_FONT_COURIER_OB 0x0003
#define LPDF_FONT_HELVETICA 0x0004
#define LPDF_FONT_HELVETICA_B 0x0005
#define LPDF_FONT_HELVETICA_O 0x0006
#define LPDF_FONT_HELVETICA_BO 0x0007
#define LPDF_FONT_TIMES_R 0x0008
#define LPDF_FONT_TIMES_B 0x0009
#define LPDF_FONT_TIMES_I 0x000A
#define LPDF_FONT_TIMES_BI 0x000B
#define LPDF_FONT_SYMBOL 0x000C
#define LPDF_FONT_ZAP 0x000D
/*----- Graphis mode ---------------------------------------------------------*/
#define LPDF_GMODE_PAGE_DESCRIPTION 0x0001
#define LPDF_GMODE_PATH_OBJECT 0x0002
#define LPDF_GMODE_TEXT_OBJECT 0x0004
#define LPDF_GMODE_CLIPPING_PATH 0x0008
#define LPDF_GMODE_SHADING 0x0010
#define LPDF_GMODE_INLINE_IMAGE