STM32 u8g2 移植笔记

前言

当初想写一个单色屏菜单时,曾移植过u8g2到STM32平台(这里用的是keil MDK),不过当时一直有一个问题没有搞懂:为什么u8g2用在flash为32k,ram为2k的arduino uno上都不会报空间不足,却在flash为512k,ram64k的stm32zet6上报错空间不足?这是由编译器导致的,arduino使用的是avr-gcc编译器在编译的时候会加-ffunction-sections -fdata-sections,链接的时候会加-Wl,-gc-sections选项,因而可以只链接用到的函数。stm32编译选项中有个类似的选项One ELF Section per Function,勾选该项可以极大的减少flash空间的占用,但仍不能解决空间不足的问题。

u8g2为什么需要这么大的flash空间?

  1. u8g2支持上百种屏幕,包含的太多的驱动函数。
  2. u8g2支持很多种字体,字体也占据了较多的空间

移植

这里的移植是针对于keil MDK开发STM32。

移植策略

一般而言对于移植库,不建议更改原码,但鉴于上面的问题,为达到更好的使用效果,我们需要修改原码:

  1. 修改u8g2_d_memory.c文件
  2. 工程中只添加需要用到的屏幕的驱动文件

移植过程

  1. 从官网下载原码
  2. 目前只移植c语言版本,因而只需要将用到csrc文件夹内的文件,将其复制到工程目录。
  3. 将原码添加到工程中,注意对于驱动文件(u8x8_d_xxx.c)我们只需要添加用到的哪一个型号就可以了,这里我用到的是u8x8_d_st7920.c。其余库文件全部添加到工程中,这里需要修改u8g2_setup.c文件,将未用到的函数全部注释掉。
  4. 修改u8g2_d_memory.c文件,将各个函数中的static uint8_t buf[xxx]注释掉,只在文件开始的地方定义一个全局的static uint8_t buf[1024];
  5. 将编译器的优化级别调整为-O2或-O3,否则还是会因为字体的原因出现链接时空间不足的问题,后面可以将字体文件存储到flash(w25q64)中。

stm32 u8g2移植笔记相关推荐

  1. MPU9250 使用 DMP 输出姿态角:DMP 库到 STM32 平台移植笔记

    本文开发环境: MCU型号:STM32F103C8T6 IDE环境: MDK 5.27 代码生成工具:STM32CubeMx 5.6.1 HAL库版本:STM32Cube_FW_F1_V1.8.0 本 ...

  2. u8g2 stm32移植笔记

    U8g2移植笔记 下载地址 移植步骤 部分源码简要分析 下载地址 U8g2下载地址U8g2项目Github. 移植步骤 我移植U8g2采用的是stm32硬件SPI,可以提供更高的通讯速率,移植时只需要 ...

  3. micropython STM32移植笔记(一)

    micropython STM32移植笔记(一) 首先,我是一个搞硬件的,说白了是做电路的,呵呵... 一直想学一些软件,只会搞硬件的工程师是没有灵魂的,画了7年的PCB板卡了,但是每次调试硬件都要求 ...

  4. STM32 FSMC学习笔记+补充(LCD的FSMC配置)

    STM32 FSMC学习笔记+补充(LCD的FSMC配置) STM32 FSMC学习笔记 STM32 FSMC的用法--LCD 转载于:https://www.cnblogs.com/LittleTi ...

  5. AT91RM9200Linux移植笔记(三)-移植Linux kernel 2.6.17

    AT91RM9200Linux移植笔记(三)-移植Linux kernel 2.6.17 手上板子原来自带的是2.4.19的内核, 打算移植新的2.6的内核,从网上下了2.6.17的kernel,下载 ...

  6. stm32移植paho_如何在STM32上移植Linux?超详细的实操经验分享

    原标题:如何在STM32上移植Linux?超详细的实操经验分享 刚从硬件跳槽为嵌软时,没有任何一丝的准备.一入职,领导就交代了一项特难的任务--在stm32上移植linux! 瞬间我就懵了,没办法硬着 ...

  7. cebemax hal库 stm32 OLED移植 解析

    cebemax hal库 stm32 OLED移植 序言: 这是一篇对于作者对于将OLED的驱动代码移植成hal库的文章,会有完整的过程,后面自然也会有完整的代码,希望能够帮到大家,同时也是做一个记录 ...

  8. 以太网芯片W3100A到W3150A+的移植笔记(一)

    最近很多用户咨询 W3100A,由于W3100A已经停产.在此希望给大家介绍一下,W3100A可移植到其他芯片的方式及途径,供大家更好的拓展您项目的沿用性,期待能对您有所帮助.今天先为大家介绍第一部分 ...

  9. 【TINY4412】U-BOOT移植笔记:(9)SD卡启动U-BOOT

    [TINY4412]U-BOOT移植笔记:(9)SD卡启动U-BOOT 宿主机 : 虚拟机 Ubuntu 16.04 LTS / X64 目标板[底板]: Tiny4412SDK - 1506 目标板 ...

最新文章

  1. python小工具封装_python接口自动化(二)——封装需要用到的工具类
  2. 知乎热议:高数、线代应该成为计算机专业学习的重心吗?
  3. MindCon | 5天啦,你有领取MSG城市专属徽章吗?
  4. Uart接口的详细解释
  5. 什么都不说,来4波js
  6. EXTJS+JSP上传文件带进度条
  7. JDK1.5英文版CHM文档下载地址
  8. QT界面 全屏显示 自适应显示 多屏显示
  9. hibernate一对多关系
  10. JMeter教程1 - 介绍环境搭建 (Mac)插件安装
  11. 百度云盘照片导入华为相册里_怎么把云相册的照片导到手机相册里?
  12. [GYM103660] The 19th Zhejiang University City College Programming Contest 浙大城市学院校赛VP/S
  13. SQL 语句多表联查
  14. Cloudera是个什么东西
  15. 文科生如何就量子物理和相对论谈笑风生? 我读过的10本有料有趣科普书
  16. 有哪一刻你彻底恨上了你的老师?
  17. Ubuntu部署sbt
  18. .text‘ will not fit in region `ROM‘, region `ROM‘ overflowed by 3056 bytes问题记录
  19. C# Settings.settings
  20. Web课程设计案例(简单实现网站)

热门文章

  1. 在firefox下载不收费的HackBar
  2. NR 物理资源(pointA,PRB,CRB之间关系)
  3. 数据结构课程设计报告(附代码)
  4. Android获取百度音乐的音乐下载地址和歌词下载连接
  5. GAT网络为什么占用那么多的显存
  6. 20种常用的运放典型电路
  7. 暴走gif失落的出处_暴走gif表情包 - 暴走gif微信表情包 - 暴走gifQQ表情包 - 发表情 fabiaoqing.com...
  8. 如何解决QQ能上网,但是浏览器无法联网的问题
  9. [Python 爬虫] 使用 Scrapy 爬取新浪微博用户信息(四) —— 应对反爬技术(选取 User-Agent、添加 IP代理池以及Cookies池 )
  10. 深入理解 Linux 2.6 的 initramfs 機制 (上)