从旧版本工具迁移
使用低于15.0.1版本的XTC工具的用户会注意到一些变化。本页面旨在为这些变化提供一个合理的解释,并帮助用户快速地转移到15.x.x系列的工具。
背景
15.x.x工具发布代表了XTC工具设计方向上的变化,新的方向是朝着以下方面改进的:
- 在适当的情况下,使用已建立的、符合行业标准的工具和技术
- 相比于维护定制版本,更倾向于将改动上游化到第三方开源项目中
- 遵循广泛使用的接口、格式和约定,使用户能够:
- 从其他平台轻松地过渡到XCore及其工具
- 使用自己喜欢的第三方工具
主要目标是利用最新的工具链技术,同时将XMOS的努力集中在能够产生最大影响的地方。
15.x.x工具版本标志着这一旅程的开始。
编程语言
15.x.x工具中最根本的变化是向使用C/C++代替XC作为XCore的首选编程语言的转变。使用C进行XCore编程的优势有:
- 比XC更灵活;具体来 说,C默认允许指针
- 语义更加明确,没有歧义
- 有大量的网络内容支持
- 对大多数嵌入式软件开发者来说更熟悉
- 更好的第三方工具支持
XCore架构没有任何基本特性需要专有的编程语言。
当你需要编写拥有自己私有内存的CSP风格的任务时,就像在XC中使用的那样,仍然是一种很好的并行编程的实践,建议使用C编程时使用相同的思维模型。XMOS在向使用C/C++的转变的同时,保留了对xcore架构所有独特优势的访问接口,同时也兼具了最新的C和C++特性,并因此修复了原有编程过程中的一些问题。
用XC编写的现有代码
现有的XC源代码不需要移植到C语言。
XC编译器,通过XCC编译器驱动程序访问,将继续作为工具发布的一部分。目前还没有确定移除它的日期。
在决定将一个基于XC库移植到C语言时,用户可以考虑只移植公共API以提高效率,而不是整个库。
XC编译器本身将继续为现有的应用程序和库提供维护。但不会考虑新特性的请求或性能上的优化。
关于在旧版本的工具发布中开发的项目的指导,请参见迁移现有项目。
新代码
所有新的过程式代码都应该使用C语言编写。
由于XCore的底层硬件特性不能通过C语言本身直接访问,因此提供了一个新的系统库lib_xcore。在指南中介绍了如何使用这个新库:使用C语言和lib_xcore编程XCore tiles。
当新的C代码需要与现有的XC代码交互时,应该遵循现有的指导。请参考在C/C++和XC之间调用。
目前,编写多tile应用程序仍然需要编写一个最小的声明式XC源文件,通常称为mapfile.xc,如示例所示:针对多个tile的目标 和 在tile之间进行通信。该文件不应包含任何过程代码,只应包含最少的内容,以便:
- 在每个tile上声明一个C入口点
- 通过开关引导任何后续的tile间通信
后续版本的工具将提供替代的方式来提供声明式信息和相应的C源代码生成器。保持mapfile.xc的内容为纯粹的声明式代码,能够确保任何迁移都很简单。
C语言不包含XC的[[combine]]或[[combinable]]关键字的等价实现。现在可以使用协作调度手动地将任务组合到一个逻辑核上,或者使用C和lib_xcore暴露的功能和性能,甚至使用RTOS来实现。
类似地,C语言没有对应XC接口的等价物,XC接口是通过interface关键字访问的。接口的实现以及它们底层的传输和协议现在可以由应用程序开发者来完成,这样可以增加选择适合实时需求和资源可用性限制的实现的范围。
使用C语言编程时,应该注意避免不安全地并发访问共享内存,这一点XC语言可以保护用户。同样,应该注意确保资源在使用前/后正确分配和释放,因为这种分配不是由语言本身处理的。这些都是C程序员正常考虑的问题。
有经验的XC用户转向C/lib_xcore时,以下资源可能会有帮助:
youtube 视频:Technical Guide to C for xcore
以下书签提供了方便的访问视频的方式,以便后续参考:
视频中使用的演示文稿可以下载:C_for_xCore_2021_02_08.pdf
此外,还提供 了一个XC到C的速查表。
图形化IDE
15.x.x工具在安装包中不包含图形化IDE。相反,这些工具旨在与用户喜爱的IDE集成,如配置IDE中的示例所示。这样的选择使用户能够利用最新的IDE技术。
离线XSCOPE输出的查看也委托给用户喜爱的VCD查看器。在使用XSCOPE进行快速“printf调试”中演示了使用GTKWave的方法,但也有其他查看器可用。
迁移现有项目
使用15.x.x工具开发生命周期在早期工具版本下开始的现有项目时,需要对配置文件和过程进行一些非常小的更改。本页收集了有关进行更改的有用指针。
与闪存相关的更改
目标XN文件更改
以前的工具包版本警告说即将对目标XN文件的模式进行更改。现在已经进行了这种更改。因此,如果出现类似于以下的构建错误:
.././src/core/xk-audio-216-mc.xn:86 Error: XN11052 Invalid or missing PageSize for device "bootFlash". Information: Device elements with attribute Class="SQIFlash" now also require PageSize, SectorSize & NumPages attributes to be set. Values for these are likely to be found in the datasheet for the chosen flash.
…然后,需要调整项目的目标“.xn”文件。至少,必须设置PageSize、SectorSize和NumPages属性。也可能需要添加额外的Attribute元素。下面的XCORE-200-EXPLORER.xn文件突出显示了更改的部分:
<ExternalDevices>
<Device NodeId="0" tile="0" Class="SQIFlash" Name="bootFlash" Type="S25FL116K" PageSize="256" SectorSize="4096" NumPages="8192">
<Attribute Name="PORT_SQI_CS" Value="PORT_SQI_CS"/>
<Attribute Name="PORT_SQI_SCLK" Value="PORT_SQI_SCLK"/>
<Attribute Name="PORT_SQI_SIO" Value="PORT_SQI_SIO"/>
<Attribute Name="QE_REGISTER" Value="flash_qe_location_status_reg_1"/>
<Attribute Name="QE_BIT" Value="flash_qe_bit_1"/>
</Device>
</ExternalDevices>
QE_REGISTER和QE_BIT元素提供了关于在哪里可以找到4bit使能位的信息,该位可以将闪存设备从SPI模式切换到QSPI模式。有关这方面的信息可以在所需设备的数据手册中找到,不过按照惯例,所需的值通常是如上所示(reg_1:bit_1)或reg_0:bit_6。
XFLASH 选项变更
随着 15.x.x 工具的发布,XFLASH 不再执行映像压缩,因此它的默认行为和唯一行为是不压缩映像。因此,不再提供 xflash --no-compression 选项。只需不使用该选项即可。
XFLASH 升级映像指南
如果使用 15.x.x 版本的工具生成用于在早期工具版本下创建的工厂映像的闪存升级映像,请确保提供 xflash --factory-version 的正确值。
XTAG 相关变更
XTAG 驱动程序已更改,因此需要重新启动/配置 XTAG。