Страница 371 из 421

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср ноя 09, 2016 16:00:36
ARV
realm писал(а):имя массива и есть адрес и ни к какому unsigned int его приводить не надо потому как он и есть unsigned int.
одно маленькое НО: имя массива имеет тип (в вашем случае) unsigned char * - я вам об этом писал. если у вас параметр функции описан как unsigned int - у вас должен был быть warning при компиляции, и при этом произошло бы автоматическое приведение указателя к типу int

Добавлено after 1 minute 40 seconds:
realm писал(а):Если так сделать и загрузить значения в регистры в них оказывается полная лажа
лажа у вас потому, что вы наверняка не знаете, в какие именно регистры компилятор помещает переменную-указатель... вероятнее всего, что в регистровую пару X, Y или Z. а вот обычный int попасть может в любые регистры. изучайте ассемблерный листинг.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср ноя 09, 2016 16:36:13
Z_h_e
Не знаю как компиллер CV, студио уложит первый параметр в R24:25. Второй R22:23. Индексные регистры для передачи не используются.

realm, поставте точку останова в симуляторе и поглядите где лежат параметры, тоже метод.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср ноя 09, 2016 17:34:20
realm
realm писал(а):одно маленькое НО
Прикол в том, чо я уже до того, как задать вопрос перепробовал все варианты, включая unsigned char *. В регистры загружается лажа. Может я конечно уставший что-то и напортачил. Уже не важно.
Правильно работает так:
unsigned char DES_ENC_Data[8];
unsigned char DES_ENC_SN[8];
void tde (unsigned int Data_RAM_Address, unsigned int SN_RAM_Address)
Вызов:
tde((unsigned int)DES_ENC_Data, (unsigned int)DES_ENC_SN);
Работает - ну и хорошо.
realm писал(а):вы наверняка не знаете, в какие именно регистры компилятор помещает переменную-указатель...
CV передает все параметры для любых функций через память Data Stack. Адрес его начала находится в регистре Y (Он и есть указатель на Data stack).
Подробней можно найти в справке CV по поиску "Calling Assembly Functions from C". Разночтений там быть не может.
Мало того я весь Data stack вывплевывал в USART для проверки чего туда попадает.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср ноя 09, 2016 18:39:37
Z_h_e
realm писал(а):CV передает все параметры для любых функций через память Data Stack. Адрес его начала находится в регистре Y (Он и есть указатель на Data stack).
Не самое удачное решение для компилятора при наличии у камня аж 32 РОНа.
realm писал(а):Прикол в том, чо я уже до того, как задать вопрос перепробовал все варианты, включая unsigned char *. В регистры загружается лажа.
Вы разберитесь куда загружаются параметры, в регистры или в Data stack.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Чт ноя 10, 2016 05:37:56
realm
В дата стэк, после перегрузки из него в регистры, в них оказывается лажа.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вс ноя 13, 2016 08:01:55
kotriks
Подскажите почему у меня не проскакивает мимо if
когда кнопка не нажата, проскакивает когда отправлю в юарт любой символ, не нажатая и нажатая кнопка, не запускается основной цикл вообщем пока не отправлю любой символ, правильный 2 или не правильный.

Код: Выделить всё

