[an error occurred while processing this directive] [an error occurred while processing this directive]
А што, программёры мы, или где?
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено AlexD 20 марта 2002 г. 21:57

Ось вам программка, которую я сгоря накрапал на кубасике,
хавает io*.h файлы от IAR'а, который с плюсами,
и переиначивает их в битопределённые а ля Михаил Е.
Авось кому сгодится.

Я правда всё досконально не проверял, ну да ладно,
если что - ручками, ручками...

Ежели прога не нравится, и есть желание подправить -
флаг в руки, мне она нужна была один раз :-)

Пошёл спа-а-ать...


DIM tab$(90)
Ind = 1
' --------------------------------------------------
' ПОПРАВИТЬ РУЧКАМИ !!!
OPEN "io2313.h" FOR INPUT AS #1 ' ВХОДНОЙ ФАЙЛ
OPEN "io2313_.h" FOR OUTPUT AS #2 ' ВЫХОДНОЙ ФАЙЛ
' --------------------------------------------------
PRINT #2, "typedef unsigned char uchar;"
PRINT #2, "typedef signed char schar;"
PRINT #2, "typedef unsigned int uint;"
PRINT #2, "//***************************************************"
PRINT #2, "//* Определение типа. *"
PRINT #2, "//***************************************************"
PRINT #2, "typedef union {"
PRINT #2, " uchar byte;"
PRINT #2, " struct {"
PRINT #2, " uchar bit_0:1;"
PRINT #2, " uchar bit_1:1;"
PRINT #2, " uchar bit_2:1;"
PRINT #2, " uchar bit_3:1;"
PRINT #2, " uchar bit_4:1;"
PRINT #2, " uchar bit_5:1;"
PRINT #2, " uchar bit_6:1;"
PRINT #2, " uchar bit_7:1;"
PRINT #2, " } bit;"
PRINT #2, " struct {"
PRINT #2, " uchar bit1_0:2;"
PRINT #2, " uchar bit3_2:2;"
PRINT #2, " uchar bit5_4:2;"
PRINT #2, " uchar bit7_6:2;"
PRINT #2, " } bit2;"
PRINT #2, " struct {"
PRINT #2, " uchar bit2_0:3;"
PRINT #2, " uchar bit4_3:2;"
PRINT #2, " } bit3;"
PRINT #2, "} PORT;"
PRINT #2, "//***************************************************"
PRINT #2, "//* Определение адресов регистров. *"
PRINT #2, "//***************************************************"

