ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
2 июня
149342
Alex B. (25.02.2009 23:11, просмотров: 1638)
проблема с HT PICC закроспостю, так как сахара и микрочип.су очень мало пересекаются: PIC16F916, HTPICC 9.60 PL2 - такое впечатление, что линкер на каком-то этапе перестает строить дерево вызовов и из-за этого портит параметры, передаваемые в функцию: (1) - вызываем функцию с параметром, параметр передается через W 1431: hs_ret = Handshake_Proc(HS_TYPE_PRG_REQ); 1D17 3000 MOVLW 0 1D18 160A BSF 0xa, 0x4 1D19 118A BCF 0xa, 0x3 1D1A 243F CALL 0x43f (2) - вызываемая функция... извращался по всякому с локальными переменными.. 185: HS_RET Handshake_Proc (HS_TYPE type) 186: { 187: #define HS_ASSERT(a) if ((a)) goto hs_return 188: #define HS_SUCCESS() to = 1; goto hs_return 189: 190: static HS_RET ret; 191: static U08 to; 192: 193: ret = HS_RET_ERR; (3) - переданный параметр сохраняется по адресу 0x41 ->>>>>> 143F 0183 CLRF 0x3 1440 00C1 MOVWF 0x41 1441 30FF MOVLW 0xff 1442 00BF MOVWF 0x3f 194: HS_Stat.type = 0; 1443 1703 BSF 0x3, 0x6 1444 01BF CLRF 0x3f 195: 196: bsp_rf_en(); 1445 160A BSF 0xa, 0x4 1446 158A BSF 0xa, 0x3 1447 215E CALL 0x15e 1448 160A BSF 0xa, 0x4 1449 118A BCF 0xa, 0x3 197: 198: to = (type & HS_TYPE_ACK_BIT || type & HS_TYPE_DATA_BIT) ? HS_REPLY_PRG_NUM : HS_REPLY_NOR_NUM; 144A 1D41 BTFSS 0x41, 0x2 144B 18C1 BTFSC 0x41, 0x1 144C 2C4F GOTO 0x44f 144D 3001 MOVLW 0x1 144E 2C50 GOTO 0x450 144F 301E MOVLW 0x1e 1450 00C0 MOVWF 0x40 199: 200: do 201: { 202: rf_strobe(SIDLE); (4) - в функцию передается параметр через W - константа 0x36 1451 3036 MOVLW 0x36 1452 160A BSF 0xa, 0x4 1453 158A BSF 0xa, 0x3 1454 21C6 CALL 0x1c6 (5) - вызванная функция (листинг хай-тековский) 143 19C6 _rf_strobe 144 ; _data assigned to ?a_rf_strobe+0 145 0000 _rf_strobe$data set ?a_rf_strobe 146 ;_data stored from w 147 19C6 0183 clrf 3 ;select bank 0 148 19C7 00C1 movwf ?a_rf_strobe 149 ;bsp_rf.c: 74: void rf_strobe (U08 data) 150 19C8 1285 bcf 5,5 ;volatile 151 19C9 0841 movf ?a_rf_strobe,w 152 19CA 0093 movwf 19 ;volatile (6) - что самое интересное: ?a_rf_strobe 0041 т.е. переданный параметр так же сохраняется по адресу 0x41, как и в функции-родителе. И такое на каждом шагу. Есть еще веселее: (1) - вызывается функция с двумя параметрами. Один передается через W, другой через 0x41 224: Handshake_Rec(HS_OUT1_SIZE, 0); 1497 01C1 CLRF 0x41 1498 300A MOVLW 0xa 1499 120A BCF 0xa, 0x4 149A 118A BCF 0xa, 0x3 149B 2780 CALL 0x780 (2) - вызываемая функция - параметр передаваемый через W сохраняется в 0x41: 130: static BOOL Handshake_Rec (U08 size_pr, BOOL to_pr) 131: { 132: static bank1 U08 i; 133: static bank1 U08 size; 134: static bank1 BOOL to; 135: 136: size = size_pr; 0780 0183 CLRF 0x3 0781 00C1 MOVWF 0x41 // <<<<<<<<<<<<<<<<< 0782 1683 BSF 0x3, 0x5 0783 00E7 MOVWF 0x67 В чем причина не могу понять... Проблема появилась, когда объем кода перевалил за 90%. На микрочипе говорят, что что-то такое слышали. Можт отсюда кто слышал? http://www.microch …/showthread.php?t=5202
Согласуйте импеданс!