Dmitry_B 0 23 мая, 2011 Опубликовано 23 мая, 2011 (изменено) · Жалоба Пишу драйвер на ассемблере для BF-532 для прошивки FLASH c помощью встроенного программатора VisualDSP. Встретился с проблемой: программатор интерпретирует указатель AFP_Title и другие указатели на строки, как 32-битные числа, что наблюдается при загрузке драйвера в соответствующих надписях на иконке. Сравнил дизассемблированные коды работающего драйвера из придаваемых примеров со своим, и установил, что за исключением абсолютных значений адреса и содержимого надписи (ASCII -код), формат указателей и самих строк одинаков. В то же время массив 32-битных чисел адресов начала и окончания сегментов программатор считал верно, также по заданному указателю AFP_... Общефилософский вопрос: как программа-программатор (да и любая программа написанная на С) различает тип указателя - на char, на int, или на float? Ведь сам указатель - 32-разрядное число, и никаких признаков, устанавливающих его тип, нет (из дизассемблера видно). Буду благодарен за любые соображения. Изменено 23 мая, 2011 пользователем Дмитрий_Б Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gradient 1 23 мая, 2011 Опубликовано 23 мая, 2011 · Жалоба Значение указателя изменяется с шагом соответственно типу данных. По разному можно сделать, например разместить этот указатель в секцию памяти, где все переменные изменяются только с определённым шагом, или связав с этим указателем одну ячеку с величиной шага. Да и что это за извращение дикое, писать программатор на асме? Бог с Вами ... бросьте каку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dmitry_B 0 23 мая, 2011 Опубликовано 23 мая, 2011 (изменено) · Жалоба Значение указателя изменяется с шагом соответственно типу данных. По разному можно сделать, например разместить этот указатель в секцию памяти, где все переменные изменяются только с определённым шагом, или связав с этим указателем одну ячеку с величиной шага. При программировании на ассемблере шаг изменения указателя определяется явно в коде инструкции. При анализе дизассемблера работающего драйвера я не обнаружил никаких признаков у указателей, они занимали ровно 4 байта и располагались один за другим (анализ упрощался наличием в исполняемом файле отладочной информации) - это действительно были адреса первого байта ASCII - строк, заканчивающихся двумя нулевыми байтами. Версия с секциями интересна, но тогда эти секции должны иметь стандартные глобальные имена, однако известного мне имени секции среди имён глобальных переменных в своём исполняемом файле я не нашёл (возможно, правда, пропустил). Собственно, драйвер - то работает, FLASH прошивается. Ассемблер потому, что люблю полный контроль над железом. Всегда точно знаешь, что происходит. Изменено 23 мая, 2011 пользователем Дмитрий_Б Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uriy 4 24 мая, 2011 Опубликовано 24 мая, 2011 · Жалоба Если не секрет для какой флешки драйвер пишите? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dmitry_B 0 24 мая, 2011 Опубликовано 24 мая, 2011 · Жалоба Если не секрет для какой флешки драйвер пишите? Atmel 16Мбит, SPI интерфейс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
uriy 4 25 мая, 2011 Опубликовано 25 мая, 2011 · Жалоба Замечательно! AT45DB161D? не поделитесь исходниками? Я бы еще попробовал прикрутить AT45DB642D, если осилю. Их я тоже использую правда с другим процом bf-527. Но думаю существенной разницы нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться