реклама на сайте
подробности

 
 
> ошибка в openOCD и в драйверах ftd2xx под linux64, очень инитересно народ трудится
klen
сообщение Sep 15 2010, 16:01
Сообщение #1


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



обновил исходники openOCD
собрал, запускаю :
Error: couldn't write MPSSE commands to FT2232

подозрительно, все работало еще неделю назад, залазю в git репозиторий посмотреть что недавно правили в драйвере ft2232 - вижу что недавно ничего! а то что правили - давно и несущественно. лезем в код под отладчиком и изумляемся.

CODE
static int ft2232_write(uint8_t* buf, int size, uint32_t* bytes_written)
{
#if BUILD_FT2232_FTD2XX == 1
    FT_STATUS status;
    DWORD dw_bytes_written;
    if ((status = FT_Write(ftdih, buf, size, &dw_bytes_written)) != FT_OK)
    {
        *bytes_written = dw_bytes_written;
        LOG_ERROR("FT_Write returned: %lu", status);
        return ERROR_JTAG_DEVICE_ERROR;
    }
    else
    {
        *bytes_written = dw_bytes_written;
    }
#elif BUILD_FT2232_LIBFTDI == 1
    int retval;
    if ((retval = ftdi_write_data(&ftdic, buf, size)) < 0)
    {
        *bytes_written = 0;
        LOG_ERROR("ftdi_write_data: %s", ftdi_get_error_string(&ftdic));
        return ERROR_JTAG_DEVICE_ERROR;
    }
    else
    {
        *bytes_written = retval;
    }
#endif

    if (*bytes_written != (uint32_t)size)
    {
        return ERROR_JTAG_DEVICE_ERROR;
    }

    return ERROR_OK;
}

стековая переменная dw_bytes_written не инициализируется (атоматически не должна по стандарту) , песатель кода надеется что при вызове FT_Write чтото в нее запишется по любому. Вот тут и начинается события из разрадя ''встретились два барана" - двараза мимо кассы, песатели FT_Write так изготовили что если писать команду без данных, тоесть размер size равен нулю, то она почемуто думает что в dw_bytes_written ничего записывать ненадо - ну так они видят мир в FTDI, простите, в индии. таким образом в результате в пременной dw_bytes_written после операции имеем мусор из стека при входе в эту процедуру с вываливанием в итоге по ERROR_JTAG_DEVICE_ERROR.

контрольный вопрос - как это работало раньше? ответ, ВЕЗЛО - код так распологался в озу и так стеки использовались что в нужном месте всегда оказывался нуль, гдето переписали кусок кода который также временами проходится по стек и по другому его использует и все - ПРЕВЕД!

решение проблемы - инициализация нулем dw_bytes_written = 0 при объявлении.
делаем правку собираем запускаем - вау! заработало!

едем дальше - хотим сообщить разработчикам чтоб поправили. нашел единственный путь - через форум forum.sparkfun.com
пытался зарегестрироватся, потерял полтра часа с перерывами на остывание мозгов - ну видители мой адрес почты невалидный и все тут! рыжий я!, зарегестрировался, результат - аккаунт зарегестрировался но не активен! писма на почту с активацие й не пришло. привед!

выводы:
а) авторы молодцы - openOCD замечательная вещь, но кодописатели-любители, как работают С.С++ как работают компиллеры не знают, наверно им это не нада, до поры и так все хрустит.
б) песатели драйверов ftdi d2xx под linux64 - уроды, драйверы это ответственная вещь и писать их должны пониающее люди. драйвер для винды возможно работает правильно - если драйвер другие кексы делали.
с) вебадмины forum.sparkfun.com - дятлы.
д) как обычно - пока сам напильником не допилиш - счасть я не будет wink.gif но это наверно норма жизни, мы все разные и хотим разного.

я так изнервничался при регистрации на forum.sparkfun.com что промазал разделом. прошу прощения. просьба к админам переместить топик в соседний раздел GNU/OpenSource средства разработки для avr/arm/mips


засим откланиюсь.

Сообщение отредактировал IgorKossak - Sep 15 2010, 16:57
Причина редактирования: Перенёс по просьбе
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 08:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.0135 секунд с 7
ELECTRONIX ©2004-2016