крах скетча от сложения строк и числа

Тема в разделе "Arduino & Shields", создана пользователем djdance, 26 июл 2012.

  1. djdance

    djdance Нерд

    я ждал этого :)
    дело в том, что строки я ВВЁЛ как брекпойнты. Вывожу их в Serial. Ну и наглядно вижу появление мусора
    Но и без них оно крешилось.

    Такой вопрос.
    Если в частовызываемой функции объявляются несколько переменных, то может надо их в конце уничтожать? Как там по канону ?
     
  2. djdance

    djdance Нерд

    невероятно
    кажется я нашел истинные причины креша в посте №0 и в текущей проблеме.

    lineA=String(ServoN);
    lineA+="."; - так НЕЛЬЗЯ
    lineA+=String(angle);


    lineA=String(ServoN);
    lineA+=String("."); - так НУЖНО
    lineA+=String(angle);


    видимо, дело в разном хранении строковых констант и строковых объектов.
    вот уж воистину, та самая точка, из-за которой космический аппарат улетел не туда.
     
  3. hibiki

    hibiki Гик

    забавно.
    смотря какие переменные. массивы/объекты я бы уничтожал, мало ли что там накомпиляет компилятор.

    в каноничныхЪ плюсах разница между константной строкой и объектом строки только во времени создания, если мне память не изменяет. интересно было бы раскопать, в чем разница между первой и второй конструкциями в "местных плюсах" - может, время будет...
     
  4. djdance

    djdance Нерд

    если я правильно понял, обертку String они сделали вот совсем недавно, да? надо им написать, чтоб поправили. На мой взгляд, судя по замусориванию близлежащих переменных, компилятор работает с массивом указателей на чары. И во время "неправильного" присвовения указатель улетает в область констант и почему-то и продолжает там резвиться среди них и переменных.
     
  5. hibiki

    hibiki Гик

    а правда, неплохо бы багрепорт отправить. а может, есть уже?
     
  6. djdance

    djdance Нерд

    еще ардуино ооочень не любит, когда в scope типа if переобъявляют строку

    String s;
    if (flag){
    String s=String(i);
    }
    далее используем s - и скетч в 90% случаев рушится.
    прекомпилер, разумеется, не ругается.
     
  7. hibiki

    hibiki Гик

    char наше все, в общем :)
     
  8. djdance

    djdance Нерд

    [вытирает пот]

    ну и до кучи, нельзя делать так:

    outs=_minus+hhS+mmS+ssS;

    а каждое сложение String надо делать на одной строчке.
     
  9. hibiki

    hibiki Гик

    а здесь на каждый плюс новый объект строки создается...