打印
[STM8]

IAR for STM8

[复制链接]
695|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
stly|  楼主 | 2021-12-8 23:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
IAR, STM8, FOR, ni, TI, TE
举个列子:
__no_init  volatile  unsigned char PA_ODR  @0x5000;
__no_init  volatile  unsigned char PA_ODR1 @0x5000;

// 指向同一个地址要报错,老版本的IAR 就不会有这个问题


Error[Lp025]: absolute section .near.noinit (main.o #11) ([0x005000-0x005000]) overlaps with absolute section .near.noinit (main.o #9) ([0x005000-0x005000])

使用特权

评论回复
沙发
supernan| | 2021-12-8 23:47 | 只看该作者
你重叠位置了。

使用特权

评论回复
板凳
wuhany| | 2021-12-8 23:49 | 只看该作者
这个版本不许定义重叠的变量。

使用特权

评论回复
地板
stly|  楼主 | 2021-12-8 23:51 | 只看该作者

我两个地方都要用到啊
typedef struct  
{
   unsigned char B0: 1;
   unsigned char B1: 1;
   unsigned char B2: 1;
   unsigned char B3: 1;
   unsigned char B4: 1;
   unsigned char B5: 1;
   unsigned char B6: 1;
   unsigned char B7: 1;
        
}  SBitChar;



typedef  struct  
{
        SBitChar  ODR;
        SBitChar  IDR;
        SBitChar  DDR;
        SBitChar  CR1;
        SBitChar  CR2;
        
}  GPIO;





__no_init volatile   GPIO    PA @ 0x5000;
__no_init volatile   GPIO    PB @ 0x5005;
__no_init volatile   GPIO    PC @ 0x500A;
__no_init volatile   GPIO    PD @ 0x500F;
__no_init volatile   GPIO    PE @ 0x5014;
__no_init volatile   GPIO    PF @ 0x5019;
__no_init volatile   GPIO    PG @ 0x501E;
__no_init volatile   GPIO    PI @ 0x5028;

----------------------------------------------------------------------------------------------------------------------------------------#define DEF_8BIT_REG_AT(NAME,ADDRESS)   __no_init  volatile  unsigned char NAME @ADDRESS
#define DEF_16BIT_REG_AT(NAME,ADDRESS)  __no_init  volatile  unsigned int  NAME @ADDRESS

/* Port A data output latch register */
DEF_8BIT_REG_AT(PA_ODR,0x5000);

/* Port A input pin value register */
DEF_8BIT_REG_AT(PA_IDR,0x5001);

/* Port A data direction register */
DEF_8BIT_REG_AT(PA_DDR,0x5002);

/* Port A control register 1 */
DEF_8BIT_REG_AT(PA_CR1,0x5003);

/* Port A control register 2 */
DEF_8BIT_REG_AT(PA_CR2,0x5004);



/* Port B */
/*****************************************************************/

/* Port B data output latch register */
DEF_8BIT_REG_AT(PB_ODR,0x5005);

/* Port B input pin value register */
DEF_8BIT_REG_AT(PB_IDR,0x5006);

/* Port B data direction register */
DEF_8BIT_REG_AT(PB_DDR,0x5007);

/* Port B control register 1 */
DEF_8BIT_REG_AT(PB_CR1,0x5008);

/* Port B control register 2 */
DEF_8BIT_REG_AT(PB_CR2,0x5009);



/* Port C */
/*****************************************************************/

/* Port C data output latch register */
DEF_8BIT_REG_AT(PC_ODR,0x500a);

/* Port C input pin value register */
DEF_8BIT_REG_AT(PC_IDR,0x500b);

/* Port C data direction register */
DEF_8BIT_REG_AT(PC_DDR,0x500c);

/* Port C control register 1 */
DEF_8BIT_REG_AT(PC_CR1,0x500d);

/* Port C control register 2 */
DEF_8BIT_REG_AT(PC_CR2,0x500e);

使用特权

评论回复
5
jiaxw| | 2021-12-8 23:52 | 只看该作者
如果需要你可以用联合体

使用特权

评论回复
6
jiajs| | 2021-12-8 23:54 | 只看该作者
用个宏替换一下不行么?

使用特权

评论回复
7
jlyuan| | 2021-12-8 23:55 | 只看该作者
楼上说的有道理,试试宏替换。

使用特权

评论回复
8
stly|  楼主 | 2021-12-8 23:56 | 只看该作者
怎么替换,举个列子说说

使用特权

评论回复
9
dengdc| | 2021-12-8 23:58 | 只看该作者
怎么会指向同一个地址呢

使用特权

评论回复
10
yufe| | 2021-12-9 20:49 | 只看该作者
这个代码是工程生成的时候就有的?还是你自己写的啊

使用特权

评论回复
11
llljh| | 2021-12-9 20:54 | 只看该作者
换一个地址不就行了吗  这俩地址一样了啊

使用特权

评论回复
12
dengdc| | 2021-12-9 20:56 | 只看该作者
最好还是不要指向同一个地址吧

使用特权

评论回复
13
stly|  楼主 | 2021-12-9 20:58 | 只看该作者

哦,那我就知道怎么回事了,多谢大家

使用特权

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

本版积分规则

433

主题

7058

帖子

0

粉丝