二维码开源库ZBar-MDK STM32F429移植

本文详细介绍了如何将二维码识别库ZBar移植到STM32F429微控制器上,使用MDK作为IDE。主要内容包括MDK工程设置、工程目录结构、ZBar源码的修改、系统存储空间分配、启动文件的调整以及测试代码的编写。在移植过程中,解决了strdup函数不兼容、void指针处理和堆分配等问题,最终实现了ZBar在STM32F429上的成功运行,尽管存在小的识别问题。
摘要由CSDN通过智能技术生成

前两篇文章已经实现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$$
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值