unsigned char Registers[0x3F] = 0x20;
.
.
/* это съедает */
case RQ_SET_DDRD:DDRB=rq->wValue.bytes[0];return 0;
case RQ_SET_PORTB:PORTB=rq->wValue.bytes[0];return 0;
.
/* а это нет */
case RQ_GET_REGISTR: dataBuffer[0]=Registers[ rq->wValue.bytes[0] ]; return 1;
case RQ_SET_REGISTR: Registers[ rq->wValue.bytes[0] ]=rq->wValue.bytes[1]; return 0;
.
.
Не хочет собирать. Как мне разместить этот массив по адресу регистров? А то писать 128 case'ов как-то мучительно, да и не правильно.
Роботов
Отправлено: 15 Апреля, 2013 - 17:21:16
Гуру
Сообщений всего: 1350
Дата рег-ции: Июнь 2011
Попробуй так:
CODE:
/* а это нет */
case RQ_GET_REGISTR: {dataBuffer[0]=Registers[ rq->wValue.bytes[0] ]; return 1;}
case RQ_SET_REGISTR: {Registers[ rq->wValue.bytes[0] ]=rq->wValue.bytes[1]; return 0;}
cjA
Отправлено: 15 Апреля, 2013 - 17:43:23
Генерал
Сообщений всего: 3291
Дата рег-ции: Янв. 2010
он не дает мне первую строчку выполнить, хотя это адрес начала блока регистров.
не могу перевести char[63] в char , говорит. (Добавление)
Нужно чтоб
Registers[0x12]=5; /*адрес порт Д*/
и
PORT=5;
выполняли одно и тоже
/*А вот это не компилется, пишет
" lvalue required as left operand of assignment "*/
//Registers (0x17)=d;
}//end main
Ну да и ладно, что там внутри usbFunctionSetup не важно, я как раз и хочу сделать так чтоб больше никогда не переделывать эту функцию
Всем спасибо за внимание
vik49
Отправлено: 17 Апреля, 2013 - 21:06:45
Капитан
Сообщений всего: 46
Дата рег-ции: Апр. 2012
Только я не понял зачем же нужно из языка высокого уровня опускаться до регистров.
Для этого есть ассемблер.
Объясни если не трудно.
----
The main function of the three electrod tubes is amplifications!!!
elmot
Отправлено: 17 Апреля, 2013 - 21:08:18
Гуру
Сообщений всего: 1141
Дата рег-ции: Дек. 2010
Странный вопрос. Программа на с лазает в регистры. В чем проблема?
cjA
Отправлено: 18 Апреля, 2013 - 00:13:09
Генерал
Сообщений всего: 3291
Дата рег-ции: Янв. 2010
Можно и на ассемблере,vik49
CODE:
//Вместо 64 вот таких строчек
case RQ_GET_DDRC: rq->wValue.bytes[0]=DDRB; return 1;
case RQ_SET_DDRC: DDRB=rq->wValue.bytes[0]; return 0;
//достаточно вставить две таких
case RQ_GET_REGISTR: dataBuffer[0]=_SFR_IO8(rq->wValue.bytes[0]); return 1;
case RQ_SET_REGISTR: _SFR_IO8( rq->wValue.bytes[0]) = rq->wValue.bytes[1]; return 0;
Ну вдруг нужно мне будет счетчики поменять на "горячую" или еще что? (Добавление)
Да еще и для каждого МК свое, потому что имена регистров не всегда совпадают.
vik49
Отправлено: 19 Апреля, 2013 - 15:29:02
Капитан
Сообщений всего: 46
Дата рег-ции: Апр. 2012
Всё это можно сделать гораздо проще.
Каждый регистр имеет свой адрес.
Разыменуйте этот адрес - и всё.
--------
The main function of the three electrod tube is amplification!!!
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.