前两篇文章已经实现ZBar在Windows平台下的编译和使用,本文将介绍如何把ZBar移植到STM32F429,IDE使用MDK。
1. MDK工程设置
(1)不勾选Use MicroLIB ,使用ISO C。
如MDK 帮助文档关于MicroLIB的介绍,故在硬件资源允许的情况还是优先使用ISO C。
(2)勾选C99 Mode,因为ZBar源码是基于C99的
(3)不勾选Use Memory Layout From Target Dialog,使用自定义Scatter File
2.工程目录结构
3. ZBar源码修改地方
由于MDK使用的编译器不是GCC,故不能支持一些特殊GCC语法和相应的C库函数。
(1) error.c和error.h文件中strdup函数报错。
处理方法:屏蔽该函数相关代码或者自己实现strdup函数
(2) 屏蔽img_scanner.c文件中的
..... //#include <unistd.h> //#include <time.h> /* clock_gettime */ //#include <sys/time.h> /* gettimeofday */ .... // struct timeval abstime; // gettimeofday(&abstime, NULL); // iscn->time = (abstime.tv_sec * 1000) + ((abstime.tv_usec / 500) + 1) / 2; .....
(3) GCC默认void*为char*,MDK的编译器对void指针的加减操作当作错误处理
处理方法:把void指针强制转换为char指针
4. 系统存储空间分配
对于STM32来说ZBar对Heap消耗较大,跟解析的二维码图片大小有关,将系统未使用的内存 全部分配给Heap。
Scatter file 如下
LR_IROM1 0x08000000 0x00100000 { ; load region size_region ER_IROM1 0x08000000 0x00100000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$