void main(void)
{
char buf; 

DDRB = (0 << 4);
PORTB = (1 << 4);

 buf = getchar();

if (!(PINB & (1 << 4))==1) {
    if (buf == '2'){
        printf("FIG VAM"); 
    }else{  
    printf("NO COMMAND"); }    
   
  while(1){

 printf(" START");
   delay_ms(500);  
  }
} 
}

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вс ноя 13, 2016 08:41:09
Z_h_e
А если так?
if (!(PINB & (1 << 4))

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вс ноя 13, 2016 09:09:28
kotriks
Z_h_e писал(а):А если так?
if (!(PINB & (1 << 4))
всё тоже самое, не проходит if упирается туда и всё пока не отправиш в юарт чёнить. что с нажатой кнопкой что без.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вс ноя 13, 2016 09:18:05
Z_h_e
Функция getchar что делает? Висит пока не будут данные из UART? Где настройка UART?

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вс ноя 13, 2016 09:20:47
kotriks
Z_h_e писал(а):Функция getchar что делает? Висит пока не будут данные из UART? Где настройка UART?
как что делает отправляет нажатие, да это вообще как бы всё равно ведь при условии что на ноге не нажата кнопка должно пролетать всё что под if заключено не так ли?

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вс ноя 13, 2016 09:48:50
COKPOWEHEU
как что делает отправляет нажатие
Вас очень трудно понять, без знаков препинания и однозначной формулировки мыслей.
printf() работает? Через что (UART, LCD)?
Что говорит пошаговая отладка?
Что говорит дизассемблированный код?

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вс ноя 13, 2016 10:02:37
kotriks
COKPOWEHEU писал(а):
как что делает отправляет нажатие
Вас очень трудно понять, без знаков препинания и однозначной формулировки мыслей.
printf() работает? Через что (UART, LCD)?
Что говорит пошаговая отладка?
Что говорит дизассемблированный код?
Разве по коду не видно, что это не как не LCD а обычный вывод в терминалку. не знаю, что за отладка.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вс ноя 13, 2016 10:53:54
Аlex
kotriks писал(а):как что делает отправляет нажатие
Какое нажатие ? Куда отправляет ? :facepalm:
Судя по названию, она возвращает символ из потока. И, с вероятностью в 99.99%, она тупо висит и ждёт приёма.

Добавлено after 2 minutes 20 seconds:
kotriks писал(а):Разве по коду не видно, что это не как не LCD а обычный вывод в терминалку.
Вы не поверите, но по Вашему коду не видно, куда отправляет данные sprintf.
А отправлять она может куда угодно, хоть на Марс.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вс ноя 13, 2016 10:58:12
kotriks
Вообще суть такая ну лично я это так вижу, если кнопка не нажата то игнорируем то что заключено в if(){} если же нажата ждём с uart комманды равной цифре 2 если же нажата другая кнопка опять проскакиваем через else и выводим сообщение о не правильно набранной цифре(команде).

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вс ноя 13, 2016 11:13:27
Аlex
kotriks писал(а):если же нажата ждём с uart комманды равной цифре 2
Нет у Вас там в условии никакого ожидания.
Ожидание приёма у Вас стоит ПЕРЕД условием проверки кнопки.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вс ноя 13, 2016 11:22:51
kotriks
Аlex писал(а):
kotriks писал(а):если же нажата ждём с uart комманды равной цифре 2
Нет у Вас там в условии никакого ожидания.
Ожидание приёма у Вас стоит ПЕРЕД условием проверки кнопки.
Может поможете? как мне пропускать весь код в if если кнопка не нажата?

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вс ноя 13, 2016 11:32:09
Аlex
kotriks писал(а):как мне пропускать весь код в if если кнопка не нажата?
Ну дак весь блок сам пропустится, если условие не сработает. Или я что-то не понимаю... :dont_know:

PS: Не цитируйте полностью предыдущее сообщение, тем более, с имеющимися в нём цитатами. Это у нас запрещено правилами ! :kill:

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вс ноя 13, 2016 11:43:24
kotriks
так вот не пропускается пока что либо в юарт не отправить, по сути то должно если нету нажатия то и пропустить весь блок а оно сидит и ждёт пока его не пнут с юарта.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вс ноя 13, 2016 11:45:25
Аlex
Потому, что :
Аlex писал(а):с вероятностью в 99.99%, она тупо висит и ждёт приёма
Ну функционал такой у getchar, отсюда так и работает.
Делайте своё, если такое не подходит. Что тут ещё можно сказать :dont_know:

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вс ноя 13, 2016 12:57:47
kotriks
и всётаки дело не в getchar, оставил только выводы без команды просто по нажатию кнопки

Код: Выделить всё

 while(1){
if (!(PINB & (1 << 4))==1) { 
        SUART_PutStr("FIG VAM"); 
 }
SUART_PutStr("NO COMMAND"); 
}

добавил после FIG VAM, NO COMMAND сообщение вывод и вот пока нажимаеш кнопку летят оба сообщения хотя должно проскакивать if если не нажата кнопка и выводится постоянно сообщение NO COMMAND не так ли ? Вообще ничего не понимаю :(