Помогите портировать исходник с Arduino в CVAVR

Обсуждаем контроллеры компании Atmel.
Ответить
Аватара пользователя
artemvinihenko
Открыл глаза
Сообщения: 78
Зарегистрирован: Пт апр 30, 2010 16:09:16
Откуда: Мариуполь (украина)
Контактная информация:

Помогите портировать исходник с Arduino в CVAVR

Сообщение artemvinihenko »

Привет знатные коты! :))
Есть вот такой исходничек https://github.com/probonopd/arduino-in ... to_hex.ino
Посылает из ПК по сом-порту данные коды кнопки пульта, а мк воспроизводит их на ик-диод, - своего рода пульт универсальный.
Переделываю его под свою среду CVAVR.
Вроде как все норм идет, но вот выдаёт он не то что нужно - подозреваю что ошибка в этом участке кода. Но не знаю чем заменить функцию strtol.

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

 void go_ir()
 {
     uint16_t array[80];
     uint16_t j = 0;
     uint8_t i = 0;
        if ( !strncmp(rx_buffer0, "AVR_SIR", 7) )
          {
            char *p = rx_buffer0+4; //указываем начало
             while ( (p = strchr(p,' ')) != NULL ) //ждём пока недойдем до пробела и записываем номер строки
             //теперь нужно склеить  от начла до конца и  записать в массив

              array[j++] = atol(p); // это функция ту что я применил
             // array[j++] = strtol(p, &p, 16); //а вот это родная в ардуине и каким аналого её заменить незнаю
 

             ir_start(array);  //посылаем склееные части
          /*
             putsf("SENT ");
            for ( i = 0; i < j; i++ )
            {
             putsf("0x");
             printf ("%c",array[i]);
             putsf(" ");
             }
            */


    }


Пологаю, что мне нужно взять символы с начало "*р" и склеить их до символов "р" ...а вот как это сделать не знаю...
Не подскажите?
Вложения
ver_328.rar
модель в протеус
(29.98 КБ) 137 скачиваний
ir_328.c
мой исходник в кодевижене
(13.01 КБ) 179 скачиваний
AVR FOR CИ РУЛИТ)))
Аватара пользователя
Gisteresis
Друг Кота
Сообщения: 4732
Зарегистрирован: Ср сен 18, 2013 10:08:26
Откуда: Санкт-Петербург

Re: Помогите портировать исходник с Arduino в CVAVR

Сообщение Gisteresis »

В тексте if не закрыт.

Склеивать можно множеством способов. Можно самому в массив добавлять, можно функции серии sprint.
Аватара пользователя
artemvinihenko
Открыл глаза
Сообщения: 78
Зарегистрирован: Пт апр 30, 2010 16:09:16
Откуда: Мариуполь (украина)
Контактная информация:

Re: Помогите портировать исходник с Arduino в CVAVR

Сообщение artemvinihenko »

За if да, не все скопировалось видимо)

Добавлять прямо в массив не получится -если только отдельный... в тот массив array записывается уже преобразованная строка из символов в число.
AVR FOR CИ РУЛИТ)))
Аватара пользователя
artemvinihenko
Открыл глаза
Сообщения: 78
Зарегистрирован: Пт апр 30, 2010 16:09:16
Откуда: Мариуполь (украина)
Контактная информация:

Re: Помогите портировать исходник с Arduino в CVAVR

Сообщение artemvinihenko »

Сделал вот так

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

 void go_ir()
 {
     uint16_t array[80];

     uint16_t j = 0;
     uint8_t i = 0;
        if ( !strncmp(rx_buffer0, "AVR_SIR", 7) )
          {
            char str_out[4];
            char *p = rx_buffer0+4; //указываем начало
            char pp = *p;
             while ( (p = strchr(p,' ')) != NULL ) //ждём пока недойдем до пробела и записываем номер строки
             //теперь нужно склеить  от начла до конца и  записать в массив
             // array[j++] = strtol(p, &p, 16);
             for(i=0;i<4;i++)
             {
              buff[i] = rx_buffer0[pp+i];
             }
             strcpy(str_out,buff);
             array[j++] = atoi(str_out);

             ir_start(array);  //посылаем склееные части

    }
    delay_ms(250);
     ir_stop();
 }



но на выходе ноль - на ик-диоде...
в симуляторе в отладчикепосмотрел - в буфер строка записывается, а вот конечной строке str_out какойто мусор
AVR FOR CИ РУЛИТ)))
Аватара пользователя
Gisteresis
Друг Кота
Сообщения: 4732
Зарегистрирован: Ср сен 18, 2013 10:08:26
Откуда: Санкт-Петербург

Re: Помогите портировать исходник с Arduino в CVAVR

Сообщение Gisteresis »

А где вы формируете str_out?
Аватара пользователя
artemvinihenko
Открыл глаза
Сообщения: 78
Зарегистрирован: Пт апр 30, 2010 16:09:16
Откуда: Мариуполь (украина)
Контактная информация:

Re: Помогите портировать исходник с Arduino в CVAVR

Сообщение artemvinihenko »

вот здесь

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

  strcpy(str_out,buff);

не правильно?
AVR FOR CИ РУЛИТ)))
Аватара пользователя
Gisteresis
Друг Кота
Сообщения: 4732
Зарегистрирован: Ср сен 18, 2013 10:08:26
Откуда: Санкт-Петербург

Re: Помогите портировать исходник с Arduino в CVAVR

Сообщение Gisteresis »

Проверяем, если rx_buffer0 не равно "AVR_SIR", тогда исполняется if
if ( !strncmp(rx_buffer0, "AVR_SIR", 7) )
{
char str_out[4];
char *p = rx_buffer0+4; //указываем начало
char pp = *p;
Получили адрес строки
while ( (p = strchr(p,' ')) != NULL ) //ждём пока недойдем до пробела и записываем номер строки
//теперь нужно склеить от начла до конца и записать в массив
// array[j++] = strtol(p, &p, 16);
for(i=0;i<4;i++)
{
buff[i] = rx_buffer0[pp+i];
Почему вы адрес используете как индексатор?
}
Тут я не понимаю почему вайл должен остановиться?
strcpy(str_out,buff);
Соотвественно и записываем то, что далеко вне области буфера
array[j++] = atoi(str_out);

ir_start(array); //посылаем склееные части
}
Аватара пользователя
artemvinihenko
Открыл глаза
Сообщения: 78
Зарегистрирован: Пт апр 30, 2010 16:09:16
Откуда: Мариуполь (украина)
Контактная информация:

Re: Помогите портировать исходник с Arduino в CVAVR

Сообщение artemvinihenko »

В исходной программе так было, и я решил не менять...
AVR FOR CИ РУЛИТ)))
Ответить

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