state = 0
DO
LINE INPUT #1, s$
IF state = 0 THEN
IF MID$(s$, 1, 5) = "SFR_B" THEN
i = 7: tmp1$ = ""
DO WHILE MID$(s$, i, 1) <> ","
tmp1$ = tmp1$ + MID$(s$, i, 1)
i = i + 1
LOOP
PRINT #2, "__io volatile PORT " + tmp1$ + "_ @ " + MID$(s$, 15, 4) + "; " + MID$(s$, 21, LEN(s$) - 21)
PRINT #2, " #define " + tmp1$ + " " + tmp1$ + "_.byte"
PRINT #2,
tab$(Ind) = tmp1$: Ind = Ind + 1
ELSEIF MID$(s$, 1, 5) = "SFR_W" THEN
i = 7: tmp1$ = ""
DO WHILE MID$(s$, i, 1) <> ","
tmp1$ = tmp1$ + MID$(s$, i, 1)
i = i + 1
LOOP
PRINT #2, "__io volatile int " + tmp1$ + "_ @ " + MID$(s$, 15, 4) + "; " + MID$(s$, 21, LEN(s$) - 21)
PRINT #2,
ELSEIF MID$(s$, 1, 34) = "/* Interrupt Vector Definitions */" THEN
PRINT #2, s$
PRINT #2,
LINE INPUT #1, s$
LINE INPUT #1, s$
LINE INPUT #1, s$
LINE INPUT #1, s$
state = 1
END IF
ELSEIF state = 1 THEN
IF MID$(s$, 1, 7) = "#define" THEN
PRINT #2, s$
ELSE
PRINT #2,
state = 2
END IF
ELSEIF state = 2 THEN
IF MID$(s$, 1, 18) = "/* Bit definitions" THEN
PRINT #2, "/* Bit definitions*/"
PRINT #2,
LINE INPUT #1, s$
LINE INPUT #1, s$
state = 3
END IF
ELSEIF state = 3 THEN
IF MID$(s$, 1, 14) = "/* Pointer def" THEN
CLOSE #1
CLOSE #2
END
ELSE
IF MID$(s$, 1, 2) = "/*" THEN
PRINT #2, s$
tmp2$ = ""
FOR i = 1 TO LEN(s$)
qqq$ = MID$(s$, i, 1)
IF (qqq$ >= "A" AND qqq$ <= "Z") OR (qqq$ >= "0" AND qqq$ <= "9") THEN
tmp2$ = tmp2$ + qqq$
END IF
NEXT i
PRINT #2, "/*" + tmp2$ + "*/"
PRINT #2,
tmp3$ = ""
FOR i = 1 TO Ind - 1
IF tmp2$ = tab$(i) THEN tmp3$ = tmp2$
NEXT i
IF tmp3$ = "" THEN
IF tmp2$ = "TCIMSK" THEN
tmp3$ = "TIMSK"
ELSEIF tmp2$ = "TCIF" THEN
tmp3$ = "TIFR"
ELSEIF tmp2$ = "TC0CR" THEN
tmp3$ = "TCCR0"
ELSEIF tmp2$ = "TC1CR" THEN
tmp3$ = "TCCR1A"
ELSEIF tmp2$ = "TC1CSR" THEN
tmp3$ = "TCCR1B"
ELSEIF tmp2$ = "WTCR" THEN
tmp3$ = "WDTCR"
ELSEIF tmp2$ = "EEPROMCR" THEN
tmp3$ = "EECR"
ELSEIF tmp2$ = "DRPA" THEN
tmp3$ = "PORTA"
ELSEIF tmp2$ = "DDRPA" THEN
tmp3$ = "DDRA"
ELSEIF tmp2$ = "IPPA" THEN
tmp3$ = "PINA"
ELSEIF tmp2$ = "DRPB" THEN
tmp3$ = "PORTB"
ELSEIF tmp2$ = "DDRPB" THEN
tmp3$ = "DDRB"
ELSEIF tmp2$ = "IPPB" THEN
tmp3$ = "PINB"
ELSEIF tmp2$ = "DRPC" THEN
tmp3$ = "PORTC"
ELSEIF tmp2$ = "DDRPC" THEN
tmp3$ = "DDRC"
ELSEIF tmp2$ = "IPPC" THEN
tmp3$ = "PINC"
ELSEIF tmp2$ = "DRPD" THEN
tmp3$ = "PORTD"
ELSEIF tmp2$ = "DDRPD" THEN
tmp3$ = "DDRD"
ELSEIF tmp2$ = "IPPD" THEN
tmp3$ = "PIND"
ELSEIF tmp2$ = "DRPE" THEN
tmp3$ = "PORTE"
ELSEIF tmp2$ = "DDRPE" THEN
tmp3$ = "DDRE"
ELSEIF tmp2$ = "IPPE" THEN
tmp3$ = "PINE"
ELSEIF tmp2$ = "DRPF" THEN
tmp3$ = "PORTF"
ELSEIF tmp2$ = "DDRPF" THEN
tmp3$ = "DDRF"
ELSEIF tmp2$ = "IPPF" THEN
tmp3$ = "PINF"
ELSEIF tmp2$ = "DRPG" THEN
tmp3$ = "PORTG"
ELSEIF tmp2$ = "DDRPG" THEN
tmp3$ = "DDRG"
ELSEIF tmp2$ = "IPPG" THEN
tmp3$ = "PING"
ELSEIF tmp2$ = "UARTSR" THEN
tmp3$ = "USR"
ELSEIF tmp2$ = "UARTCR" THEN
tmp3$ = "UCR"
ELSEIF tmp2$ = "ACCSR" THEN
tmp3$ = "ACSR"
ELSEIF tmp2$ = "SPISR" THEN
tmp3$ = "SPSR"
ELSEIF tmp2$ = "SPICR" THEN
tmp3$ = "SPCR"
ELSEIF tmp2$ = "ADCMUX" THEN
tmp3$ = "ADMUX"
ELSEIF tmp2$ = "ADCCSR" THEN
tmp3$ = "ADCSR"
ELSEIF tmp2$ = "TC2CR" THEN
tmp3$ = "TCCR2"
ELSEIF tmp2$ = "ASR" THEN
tmp3$ = "ASSR"
ELSEIF tmp2$ = "XDIVD" THEN
tmp3$ = "XDIV"
ELSEIF tmp2$ = "TCIFR" THEN
tmp3$ = "TIFR"
ELSEIF tmp2$ = "TC0ACSR" THEN
tmp3$ = "ASSR"
ELSEIF tmp2$ = "TC2C" THEN
tmp3$ = "TCCR2"
ELSEIF tmp2$ = "ADCC" THEN
tmp3$ = "ADCSR"
ELSEIF tmp2$ = "ADCM" THEN
tmp3$ = "ADMUX"
ELSEIF tmp2$ = "USART1CSRA" THEN
tmp3$ = "UCSR1A"
ELSEIF tmp2$ = "USART1CSRB" THEN
tmp3$ = "UCSR1B"
ELSEIF tmp2$ = "USART1CSRC" THEN
tmp3$ = "UCSR1C"
ELSEIF tmp2$ = "USART0CSRC" THEN
tmp3$ = "UCSR0C"
ELSEIF tmp2$ = "USART0CSRA" THEN
tmp3$ = "UCSR0A"
ELSEIF tmp2$ = "USART0CSRB" THEN
tmp3$ = "UCSR0B"
ELSEIF tmp2$ = "TC3CRC" THEN
tmp3$ = "TCCR3C"
ELSEIF tmp2$ = "TC3CRA" THEN
tmp3$ = "TCCR3A"
ELSEIF tmp2$ = "TC3CRB" THEN
tmp3$ = "TCCR3B"
ELSEIF tmp2$ = "ETCIMR" THEN
tmp3$ = "ETIMSK"
ELSEIF tmp2$ = "ETCIFR" THEN
tmp3$ = "ETIFR"
ELSEIF tmp2$ = "TWICR" THEN
tmp3$ = "TWCR"
ELSEIF tmp2$ = "TWIAR" THEN
tmp3$ = "TWAR"
ELSEIF tmp2$ = "TWISR" THEN
tmp3$ = "TWSR"
ELSEIF tmp2$ = "EMCRA" THEN
tmp3$ = "XMCRA"
ELSEIF tmp2$ = "EMCRB" THEN
tmp3$ = "XMCRB"
ELSEIF tmp2$ = "XTALDCR" THEN
tmp3$ = "XDIV"
ELSEIF tmp2$ = "RAMPZSR" THEN
tmp3$ = "RAMPZ"
ELSEIF tmp2$ = "EIMR" THEN
tmp3$ = "EIMSK"
ELSEIF tmp2$ = "TC1CRC" THEN
tmp3$ = "TCCR1C"
ELSEIF tmp2$ = "TC1CRB" THEN
tmp3$ = "TCCR1B"
ELSEIF tmp2$ = "TC1CRA" THEN
tmp3$ = "TCCR1A"
ELSEIF tmp2$ = "ADCMSR" THEN
tmp3$ = "ADMUX"
ELSEIF tmp2$ = "TCIMR" THEN
tmp3$ = "TIMSK"
ELSEIF tmp2$ = "TC0CRA" THEN
tmp3$ = ""
ELSEIF tmp2$ = "TC0CRB" THEN
tmp3$ = ""
ELSEIF tmp2$ = "UART0CSRA" THEN
tmp3$ = "UCSR0A"
ELSEIF tmp2$ = "UART0CSRB" THEN
tmp3$ = "UCSR0B"
ELSEIF tmp2$ = "UART1CSRA" THEN
tmp3$ = "UCSR1A"
ELSEIF tmp2$ = "UART1CSRB" THEN
tmp3$ = "UCSR1B"
ELSEIF tmp2$ = "ACCASR" THEN
tmp3$ = "ACSR"
ELSEIF tmp2$ = "TWICSR" THEN
tmp3$ = "TWCR"
ELSEIF tmp2$ = "" THEN
tmp3$ = ""
END IF
END IF
ELSEIF MID$(s$, 1, 7) = "#define" THEN
IF tmp3$ = "" THEN
PRINT #2, s$
ELSE
s$ = RTRIM$(s$)
PRINT #2, "#define " + MID$(s$, 10, 9) + tmp3$ + "_.bit.bit_" + MID$(s$, LEN(s$), 1)
END IF
ELSE
PRINT #2, s$
END IF
END IF
END IF
LOOP UNTIL (EOF(1))

CLOSE #1
CLOSE #2
END



Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru