用Source Insight写嵌入式C,发现不能识别union里的变量,如何解决?
用Source Insight写某个嵌入式处理器的C,发现source insight不能识别union里的变量,也就是说,定义好这个union后,在程序其它地方用里面的变量时,不能“自动完成”。
原因可能是union体的结束大括号后,跟了一个 "@0xD2" 地址信息。。把这个去掉就能识别
请各位熟悉Source Insight的兄弟们看看,有没有办法解决?
代码:
__no_init volatile union
{
unsigned char TACON;
struct
{
unsigned char PND : 1;
unsigned char EN : 1;
unsigned char RUN : 1;
unsigned char CLR : 1;
unsigned char DIV : 2;
unsigned char NA : 1;
unsigned char MODE : 1;
}TACON_bit;
} @ 0xD2;
问题点数:20、回复次数:10Top
1 楼herryhuang(Herry)回复于 2006-06-03 20:02:40 得分 0
俺也用SI,俺也嵌入式,俺没碰到这个问题。
兄弟,应该是定义全局变量的时候才指定地址吧,你这段代码只是定义了一个类型,没有定义变量,哪来的地址?
这代码能编么?Top
2 楼happytang(一只叫苏格拉底的猪)回复于 2006-06-03 23:19:27 得分 0
定义地址是这么写吗?
给各例子先Top
3 楼mavers(Just do it)回复于 2006-06-04 10:30:54 得分 0
是这么写的,编译能通过。。而且编译器的手册上有例子就是这样定义的
变量就是TACON或者TACON_bit这个寄存器
如果不用union,那么就是这样定义的:
__no_init volatile unsigned char TACON @ 0xD2;
Top
4 楼ywhbn(天涯)回复于 2006-06-04 11:18:48 得分 0
先把@0xD2注释掉,等编译时再去掉注释Top
5 楼windspeaker()()回复于 2006-06-04 16:39:14 得分 0
#define ABCDEF @ 0xD2
顺便问一句,怎么才能定义这个union的对象呢Top
6 楼mavers(Just do it)回复于 2006-06-04 17:08:49 得分 0
把@0xD2注释掉这个方法倒是可行,但是我是要把代码给客户做开发的。。总不能让客户也这么办吧
我其实是想从 source insight 的设置下手,而不是从代码上下手Top
7 楼mavers(Just do it)回复于 2006-06-07 13:31:59 得分 0
终于解决了。。
搞一个source insight专用的头文件,删除union,地址等信息,这样写程序方便(只要加入到source sight的项目中,就可以识别变量了)
include标准的头文件只用来编译,哈哈
把union和地址信息删掉,然后代码这样就可以了:
unsigned char TACON;
struct
{
unsigned char PND: 1;
unsigned char EN: 1;
unsigned char RUN: 1;
unsigned char CLR: 1;
unsigned char DIV: 2;
unsigned char NA: 1;
unsigned char MODE: 1;
}TACON_bit;
Top
8 楼WingForce(初六,履霜,坚冰至。)回复于 2006-07-13 22:53:51 得分 0
实际上你可以自己写解析的正则表达式就好了Top
9 楼FigoZhu(谢慕安)回复于 2006-07-17 15:06:28 得分 0
为什么你不把结构声明,和变量定义分两行写呢?Top
10 楼tanlight()回复于 2006-08-10 21:29:01 得分 0
缺少*.h文件。在source insight里凡是没有定义过的变量或函数就会这样。
在project的头文件里定义就完事了。Top




