Woody Home Page
 
   
如何在Linux下编译AR1688 API
  
2007年6月9日
这是个经常被问到的AR1688软件API问题. 答案是可能, 但是需要额外的工作. 检查SDCC\src下的makefile, 其中用了4个工具:
AZ80 = $(PATH_SDCC)BIN\as-z80
CZ80 = $(PATH_SDCC)BIN\sdcc
LZ80 = $(PATH_SDCC)BIN\link-z80
HEX2BIN = $(PATH_SDCC)BIN\hex2bin
前3个工具是SDCC自带的, 只要下载SDCC Linux下编译好的相应软件替换即可. 目前我们使用最新的稳定版本2.7.0.
最后一个hex2bin和我们自己写的, 它的源代码在SDCC\tool\hex2bin中. 它是一个命令行工具, 源程序中大量使用了Windows MFC风格的CFile和CString, Linux用户需要修改相应代码后重新编译.
除了在Linux下编译外, 用户可能还需要在Linux下调试. 唯一的调试手段是用UDP广播输出调试信息. PA1688软件API中带的PalmTool用来接收和显示调试信息. 如果真的要有效开发的话, 用户需要把PalmTool也移植到Linux下.
另外还有些命令行工具, 例如我们用SDCC\tool\convert转换话机设置. 不过修改设置这些工作可以用网页设置界面完成, 不需要再多移植程序到Linux下了.
 
2008年8月11日更新
从AR1688 0.37版本后不再使用PalmTool调试, 改为使用SDCC\bin\manager.exe.
 
2010年11月23日更新
从SDCC版本3.0.0开始Z80编译和链接工具名字改为sdasz80.exesdld.exe.
 
2013年3月10日更新
差不多六年后, 最近Alex Vangelov终于完成了它. 显然他对于编程序的想法和我一致, 在他的邮件开头赫然写着Just for fun(仅仅是娱乐).
由于我是一个Linux编程新手, 我特别有兴趣的把他的代码合并到了我们AR1688软件代码数据库中, 并且做了如下记录:
1) Ne2000.h is renamed to ne2000.h, unix is case sensitive. (Ne2000.h重新命名为ne2000.h, unix区分大小写.) 类似的还修改了很多sdcc\tool下stdafx.h有关的文件. 虽然我已经不记得为什么Ne2000.h成为了sdcc\include下唯一混合了大小写的文件, 我很清楚是Visual Studio自动产生了这些StdAfx.h, 并且以stdafx.h的名字包含在不同的文件中. 看上去象是微软显示自己跟Unix不同的一种方式.
2) Path notation changed from "\\" to "/" in some files for compatibility. (为了兼容性, 某些文件中的路径记号"\\"改为"/".) 这显然是微软显示自己不同的另外一个方式. 其结果是, 现在不仅象SDCC这样的跨平台编译器知道如何处理这总混乱局面, 事实上VC2008也能. 在我的调试过程中, 我甚至发现VC2008能正确处理路径名写成C:\sdcc\src/settings/default_sip.txt的文件!
3) 在sdcc\tool\common下增加了mfc2std.h文件, 用来替代常用的MFC类库如CString. 虽然我不认为我会为了兼容性而完全使用标准C来写下一个PC程序, 我至少会记住把所有MFC相关的代码放在单独不同的地方.
4) relink tool generates linkmain_unix.lnk with linux paths, instead rewriting the existing file. (relink工具在Linux下产生新的linkmain_unix.lnk文件,而不是覆盖原有文件.)
5) Tested on Fedora and Gentoo linux with sdcc version 3.2.0. (在Fedora和Gentoo linux下使用sdcc版本3.2.0测试通过.) 这里就需要特别小心了! 因为SDCC 3.2.0有已知的潜在问题!
所以好消息是, 我们现在有了自己的在Linux下编译AR1688 API的工具. 但是坏消息是, 我们没有合适的SDCC版本! 目前使用的3.0.1 #6078不同于3.0.0, 而且我们没有保存这个临时版本的源代码, 所以无法基于它编译一个Linux版本来使用. 而3.1.0和3.2.0都有潜在问题. 我不得不再次开始调试SDCC目前的最新测试版本, 希望能找到一个可用的. 上周五的的时候我在SDCC网上提交了第23个错误报告.
 
2013年3月11日更新
Alex指出可以在SourceForge svn中下载#6078源代码. 同时他再次修改了sdcc\Makefile, 包括了下载和编译SDCC #6078版本的步骤.
attached modified Makefile with new action "make sdcc", that downloads sdcc revision #6078 from https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc (only z80 related files) in folder ./sdcc_6078. executes configure && make and creates symbolic links of compiled sdcc tools in ./bin folder
* svn command required
result:
SDCC : z80 3.0.1 #6078 (Mar 11 2013) (Linux)
to use local version of sdcc with mk command: in src/Makefile at line 17
AZ80 = ../bin/sdasz80
CZ80 = ../bin/sdcc
LZ80 = ../bin/sdld
* "make sdcc" is optional and not included in "make all"

为保险起见, 我下载了#6078的打包文件, 放到了自己的网站上!

本页面尚无任何评论.

更多选项? 请先登录或者注册. metropolitan-tundra