lkote68 писал(а):... некоторые функции хранятся в исполняемом модуле cvavr.exe (например, w1_init(), w1_read(), w1_write() и некоторые другие), ... и эти функции все же можно получить - из asm-листинга проекта
Я смотрю все функции в конце концов обращаются к w1_read() w1_write() если не ошибаюсь? Как ее оттуда достать, отредактить и подсунуть.
Цитируешь мой ответ и все же спрашиваешь снова - как их достать. :о))) Вообще-то, эти функции не оконечные - есть еще __w1_write_bit0, __w1_write_bit1 и другие.
Вот их (всех) код, взятый, как я и говорил, из asm'листинга (куда он помещен из тела CvAvr.exe):
Код: Выделить всё
_w1_init:
clr r30
cbi __w1_port,__w1_bit
sbi __w1_port-1,__w1_bit
__DELAY_USW 0x375
cbi __w1_port-1,__w1_bit
__DELAY_USB 0x22
sbis __w1_port-2,__w1_bit
ret
__DELAY_USB 0xBB
sbis __w1_port-2,__w1_bit
inc r30
__DELAY_USW 0x2CF
ret
__w1_read_bit:
sbi __w1_port-1,__w1_bit
__DELAY_USB 0x5
cbi __w1_port-1,__w1_bit
__DELAY_USB 0x1B
clc
sbic __w1_port-2,__w1_bit
sec
ror r30
__DELAY_USB 0xC5
ret
__w1_write_bit:
clt
sbi __w1_port-1,__w1_bit
__DELAY_USB 0x5
sbrc r23,0
cbi __w1_port-1,__w1_bit
__DELAY_USB 0x20
sbic __w1_port-2,__w1_bit
rjmp __w1_write_bit0
sbrs r23,0
rjmp __w1_write_bit1
ret
__w1_write_bit0:
sbrs r23,0
ret
__w1_write_bit1:
__DELAY_USB 0xB8
cbi __w1_port-1,__w1_bit
__DELAY_USB 0xC
set
ret
_w1_read:
ldi r22,8
__w1_read0:
rcall __w1_read_bit
dec r22
brne __w1_read0
ret
_w1_write:
ldi r22,8
ld r23,y+
clr r30
__w1_write0:
rcall __w1_write_bit
brtc __w1_write1
ror r23
dec r22
brne __w1_write0
inc r30
__w1_write1:
ret
Проще всего отвязаться от встроенных в CvAvr.exe определений этих функций простым переименованием их во что-то свое, например так - сначала копируешь функцию w1_write в свою функцию _myW1write и модифицируешь её, как тебе нужно, затем делаешь такое определение, зависящее от наличия макро _DBG_:
Код: Выделить всё
#define _DBG_
#ifdef _DBG_
#define w1_write _myW1write
// и так далее - для всех изменяемых функций
#endif
после такой подготовки можешь менять набор функций одним росчерком пера - откомментировал #define _DBG_ и работают стандартные функции, раскомментировал - работают твои. Можно, конечно, переопределить эти функции в своем проекте, но тогда может возникнуть путаница - будет сложно определить, какой набор функций слинкован сейчас.