Нет такого наследия, переменную я уже потом вынес, думал не будет оптимизироваться. Ан нет. Я знаю, что 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)