Самый эффективный способ понять, что не так - посмотреть ассемблерный листинг. И пошаговое исполнение в симуляторе студии - то же очень помогает. Ещё можно чуть поменять код. Вместо
Какая, блин, динамическая память? Это статический массив, хоть и расположен в ОЗУ. Компилятор просто обязан следить за тем, уместится ли он в память(точнее это задача линкера, но с WinAVR не работал, может там отдельного линкера нет).
Сорри, действительно не заметил, что он статический. Линкер там есть конечно, GCC в этом плане наоборот реализован образцово.
К сожалению, сейчас нет времени разбираться, но по-видимому всё же можно заставить его отслеживать память, путём принудительного задания размеров секций. Надо смотреть дефолтные линкер-скрипты, и разбираться, как он вообще отслеживает объем оперативной памяти. А с помощью avr-size your_firmware.elf можно посмотреть размер секции bss - это статическая оперативная память.
И получил результат еще хуже. На месте тех каракуль которые у меня рисовались щас вообще рисуется хаотический шум. Такое ощущение что я записал массив но читаю не с него а вообще с произвольного участка памяти МК Если нужно могу сфоткать
Цитата:
Если да, то проверьте значения CHAR_H и CHAR_W
Значения там точно правильные, еслибы нет то было бы не смещение а обрезание букв
_________________ Шуруп забитый молотком держится намного лучше чем гвоздь закрученный отверткой!
Я так понимаю Ваш шрифт тоже с пропуском первых 32 символов? Размер символов указал правильно но символы не те выводятся что нужно... Кодировка таже? Английский текст печатает нормально а русский - иероглифы
_________________ Шуруп забитый молотком держится намного лучше чем гвоздь закрученный отверткой!
Последний раз редактировалось Зукс Сб июл 07, 2012 18:33:42, всего редактировалось 1 раз.
Та же или не та же - от Вас зависит. Файл исходника должен быть в правильной кодировке, используемой автором (скорее всего win-1251). А английские символы во всех однобайтовых кодировках одинаковы, потому там Вы разницы не увидите.
я из файла использовал только массив. Английский текст пишет нормально а русский - нет. Я вижу что в массиве используется uchar а не char. У меня пишет ошибку на uchar
_________________ Шуруп забитый молотком держится намного лучше чем гвоздь закрученный отверткой!
Последний раз редактировалось Зукс Сб июл 07, 2012 18:40:14, всего редактировалось 1 раз.
Правильно - компилятор воспринимает Ваши строки в файле .c в той кодировке, в которой сам файл. Массив делался под определенную кодировку, и Ваши строки должны быть именно ею написаны. Компилятор буквы не понимает, какие байты в исходнике идут - такие он и линкует.
Add: uchar здесь не причем! Вы можете написать в файле
const unsigned char str[] = "Привет, кагдила";
В какой кодировке файл исходника сохраните, в такой кодировке строка и будет. Массив символов для дисплея сделан под конкретную кодировку, потому что в других кодировках порядок символов другой (и соответственно их коды). Исходник надо сохранить в другой кодировке.
_________________ Giggity giggity goo!
Последний раз редактировалось Foks Сб июл 07, 2012 20:56:32, всего редактировалось 1 раз.
Как сохранить исходник в правильной кодировке? Я попробовал в блокноте файл пересохранить с кодировкой ansi, не помогло. У автора файл с кодировкой ansi
_________________ Шуруп забитый молотком держится намного лучше чем гвоздь закрученный отверткой!
Я так понимаю Ваш шрифт тоже с пропуском первых 32 символов?
Не существует первых 32-х символов. Там управляющие коды (табуляция, перевод строки, возврат каретки и т.д.). Символ 32 - пробел.
Цитата:
Как сохранить исходник в правильной кодировке? Я попробовал в блокноте файл пересохранить с кодировкой ansi, не помогло. У автора файл с кодировкой ansi
Попробуйте akelpad, например. По-моему, он это умеет.
Я ставил ANSI кириллица но ничего не изменилось. Может я неправильную кодировку выбираю?
А вы задайте символ кодом. Для явно заданных строк нужно настройки компилятора менять, скорее всего.
А у вас там при вычислении индекса в массиве случайно нигде нет смещения с использованием типа char? Русские буквы имеют коды больше 127, а в типе char, а не unsigned char это отрицательные значения.
Кодом это долго... Массив у меня unsigned char, я думаю там незачем ставить char
Кодом для проверки номеров символов. Вместо строки написать коды символов (не забудьте ноль в конце строки ). Речь не о массиве, а о вычислении смещения по коду символа. Там не должно быть char. Только unsigned char. И следите за тем, чтобы при умножении кода символа на размер символа не получилось округления до 0-255.
Заголовок сообщения: Re: Дисплеи от мобильных телефонов- осцилограммы работы
Добавлено: Сб июл 07, 2012 21:26:38
Друг Кота
Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30 Сообщений: 3258 Откуда: Украина
Рейтинг сообщения:0
Здравствуйте! Нашёл дисплейчик от Нокии 6100 с надписью на обороте MD201109123456 (фото прилигаю). Кто-нибудь запускал дисплейчик такой ревизии? Есть под него набор команд, примерчик, библиотека? Заранее благодарю.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения