Нет такого наследия, переменную я уже потом вынес, думал не будет оптимизироваться. Ан нет. Я знаю, что static правильнее, но больше кликов. Это со статиком, сейчас вообще мешанина, непонятно зачем он еще много раз читает регистр. Все объявления стандартные от ИАР, volatile присутствует.
/*---------------------------------------------
* Define NAME as an I/O reg with bit accesss
* Access of 8 bit reg: NAME
* Access of bit(s): NAME_bit.noXX
*--------------------------------------------*/
#define __IO_REG8_BIT(NAME, ADDRESS, ATTRIBUTE, BIT_STRUCT) \
__near __no_init volatile ATTRIBUTE union \
{ \
unsigned char NAME; \
BIT_STRUCT NAME ## _bit; \
} @ ADDRESS;
/*-------------------------------------------------------------------------
* RST register definitions
*-----------------------------------------------------------------------*/
/* Reset status register */
#ifdef __IAR_SYSTEMS_ICC__
typedef struct
{
unsigned char WWDGF : 1;
unsigned char IWDGF : 1;
unsigned char ILLOPF : 1;
unsigned char SWIMF : 1;
unsigned char EMCF : 1;
} __BITS_RST_SR;
#endif
__IO_REG8_BIT(RST_SR, 0x50B3, __READ_WRITE, __BITS_RST_SR);
#define RST_SR_EMCF ((uint8_t)0x10) /*!< EMC reset flag bit mask */
#define RST_SR_SWIMF ((uint8_t)0x08) /*!< SWIM reset flag bit mask */
#define RST_SR_ILLOPF ((uint8_t)0x04) /*!< Illegal opcode reset flag bit mask */
#define RST_SR_IWDGF ((uint8_t)0x02) /*!< IWDG reset flag bit mask */
#define RST_SR_WWDGF ((uint8_t)0x01) /*!< WWDG reset flag bit mask */
00C13B 351F0491 MOV state, #0x1F
}
??fMemoryControl_2:
00C13F CCAD09 JP ?epilogue_w4
dat=RST_SR;
CheckReset:
00C142 C650B3 LD A, RST_SR
00C145 C70E12 LD ??dat, A
if (dat==0)
00C148 2615 JRNE ??CheckReset_0
{ emc_token=0;
00C14A 725F0F46 CLR .iar.dynexit$$Limit
swim_token=0;
00C14E 725F0F47 CLR swim_token
illopf_token=0;
00C152 725F0F48 CLR illopf_token
iwdg_token=0;
00C156 725F0F49 CLR iwdg_token
wwdg_token=0;
00C15A 725F0F4A CLR wwdg_token
return;
00C15E 81 RET
if (dat&RST_SR_EMCF) emc_token++;
??CheckReset_0:
00C15F C650B3 LD A, RST_SR
00C162 72010E120B BTJF ??dat, #0, ??CheckReset_1
00C167 A510 BCP A, #com3
00C169 2707 JREQ ??CheckReset_1
if (dat&RST_SR_EMCF) emc_token++;
00C16B C60F46 LD A, .iar.dynexit$$Limit
00C16E 4C INC A
00C16F C70F46 LD .iar.dynexit$$Limit, A
if (dat&RST_SR_SWIMF) swim_token++;
??CheckReset_1:
00C172 C650B3 LD A, RST_SR
00C175 72010E120B BTJF ??dat, #0, ??CheckReset_2
00C17A A508 BCP A, #?b8
00C17C 2707 JREQ ??CheckReset_2
if (dat&RST_SR_SWIMF) swim_token++;
00C17E C60F47 LD A, swim_token
00C181 4C INC A
00C182 C70F47 LD swim_token, A
if (dat&RST_SR_ILLOPF) illopf_token++;
??CheckReset_2:
00C185 C650B3 LD A, RST_SR
00C188 72010E120B BTJF ??dat, #0, ??CheckReset_3
00C18D A504 BCP A, #?b4
00C18F 2707 JREQ ??CheckReset_3
if (dat&RST_SR_ILLOPF) illopf_token++;
00C191 C60F48 LD A, illopf_token
00C194 4C INC A
00C195 C70F48 LD illopf_token, A
if (dat& RST_SR_IWDGF) iwdg_token++;
??CheckReset_3:
00C198 C650B3 LD A, RST_SR
00C19B 72010E120B BTJF ??dat, #0, ??CheckReset_4
00C1A0 A502 BCP A, #?b2
00C1A2 2707 JREQ ??CheckReset_4
if (dat& RST_SR_IWDGF) iwdg_token++;
00C1A4 C60F49 LD A, iwdg_token
00C1A7 4C INC A
00C1A8 C70F49 LD iwdg_token, A
if (dat&RST_SR_WWDGF) wwdg_token++;
??CheckReset_4:
00C1AB C650B3 LD A, RST_SR
00C1AE A401 AND A, #?b1
00C1B0 88 PUSH A
00C1B1 C60E12 LD A, ??dat
00C1B4 A401 AND A, #?b1
00C1B6 B701 LD ?b1, A
00C1B8 84 POP A
00C1B9 B501 BCP A, ?b1
00C1BB 2707 JREQ ??CheckReset_5
if (dat&RST_SR_WWDGF) wwdg_token++;
00C1BD C60F4A LD A, wwdg_token
00C1C0 4C INC A
00C1C1 C70F4A LD wwdg_token, A
}
??CheckReset_5:
00C1C4 81 RET
IMPL_PROLOG(system)
systemSetVar:
00C1C5 CDAC6F CALL ?push_w4
00C1C8 BF08 LDW ?b8, X
IMPL_PROLOG(system)
00C1CA 5C INCW X
00C1CB F6 LD A, (X)
00C1CC 271D JREQ ??systemSetVar_0
00C1CE 4A DEC A
00C1CF 271A JREQ ??systemSetVar_0
00C1D1 4A DEC A
00C1D2 2717 JREQ ??systemSetVar_0
00C1D4 4A DEC A
00C1D5 271B JREQ ??systemSetVar_1
00C1D7 4A DEC A
00C1D8 2720 JREQ ??systemSetVar_2
-
- Разобрался, не с того места берется определение RST_SR_XXXX. Оно там как битовое поле. - Vladimir Ljaschko(20.02.2014 11:22)
- Вот я только что то же самое хотел написать и предложить посмотреть на выхлоп препроцессора :-) - SciFi(20.02.2014 11:38)
- Разобрался, не с того места берется определение RST_SR_XXXX. Оно там как битовое поле. - Vladimir Ljaschko(20.02.2014 11:22)