затык. преобразование типов?

Тема в разделе "Arduino & Shields", создана пользователем Kova23, 30 янв 2015.

  1. Kova23

    Kova23 Нуб

    ребята, помогите пожалуйста. уже всю голову сломал. есть процедура, отсылает по параллельному интерфейсу байты в экран, на вход процедуре подается символ. шесть байтов соответвующих изображению этого символа хранятся в двумерном массиве const int simv_kod[][6]
    почему если я вызываю процедуру SendLetter('A') то я получаю не то же самое если я явно задам индекс массива из которого брать байты. код во вложении. всю голову уже сломал почему так.




    код в сериал выводит вот это.
    Код (Text):
    3E
    0
    3E
    10
    8
    10

    1000001
    65


    3E
    50
    90
    90
    FE
    0

    1000001
    65
    казалось бы индекс массива один даже побитово, а байты то из массива по этому индексу берутся разные!
    понимаю что затык в преобразовании типов, но где именно понять не могу.
     

    Вложения:

    • bukva.txt
      Размер файла:
      13,5 КБ
      Просмотров:
      350
  2. Kova23

    Kova23 Нуб

    опытным путем выяснил что проблема с индексами есть только когда размерность массива больше какой то определенной величины. оставил только латиницу и ограничился размерностью масссива [127][6]. если ктото знает почему если индекс массива большой то неправильно значения берутся буду очень рад обагатится инфой.
     
  3. Megakoteyka

    Megakoteyka Оракул Модератор

    int i = (int)(unsigned char)bukva;
    А если так?
     
  4. Kova23

    Kova23 Нуб

    пробовал.
    дело не в преобразовании, видимо какой то баг с индексами. даже если в функцию передавать не char а int, то из массива берется какое то левое значение.
     
  5. Megakoteyka

    Megakoteyka Оракул Модератор

    А поменяйте тип массива на unsigned char.
     
  6. Kova23

    Kova23 Нуб

    мне кажется это какой то лютый баг. с таким массивом, как у меня задан, ваще всю ардиуну клинит по части строк. она даже в сериал строку не может вывести. в любое место вставляешь Serial.println("Hello");
    и скетч ничего не отправляет в порт, может отправлять только не символьные/строковые данные.
    массив сокращаешь до 127 символов и всё начинает работать.
     
  7. Megakoteyka

    Megakoteyka Оракул Модератор

    У ардуины 2 Кб ОЗУ, там хранятся переменные.
    128 * 6 * 2 = 1536 = 1.5 Кб
    256 * 6 * 2 = 3072 = 3 Кб
    Экономьте память либо пихайте данные в progmem.
     
  8. Kova23

    Kova23 Нуб

    ох. всё ясно. спасибо за информацию. слона то я и не приметил.