为了优化代码,我将几乎所有的标志都放到了位结构中。现在我在写入位时遇到了CXSTM8中的一个错误。读取位不会带来任何问题。
对我来说好消息是我找到了解决方法。
这是一个例子:
/ * ------------------------------------------------ ---- * /
typedef结构
{
INT
sem_on:1; / * bit * /
INT
sem_off:1;
/ * bit * /
INT
sem_tog:1; / * bit * /
} key_;
/ * *结构/
key_ key_x;
/ * *结构/
key_ * key_down =& key_x;
&安培; sharppragma
部分const
{}
/ * *结构/
key_ * const
key_up =& key_x;
void clear_key_updown(
空虚
)
{
/ * *结构/
key_ * p_key;
key_down-> sem_on = 0;
/ *变量指针..
- ********错误:错误的寻址模式********* /
(* key_down).sem_on = 0; / *替代表达..
- ********错误:错误的寻址模式********* /
p_key = key_down;
/ *指针替换 - o.k. * /
p_key-> sem_on = 0;
key_up-> sem_on = 0; / * const指针 - o.k. * /
(* key_up).sem_on = 0; / *替代表达式 - o.k. * /
}
/ * ---------文件结尾------------------------------ * /
您可以看到的解决方法是替换特定指针。
WoRo
#cxstm8#cxstm8
以上来自于谷歌翻译
以下为原文
To op
timize the code I put nearly all the flags to bit structures. Now I came across a bug in the CXSTM8 when writing to bits. Reading bits doesn't bring any problem.
The good news for me is that I found a workaround.
Here is the example:
/*----------------------------------------------------*/
typedef struct
{
int
sem_on :1; /* bit */
int
sem_off :1;
/* bit */
int
sem_tog :1; /* bit */
} key_;
/*struct*/
key_ key_x;
/*struct*/
key_* key_down = &key_x;
&sharppragma
section const
{}
/*struct*/
key_* const
key_up = &key_x;
void clear_key_updown(
void
)
{
/*struct*/
key_* p_key;
key_down->sem_on = 0;
/* variable pointer ..
- ******** ERROR: bad addressing mode *********/
(*key_down).sem_on = 0; /* alternate expression ..
- ******** ERROR: bad addressing mode *********/
p_key = key_down;
/* pointer substitution - o.k. */
p_key->sem_on = 0;
key_up->sem_on = 0; /* const pointer - o.k. */
(*key_up).sem_on = 0; /* alternate expression - o.k. */
}
/*---------end of file------------------------------*/
The workaround you can see is to substitute the specific pointers.
WoRo
#cxstm8 #cxstm8
0