[单片机芯片] 沁恒 CH32 的 C 语言编程:RISC-V 中断与属性声明实践

[复制链接]
14|1
沁恒的 CH32V 系列是 RISC-V 内核,用 C 语言开发时有几个和 ARM 不太一样的地方:

1. 中断服务函数要用工具链规定的属性声明,函数名与启动文件中的向量表符号对应;漏写属性时编译能通过,但不会正确保护现场。

2. RISC-V 的中断控制器通过 CSR 配置,使能中断的读-改-写要用带原子语义的指令,避免与正在发生的中断竞争。

3. 内联汇编里访问 CSR 时,汇编模板中的寄存器约束要和 C 变量类型匹配,否则会出现高位被截断的隐蔽问题。

4. 全局中断的开与关建议用单条 CSR 指令完成,比先读再写更安全。

5. RISC-V 的调用约定与 ARM 不同,跨平台移植汇编代码时要重新检查参数寄存器和压栈顺序。

以上,供参考。
AdaMaYun 发表于 2026-9-19 16:58 | 显示全部楼层
RISC-V中断用__attribute__((interrupt))声明ISR并注意保存上下文;aligned/weak等属性声明能提升可移植性,中断向量表按链接脚本统一管理。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

435

主题

3681

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部
0