|
|
  |
Microchip assembler ограничения?, Какая боль, какая боль! Где sizeof(), array? |
|
|
|
Apr 5 2008, 22:14
|

Знающий
   
Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467

|
Нет лишних тысяч баксов, пишу на ассемблере. Пока даже на CCS компайлер за 150 баксов жабу не победил.
Ок, ближе к делу. Хочется написать чегото типа message map в Виндоус - условно:
ON_CMD 'bg' GOTO Address1 ON_CMD 'ge' GOTO Address2.
'bg' и 'ge' читаются с RS232 порта.
Хочется иметь макро, чтоб потом опять его использовать в другой программе - добавил строчку и готово.
делаю примерно так:
GO_NOT_EQUAL_AA MACRO ADDRESS1, ADDRESS2, LABEL MOVF ADDRESS1 SUBWF ADDRESS2, W BTFSS STATUS, Z GOTO LABEL ENDM
ON_CMD MACRO CMD_BUFFER, CMD_DATA, CMD_LABEL GO_NOT_EQUAL_AA CMD_BUFFER, CMD_DATA, NEXT GO_EQUAL_AA CMD_BUFFER, CMD_DATA + 1, CMD_LABEL NEXT: ENDM
MESSAGE_LOOP MACRO CMD_BUFFER, CMD_DATA, CMD_LABEL ON_CMD CMD_BUFFER, CMD_DATA, CMD_LABEL ON_CMD CMD_BUFFER, CMD_DATA+2, CMD_LABEL+2 GOTO MAIN_LOOP ENDM
проблемка в конце с ON_CMD CMD_BUFFER, CMD_DATA, CMD_LABEL ON_CMD CMD_BUFFER, CMD_DATA+2, CMD_LABEL+2
Хорошо бы обьявить массив комманд и массив ссылок где бы индех комманды соответсвовал индексу label. Ну в ассемблере вроде такого нет. Никто не изворачивался для PIC16?
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
|
Apr 9 2008, 09:28
|
Местный
  
Группа: Свой
Сообщений: 234
Регистрация: 30-03-07
Из: Одесса
Пользователь №: 26 621

|
Цитата(A. Fig Lee @ Apr 6 2008, 01:14)  Ну в ассемблере вроде такого нет. Никто не изворачивался для PIC16? Все есть - ассемблер у майкрочипсов - афигительный. Вот как сгенерить вызов функции функции через аргумент макроса Код IfBitThenProc MACRO bit, ev NOLIST LOCAL _bit, _byte LOCAL __ev
IF (bit < 1)&(bit > 40) ERROR "Argument must be in interval from 1 to 40" ENDIF
_bit = (bit-1)%8 _byte = (bit-1)/8 __ev = ev
btfsc aBitArea+_byte, _bit call procs#v(__ev) ENDM В итоге из номера ev сгенерируется джамп на метку procsХ, которые, в свою очередь также мона сгенерить WHILE'ом, например.
|
|
|
|
|
Apr 9 2008, 16:24
|

Знающий
   
Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467

|
Цитата(oran-be @ Apr 9 2008, 05:28)  Все есть - ассемблер у майкрочипсов - афигительный. Вот как сгенерить вызов функции функции через аргумент макроса Код IfBitThenProc MACRO bit, ev NOLIST LOCAL _bit, _byte LOCAL __ev
IF (bit < 1)&(bit > 40) ERROR "Argument must be in interval from 1 to 40" ENDIF
_bit = (bit-1)%8 _byte = (bit-1)/8 __ev = ev
btfsc aBitArea+_byte, _bit call procs#v(__ev) ENDM В итоге из номера ev сгенерируется джамп на метку procsХ, которые, в свою очередь также мона сгенерить WHILE'ом, например. спасибо, очень интересно. надо будет запомнить. если б еще и размер массива както определял.. ( sizeof ) Цитата(Сергей Борщ @ Apr 9 2008, 06:10)  Существует бесплатный компилятор sdcc. дык.. когда я его пробовал - он реально поддерживал 4 или 5 мелкочипов, один из них - дедушка F84. не настоящий он для майкрочипа.. ну вопчем добрые люди уже поделились CCS.
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|