前言
虽然但是,由于…
总之,要不是宏晶出了STC32
,与很凑巧的有组别要用,应该不会有人想尝试没啥人用的C251
。
成本没8位低,性能没32位强。要不是有个芯片要用都不知道C251
是16位。
而且只有Keil
的C251
版本支持编译,想找个第三方编译器都没有
最重要的是Keil_C251
目前和Keil_ARM
上古版本看齐,安装界面还有一个2018,既不支持代码补全,也不支持新的C标准,而且错误提示也蠢的一批
虽然说最新的Keil_ARM
也没好到哪去
至少题目刚出的时候Keil VScode Assistant
插件不支持C251
但是在查资料的时候偶然看到最近更新加入了对C251
的支持
教程
挺简单的吧,应该都知道吧
- 扩展里搜索安装
Keil VScode Assistant
- 在扩展配置里填入
Keil_C251
的安装路径
- 在
VScode
-资源管理器
的KEIL UVSION PROJECT
菜单Open keil uvsion project
- 找到工程的
.uvproj
文件打开
- 编译-生成
hex
-没了
- 众所周知,
STC
下载要用ISP下载器
- 虽然这玩意不能调试,但STC32本身就不支持调试,所以完全莫得影响
问题
C51/C251需要 interrupt x 来指明中断
中断过程通过使用 interrupt 关键字和中断号(0 - 31)来实现
但是VScode
并不能识别该关键字
当然,直接顶着VScode的报错编译是没问题的,毕竟最后还是Keil编的译
Keil VScode Assistant
给出的解决方案是通过宏定义使VScode掠过判断,Keil编译时替换成原先的关键字
在代码头文件中加入以下代码替换,即可
C51 代码部分
#ifndef __VSCODE_C51__
#define INTERRUPT(x) interrupt x
#else
#define INTERRUPT(x)
#endif
#ifndef __VSCODE_C251__
#define INTERRUPT(x) interrupt x
#else
#define INTERRUPT(x)
#endif
void UART1_int(void) INTERRUPT(UART1_VECTOR)
{
if (RI)
{
RI = 0;
}
if (TI)
{
TI = 0;
}
}
然后就可以愉快的补全代码了