前言
虽然但是,由于…
总之,要不是宏晶出了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;
	}
}
然后就可以愉快的补全代码了