ST意法半导体
直播中

陈丽

8年用户 1607经验值
私信 关注
[问答]

写入位结构时的CXSTM8错误

为了优化代码,我将几乎所有的标志都放到了位结构中。现在我在写入位时遇到了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 optimize 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

回帖(2)

谭齐慧

2019-4-1 11:07:18
嗨Woro,
 
 我们无法在这里重现您的问题:请让我知道所使用的版本和编译器选项(这里或我的电子邮件:luca dot ubiali _at_ cosmic dot fr)
 
 问候,
 
 卢卡(宇宙)

以上来自于谷歌翻译


以下为原文







Hi Woro,

we cannot recreate your problem here: please let me know the version and compiler options used (here or to my email: luca dot ubiali _at_ cosmic dot fr)

Regards,

Luca (Cosmic)
举报

陈丽

2019-4-1 11:15:36
嗨卢卡,
 
 
 首先感谢您众所周知的promt回复。
 
 我会将列表文件附加到此帖子中。
 
 编译器命令行是:
 cxstm8 + mods0 + debug -pxp -no -pp -l -duC_MMI -dUART_SCI -iuc_mmi  include -iinclude $(ToolsetIncOpts)-cl $(IntermPath)-co $(IntermPath)$(InputFile)
 
 
 希望它能帮助解决问题。
 
 
 最好的祝福,
 WoRo

以上来自于谷歌翻译


以下为原文






Hi Luca,

  
thanks first for your well-known promt reply.
  
I'll append the list file to this posting.
  
The compiler command line is:
cxstm8 +mods0 +debug -pxp -no -pp -l -duC_MMI -dUART_SCI -iuc_mmiinclude -iinclude $(ToolsetIncOpts) -cl$(IntermPath) -co$(IntermPath) $(InputFile)

  
Hope it will help solving the problem.

   
Best Regards,
WoRo
举报

更多回帖

发帖
×
20
完善资料,
赚取积分