小编Leo*_*231的帖子

GPL 的 RISC-V 实现?

我可以在 GPL-v3 下发布 RISC-V 实现(用 VHDL 或 Verilog 编写)吗?如果是这样,我必须给予什么额外的“信用”等?

RISC-V 站点上的 FAQ 说 ISA 规范是通过 BSD 许可证获得许可的,但是 BSD 许可证是专门讨论许可源代码和二进制文件的,所以我不明白他们是如何应用它的。

任何人都可以解释他们的许可是如何工作的,并指向我实际拥有许可的网站上的链接吗?

riscv

5
推荐指数
1
解决办法
733
查看次数

带有“return”语句的多行宏函数

我目前正在开发一个项目,某个特定部分需要一个多行宏函数(据我所知,常规函数在这里不起作用)。

目标是创建一个堆栈操作宏,从堆栈中提取任意类型的数据(来自函数调用的内部堆栈,而不是高级“堆栈”数据类型)。如果它是一个函数,它看起来像这样:

type MY_MACRO_FUNC(void *ptr, type);
Run Code Online (Sandbox Code Playgroud)

type从堆栈中提取的数据类型在哪里。

我目前在我的平台(AVR)上有一个有效的实现:

#define MY_MACRO_FUNC(ptr, type) (*(type*)ptr); \
    (ptr = /* Pointer arithmetic and other stuff here */)
Run Code Online (Sandbox Code Playgroud)

这允许我写一些类似的东西:

int i = MY_MACRO_FUNC(ptr, int);
Run Code Online (Sandbox Code Playgroud)

正如您在实现中所看到的,这是有效的,因为分配的语句i是宏中的第一行:(*(type*)ptr)

然而,我真正想要的是能够在此之前有一个声明,以在任何内容被破坏之前验证它ptr是一个有效的指针。但是,这将导致宏通过int i =指向该指针检查来扩展。在标准 C 中有什么办法可以解决这个问题吗?谢谢你的帮助!

c macros

3
推荐指数
1
解决办法
6686
查看次数

标签 统计

c ×1

macros ×1

riscv ×1