关于51单片机移植u8g2失败经历

关于51单片机移植u8g2失败经历

前言

因为没买stm32的单片机,但是用了SSD1306的OLED显示屏,想着既然移植u8g2库到stm32很简单,那自然也能移植到51单片机吧,看来还是我太年轻了

前排提示,据我的研究,移植u8g2库到51并非一个理智的行为,至于为什么如此,下面我们就来讨论一下

关于C51的关键字

C51有一些特殊的关键字,如dataxdata这类,其实是规定一个变量在数据中是如何存储的,我遇到的第一个问题就是,u8g2中有不少的代码都使用到了data作为变量名,这导致了许多代码的识别直接出现了问题,因为编译器只把它当成关键字

关于数组超限的问题

这个方便解决,用C51新添加的关键字,在数组声明前写上code关键字,将其移至flash中即可

关于8051对函数指针not well suit

Basically, the 8051 is not “just another processor” that you can program as you would a PC, etc.The 8051 architecture has some very specific optimisations that make it very good for some things,and very poor for others - and function pointer is one of those things to which it is not well suited!

这段话打破了我一整天的努力,因为u8g2库里重要的结构体有好几个成员变量都是函数指针,这意味着移植它到51单片机并非良构,虽然可以使用规定变量存储位置的方法解决一部分错误,终究还是不能解决所有的问题,也正是因为如此,这一个大坑直接扼杀了我移植的道路

最后

终究还是只能是随便玩玩,还不如自己写呢
现在我已经成功的让字符在上面显示了,也算是曲折的完成了原先任务(的1/10)了吧
图中使用的开发板是普中的51开发板