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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

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

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

Мой уютный бложик... заходите!
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

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

Сообщение Z_h_e »

Не знаю как компиллер CV, студио уложит первый параметр в R24:25. Второй R22:23. Индексные регистры для передачи не используются.

realm, поставте точку останова в симуляторе и поглядите где лежат параметры, тоже метод.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
realm
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Вт сен 20, 2016 23:50:51

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

Сообщение 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 для проверки чего туда попадает.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

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

Сообщение Z_h_e »

realm писал(а):CV передает все параметры для любых функций через память Data Stack. Адрес его начала находится в регистре Y (Он и есть указатель на Data stack).
Не самое удачное решение для компилятора при наличии у камня аж 32 РОНа.

realm писал(а):Прикол в том, чо я уже до того, как задать вопрос перепробовал все варианты, включая unsigned char *. В регистры загружается лажа.
Вы разберитесь куда загружаются параметры, в регистры или в Data stack.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
realm
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Вт сен 20, 2016 23:50:51

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

Сообщение realm »

В дата стэк, после перегрузки из него в регистры, в них оказывается лажа.
kotriks
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

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

Сообщение 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); 
  }
}
}
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

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

Сообщение Z_h_e »

А если так?
if (!(PINB & (1 << 4))
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
kotriks
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

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

Сообщение kotriks »

Z_h_e писал(а):А если так?
if (!(PINB & (1 << 4))

всё тоже самое, не проходит if упирается туда и всё пока не отправиш в юарт чёнить. что с нажатой кнопкой что без.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

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

Сообщение Z_h_e »

Функция getchar что делает? Висит пока не будут данные из UART? Где настройка UART?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
kotriks
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

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

Сообщение kotriks »

Z_h_e писал(а):Функция getchar что делает? Висит пока не будут данные из UART? Где настройка UART?

как что делает отправляет нажатие, да это вообще как бы всё равно ведь при условии что на ноге не нажата кнопка должно пролетать всё что под if заключено не так ли?
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

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

Сообщение COKPOWEHEU »

как что делает отправляет нажатие
Вас очень трудно понять, без знаков препинания и однозначной формулировки мыслей.
printf() работает? Через что (UART, LCD)?
Что говорит пошаговая отладка?
Что говорит дизассемблированный код?
kotriks
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

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

Сообщение kotriks »

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

Разве по коду не видно, что это не как не LCD а обычный вывод в терминалку. не знаю, что за отладка.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

kotriks писал(а):как что делает отправляет нажатие
Какое нажатие ? Куда отправляет ? :facepalm:
Судя по названию, она возвращает символ из потока. И, с вероятностью в 99.99%, она тупо висит и ждёт приёма.

Добавлено after 2 minutes 20 seconds:
kotriks писал(а):Разве по коду не видно, что это не как не LCD а обычный вывод в терминалку.
Вы не поверите, но по Вашему коду не видно, куда отправляет данные sprintf.
А отправлять она может куда угодно, хоть на Марс.
kotriks
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

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

Сообщение kotriks »

Вообще суть такая ну лично я это так вижу, если кнопка не нажата то игнорируем то что заключено в if(){} если же нажата ждём с uart комманды равной цифре 2 если же нажата другая кнопка опять проскакиваем через else и выводим сообщение о не правильно набранной цифре(команде).
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

kotriks писал(а):если же нажата ждём с uart комманды равной цифре 2
Нет у Вас там в условии никакого ожидания.
Ожидание приёма у Вас стоит ПЕРЕД условием проверки кнопки.
kotriks
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

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

Сообщение kotriks »

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

Может поможете? как мне пропускать весь код в if если кнопка не нажата?
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

kotriks писал(а):как мне пропускать весь код в if если кнопка не нажата?
Ну дак весь блок сам пропустится, если условие не сработает. Или я что-то не понимаю... :dont_know:

PS: Не цитируйте полностью предыдущее сообщение, тем более, с имеющимися в нём цитатами. Это у нас запрещено правилами ! :kill:
kotriks
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

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

Сообщение kotriks »

так вот не пропускается пока что либо в юарт не отправить, по сути то должно если нету нажатия то и пропустить весь блок а оно сидит и ждёт пока его не пнут с юарта.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

Потому, что :
Аlex писал(а):с вероятностью в 99.99%, она тупо висит и ждёт приёма


Ну функционал такой у getchar, отсюда так и работает.
Делайте своё, если такое не подходит. Что тут ещё можно сказать :dont_know:
kotriks
Грызет канифоль
Сообщения: 274
Зарегистрирован: Чт апр 28, 2011 15:08:58

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

Сообщение kotriks »

и всётаки дело не в getchar, оставил только выводы без команды просто по нажатию кнопки

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

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


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

Вернуться в «AVR»