Jump to content

    

Intel4004

Участник
  • Content Count

    68
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Intel4004

  • Rank
    Участник
  • Birthday 11/06/1973

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

2006 profile views
  1. Сделал. Стресстесты еще недельку погоняю, но вроде работает, винда больше не возмущается. Но если у кого-нибудь через сколь угодно долгое время возникнет идея как решить эту проблему красиво, без костылей - приму эту идею с благодарностью.
  2. Пока добавлю задержку перед дисконнектом, пока не пройдет секунда с последней записи по MSC. Тоже костыль, тоже второго уровня, но по крайней мере может спасти от воплей современной винды "устройство было извлечено некорректно, надо проверить". Только вот еще регулярно встречаются древние виндовс (2000, xp) в которых, ЕМНИП, флешка кешируется...
  3. В смысле после принудительного дисконнекта сбросить на диске флаг "не размонтировано" (или как он там называется)? Так ведь это тоже костыль. Причем второго уровня, поверх первого. Винда на этот флаг хотя-бы чекдиск запускает...
  4. Исходные данные: Есть устройство, имеющее на борту флешку и USB. Естессно эта флешка отдается наружу как USB mass storage. Все прекрасно работает, но только до тех пока пока устройству не захочется что-то записать на эту флешку в тот момент, когда оно(устройство) подключено к компьютеру по USB. Пока что я реализовал костыль: принудительно вырубаю USB перед записью во флешку. В результате регулярно при следующем подключении винда мне сообщает, что устройство было извлечено некорректно. Так вот, вопрос: есть ли какая-нибудь возможность со стороны USB устройства сообщить хосту, что устройство хочет отключиться? Чтобы винда сбросила кеш и корректно размонтировала диск? Я понимаю, что в рамках MSC это невозможно. Но может быть есть какие-нибудь другие способы? Если что - свободных эндпоинтов на устройстве хватает, реализовать еще один USB-класс - не проблема.
  5. Ну, можно в свойствах проекта, на вкладке Target отрезать от IRAM1 нужное количество памяти, вписать его в IRAM2, и поставить на IRAM2 галочку NoInit. Смысл этого действия тот-же, но не требует редактирования scatter.
  6. Буду думать. PS. 24 байта (непонятно(0), указатель на свободное место, указатель на heap, указатель на мутекс, непонятно(0), свободное место(0)).
  7. Тогда второй вопрос: а как к этому отнесется Keil RTX ?
  8. Я бы с удовольствием. Но сторонние библиотеки (JSON например) эту кучу пользуют со страшной силой. И компилять из одного комплекта исходников пару десятков разных бинарников? И иметь геморрой с производством, которое все перепутает и будет, как вы говорите, сношать мне мозги что ничего не работает? Лучше я отмучаюсь один раз, написав универсальную прошивку, чем пару раз в неделю заново объяснять что и в каком случае из этого зоопарка надо прошивать.
  9. Этот вариант я знаю. Проблема в том, что конфигурацию платы я могу прочитать только после запуска RTOS.
  10. Поясняю: на плате могут распаять SRAM разного размера, могут вообще не распаивать. Конфигурация платы будет прошита в EEPROMке. В зависимости от конфигурации настраиваю heap (адрес/размер), и в зависимости от размера блокирую некоторые функции программы, чтобы не выжрать весь heap.
  11. Проблема в том, что на этапе компиляции я еще не знаю какие именно микросхемы SRAM будут распаяны на плате. Достаточно ли для этого по новому адресу прописать пустую HEAP-структуру, и подменить указатель на heap по адресу __user_libspace()+8 ? Или ссылки на heap еще где-то присутствуют?
  12. Я же UDP отлаживал, соответственно у меня открыто окно с регистрами UDP (Peripherals->System Viewer->UDP). И галочка "periodic update" стоит. Вот он и портил FIFO. Достаточно убрать галочку или закрыть окошко с регистрами - все нормально.
  13. Такого в моей практике еще не было. Больше недели трахался с абсолютно рабочим исходником. Кстати, как оказалось бит DTGLE вполне можно использовать для определения какой банк сбрасывать (RX_DATA_BK0 или RX_DATA_BK1). status = UDP->UDP_CSR[ep_num]; ... if ((status & (UDP_CSR_RX_DATA_BK0 | UDP_CSR_RX_DATA_BK1)) != (UDP_CSR_RX_DATA_BK0 | UDP_CSR_RX_DATA_BK1)) status &= UDP_CSR_RX_DATA_BK0 | UDP_CSR_RX_DATA_BK1; else { if (status & UDP_CSR_DTGLE) status = UDP_CSR_RX_DATA_BK1; else status = UDP_CSR_RX_DATA_BK0; } UDP_CSR_CLEAR(ep_num, status); Интересно, почему во всех фреймворках используют не DTGLE, а программный флаг, полностью эмулирующий поведение DTGLE? Кстати, кейловский CMSIS MSC оказался не таким тормозным как я ожидал. С SD-флешкой 600Kb/s на запись, 750Kb/s на чтение.
  14. МамаМиа! Деру себя за волосы! Выдернул JLink, ребутнул железяку. ОНО РАБОТАЕТ!!! Поехал водку пить...