ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
18 июля
129490
Chum_A (29.08.2008 13:31, просмотров: 2519)
Странное поведение "Кайла" для 51-х типа 8:15 Пользовал до событий типа 8:09, работало. Скачал демо 8:15, поставил. Скушал лекарство под торговой маркой "EDGE". Вроде подлечился. Тут просят константу одну поправить. Ну поменял, прошился, не пашет, да и WDT (внешний) все время срабатывает. Стал разбираться и нашел такую вот глюковину. Короче, порты в xdata в итоге снесены на адрес 0x0000. Интересно, это особенности применения лекарств, или "по жизни так"? Собственно исходный текст:

xdata volatile unsigned char  WR_0      _at_ 0x8000;    // порт вывода DD4
xdata volatile unsigned char  WR_1      _at_ 0x8200;    // порт вывода DD19
xdata volatile unsigned char  WR_2      _at_ 0x8400;    // порт вывода DD14
xdata volatile unsigned char  WR_3      _at_ 0x8600;    // порт вывода DD17

#pragma disable
void Out_Xport()
{
WR_0 = pWR0;
WR_1 = pWR1;
WR_2 = pWR2;
WR_3 = pWR3;
}

Выдержка из листинга:

             ; FUNCTION Out_Xport (BEGIN)
                       SETB    C
                 R     JBC     EA,?C0030
                       CLR     C
             ?C0030:
                       PUSH    PSW
                                           ; SOURCE LINE # 72
                                           ; SOURCE LINE # 73
                                           ; SOURCE LINE # 74
                       MOV     DPTR,#WR_0
                 R     MOV     A,pWR0
                       MOVX    @DPTR,A
                                           ; SOURCE LINE # 75
                       MOV     DPTR,#WR_1
                 R     MOV     A,pWR1
                       MOVX    @DPTR,A
                                           ; SOURCE LINE # 76
                       MOV     DPTR,#WR_2
                 R     MOV     A,pWR2
                       MOVX    @DPTR,A
                                           ; SOURCE LINE # 77
                       MOV     DPTR,#WR_3
                 R     MOV     A,pWR3
                       MOVX    @DPTR,A
                                           ; SOURCE LINE # 78
                       POP     PSW
                       MOV     EA,C
                       RET     
             ; FUNCTION Out_Xport (END)

Кусок из родного "Disassembly window", вместо переменных WR_ забиты #C_STARTUP(0x0000):

C:0x0187    10AF01   JBC      EA(0xA8.7),C:018B
C:0x018A    C3       CLR      C
C:0x018B    C0D0     PUSH     PSW(0xD0)
    72: void Out_Xport() 
    73: { 
    74: WR_0 = pWR0; 
C:0x018D    900000   MOV      DPTR,#C_STARTUP(0x0000)
C:0x0190    E522     MOV      A,pWR0(0x22)
C:0x0192    F0       MOVX     @DPTR,A
    75: WR_1 = pWR1; 
C:0x0193    900000   MOV      DPTR,#C_STARTUP(0x0000)
C:0x0196    E520     MOV      A,pWR1(0x20)
C:0x0198    F0       MOVX     @DPTR,A
    76: WR_2 = pWR2; 
C:0x0199    900000   MOV      DPTR,#C_STARTUP(0x0000)
C:0x019C    E521     MOV      A,pWR2(0x21)
C:0x019E    F0       MOVX     @DPTR,A
    77: WR_3 = pWR3; 
C:0x019F    900000   MOV      DPTR,#C_STARTUP(0x0000)
C:0x01A2    E523     MOV      A,pWR3(0x23)
C:0x01A4    F0       MOVX     @DPTR,A
    78: } 
C:0x01A5    D0D0     POP      PSW(0xD0)
C:0x01A7    92AF     MOV      EA(0xA8.7),C
C:0x01A9    22       RET