WCH RISC-V 工具链的源代码在哪里?

问题描述 投票:0回答:1

WCH 是著名的 10 美分 RISC-V 微控制器背后的公司,其 RISC-V 工具链基于 Liviu Ionescu 构建的 xPack: https://github.com/xpack-dev-tools/riscv-none-embed-gcc-xpack/releases/tag/v8.2.0-3.1/

两者输出相同的版本字符串:

riscv-none-embed-gcc.exe (xPack GNU RISC-V Embedded GCC, 32-bit) 8.2.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

但是,WCH 的 RISC-V 工具链与 xPack 的工具链之间存在一些细微差别。 WCH 工具链支持更多 RISC-V 指令集,例如:

  • rv32ecwx

  • rv32imacxw

  • rv32imafcxw

 
问题1:

'w'
'x'
字母是非标准 RISC-V 扩展。它们代表什么?

 
我还注意到 WCH 工具链具有以下库,这些库未出现在本机 xPack 工具链中的任何位置:

  • libIQMath_RV32.a

  • libprintf.a

  • libprintfloat.a

 
问题2:
这些非标准库有什么用?我能够使用 WCH 工具链和本机 xPack 工具链构建一个示例项目。在这两种情况下,

printf()
函数都工作得很好,通过
TX
线发送字符。所以我想知道
libprintf.a
库的用途是什么,如果设置在没有该库的情况下也能工作?

 
问题3:
在哪里可以找到 WCH 工具链的源代码和构建说明?

非常感谢。

embedded riscv toolchain gnu-toolchain riscv32
1个回答
0
投票

A1:

来自QingKeV2处理器手册第2页第1.1章(请注意,“V2A”是WCH对CH32V003中使用的RISC-V ISA RTL实现的指定)

  • XW:16位压缩指令,用于自扩展字节和半字操作 注意:为了进一步提高代码密度,请通过添加以下压缩指令来扩展 XW 子集 c.lbu/c.lhu/c.sb/c.sh/c.lbusp/ c.lhusp/c.sbsp/c.shsp,基于MRS编译器或其提供的工具链使用。

注意:您的问题中没有提到的事情,即链接的修改行为,是 CH32V 系列(微控制器)已经优化了集成 CPU/编译器支持的中断硬件。特别是,它们具有快速调用方案,可以在调用调用时隐藏关键寄存器。这减少了延迟,因为它不必将返回地址推送到堆栈。对于实时应用很有用。

A2:

第一个库是 RV 优化的数学库。它本质上是一个固定浮动的实现,提供了两者之间的一些互换。它的“灵感来自”Texas Instruments® C28x IQmath 库。

据我所知,另外两个库将整数和浮点数从原始例程中分离出来。这使得

printf()

 对于大多数任务来说更轻......除非您需要使用 
%f
 功能。 (您应该注意,虽然它基本上按预期编译和工作,但具体来说 
%f
 实际上不起作用。)

A3:

这才是真正的问题。事实上,WCH 使用的源项目受 GPL 保护。事实上,WCH/MRS 获取了该源代码,对其进行了修改,并发布了产品二进制文件。根据 GPL,他们应该被迫在 GPL 许可证的保护下根据请求提供源代码。

我不是中华人民共和国的权威,所以我不能肯定地说 GPL 许可证对他们意味着什么。然而,在网络上快速搜索表明“不多”。

© www.soinside.com 2019 - 2024. All rights reserved.