Перейти к содержанию
    

Написание для Blackfin драйвера FLASH - памяти для встроенного программатора VisualDSP

Пишу драйвер на ассемблере для BF-532 для прошивки FLASH c помощью встроенного программатора VisualDSP.

Встретился с проблемой: программатор интерпретирует указатель AFP_Title и другие указатели на строки, как 32-битные числа, что наблюдается при загрузке драйвера в соответствующих надписях на иконке.

Сравнил дизассемблированные коды работающего драйвера из придаваемых примеров со своим, и установил, что за исключением абсолютных значений адреса и содержимого надписи (ASCII -код), формат указателей и самих строк одинаков.

В то же время массив 32-битных чисел адресов начала и окончания сегментов программатор считал верно, также по заданному указателю AFP_...

Общефилософский вопрос: как программа-программатор (да и любая программа написанная на С) различает тип указателя - на char, на int, или на float? Ведь сам указатель - 32-разрядное число, и никаких признаков, устанавливающих его тип, нет (из дизассемблера видно).

Буду благодарен за любые соображения.

Изменено пользователем Дмитрий_Б

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Значение указателя изменяется с шагом соответственно типу данных.

По разному можно сделать, например разместить этот указатель в секцию памяти, где все переменные изменяются только с определённым шагом, или связав с этим указателем одну ячеку с величиной шага.

 

Да и что это за извращение дикое, писать программатор на асме? Бог с Вами ... бросьте каку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Значение указателя изменяется с шагом соответственно типу данных.

По разному можно сделать, например разместить этот указатель в секцию памяти, где все переменные изменяются только с определённым шагом, или связав с этим указателем одну ячеку с величиной шага.

При программировании на ассемблере шаг изменения указателя определяется явно в коде инструкции.

При анализе дизассемблера работающего драйвера я не обнаружил никаких признаков у указателей, они занимали ровно 4 байта и располагались один за другим (анализ упрощался наличием в исполняемом файле отладочной информации) - это действительно были адреса первого байта ASCII - строк, заканчивающихся двумя нулевыми байтами.

Версия с секциями интересна, но тогда эти секции должны иметь стандартные глобальные имена, однако известного мне имени секции среди имён глобальных переменных в своём исполняемом файле я не нашёл (возможно, правда, пропустил).

Собственно, драйвер - то работает, FLASH прошивается. Ассемблер потому, что люблю полный контроль над железом. Всегда точно знаешь, что происходит.

Изменено пользователем Дмитрий_Б

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Замечательно!

AT45DB161D? не поделитесь исходниками?

Я бы еще попробовал прикрутить AT45DB642D, если осилю. Их я тоже использую правда с другим процом bf-527.

Но думаю существенной разницы нет.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...