DAPLINK编译使用python2还是python3
在DAPLINK进行源码编译的时候,需要依赖python的环境,来执行一些工具脚本。那么问题就来了,马上python2支持就要到期了,到底我使用2还是3?
如果你还不清楚daplink的编译流程可以查看我之前的文章:https://www.eemaker.com/daplink-yuanmabianyi.html
但是需要强调的是之前的编译是基于python2版本的。所以为了顺应时代潮流的发展我们也对不同版本的DAPLINK源码可否使用python3进行的测试。
截至到目前,ARM官方发布的最新版本固件为0254版本。但是我们却更建议用户使用0253版本来作为你二次开发编译的版本。下面是我们针对最新的三个版本进行了测试:
是否支持python2 | 是否支持python3 | |
0252版本 | 是 | 是 |
0253版本 | 是 | 是 |
0254版本 | 是 | 编译会出错 |
以上信息是笔者根据实际测试的结果。最新版本0254在使用python3编译的时候会有错误。0252和0253就可以随意使用python2或者python3都可以。所以我们建议如果不是特别依赖0254的新功能就使用0253版本代码来做编译开发。
那么如果就想使用python3环境来作为0254编译开发是否不可行,实际上也可以解决。我们先看下编译时候在MDK信息框中的错误提示:
File “……\tools\post_build_script.py”, line 144
pack_flash_algo.symbols[‘EraseChip’] + blob_header_size + flash_blob_entry if pack_flash_algo.symbols[‘EraseChip’] != 0xffffffffL else 0,
如上所示,实际上这个错误是源于python3和python2中有些语法不兼容导致的,那么我们就可以修复它,找到post_build_script.py 这个文件,并把里面所有的0xffffffffL结尾的‘L’去掉。
然后重新编译你会发现还有一个错误,这个错误修复办法为:修改 .\tools\flash_algo.py 文件中 import StringIO为from io import StringIO
经过以上两个步骤,0254版本的源码也可以使用python3编译成功。但是修改过的已经不能再基于python2进行编译。所以我宁愿使用0253的软件版本,想用哪个用哪个。
2021年4月5日更新
到目前为止,从github上拉取最新的源码可完全使用python3编译了,所以大家也可以不用纠结了,python2已经淘汰了,之后都默认安装python3就可以了。