打印
[C语言]

Keil ARm 4.72的能自动完成代码,怎么用C51的不行?

[复制链接]
5793|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nbsmaps|  楼主 | 2014-12-3 11:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ayb_ice| | 2014-12-3 11:29 | 只看该作者
C51不支持这功能,ARM的工程可以

使用特权

评论回复
板凳
nbsmaps|  楼主 | 2014-12-3 13:33 | 只看该作者
看来只能用VS写了,只是不能在线仿真了.顺便再问下,KEIL中选择芯片有什么用?为什么要选择器件,除了加个系统自带的starup文件,其它作用好象没找到?

使用特权

评论回复
地板
wxjcan| | 2014-12-3 16:35 | 只看该作者
keil装arm的mdk

使用特权

评论回复
5
nbsmaps|  楼主 | 2014-12-4 07:04 | 只看该作者
To wxjcan:   先说声谢,KEIL我本来装的就是4.72,支持ARM的MDK,只不过编译器用的还是C51的编译器。但是这样,这个MDK就是不会自动完成代码!

使用特权

评论回复
6
john_lee| | 2014-12-4 11:08 | 只看该作者
IDE 实现自动完成代码(CodeCompletion)需要有这个引擎才行,Keil 公司并没有自己的引擎,而是采用了一个第三方的引擎————ClangCompletion,这个引擎是著名的 LLVM 项目的子项目 Clang 编译器的附属产物。

普通的代码自动完成,只是一些简单的符号分析提取,称为 Tag 方法,而 ClangCompletion 是一款编译器级的代码自动完成,可以分析语法语义、类型转换约束关系,不仅能自动提示代码完成,还能提示可能存在的编译错误。

ClangCompletion 遵循的是 ISO C/C++ 标准,也提供对 GCC 的扩展语法支持,但不支持 Keil C51 的扩展语法,比如 sbit、code、data 等等扩展关键字,所以 Keil C51 的 uVision 工程无缘代码自动完成。

使用特权

评论回复
7
airwill| | 2014-12-4 12:28 | 只看该作者
KEIL中选择芯片有什么用, 为什么要选择器件?
除了加个系统自带的starup文件,还有编译器参数设置, 比如内核设置 (ARM7, 还是 Cortex M0/3/4) 编译器会使用不同的指令哦

使用特权

评论回复
8
zhuomuniao110| | 2018-11-21 19:40 | 只看该作者
有没有什么插件给Keil添加高亮显示的

使用特权

评论回复
9
linqing171| | 2018-11-21 23:18 | 只看该作者
楼上 john_lee 说的可能是正解。
keil mdk for arm带的v6的编译器的前端是基于clang的。但是v5的还是keil的。
最早的keil的转到定义、运行到的PC值和源代码的行号对应关系、当前寄存器的值对应的变量和某全局变量在内存中的地址,均是从链接期生成的文件里解析出来的。
MDK从4.7.2,也就是5.0开始,把编辑器换成了scintilla,具体可以百度,从 keil/uv4/uvedit.dll 的属性里面可以看出来。这个语法着色器非常好用。做电脑程序用过一次就会爱不释手,bug很少。这个开源的库和itext等其他行业的开源大软件不一样,bug很少。我个人如此评价。
4.7.2修改的编辑器同时增加了智能completion提示功能。IAR也是同期增加的类似功能。

但是C51一直没有加这个功能。这个功能如果从OMF里面解析的话,工作量不大,但是存在不停的编译的问题。至于clang不能解析C51,这个应该是不存在多大的技术问题的,加个unsaved file,然后在里面宏定义 xdata 和 sbt等为空就可以了,sfr关键字略微复杂一点也是能绕过去的。而且我猜测c51的语法制导大概是SDCC的三分之一左右,一个词法分析器快速的来动态分析也不是多么难的事情。有的时候感觉51要被keil放弃了,ARM公司让自己的keil子公司继续维护keil c51来和自己的Cortex M0竞争,已经是够仁慈的了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

268

帖子

3

粉丝