Jump to content

    

VslavX

Свой
  • Content Count

    1083
  • Joined

  • Last visited

Posts posted by VslavX


  1. Это на Микрон обращайтесь.

    Да вроде Ангстрем их в Зеленограде разрабатывал/делал. Официально обращаться бесполезно - ответ "все давно сгнило и утилизировано, а на 1806/1836 мы Вам ничего не дадим" (да и не хотелось, если честно). Кое-что удается найти, то же техническое описание на 1801ВМ2, но это все на личных контактах, да и люди потихоньку умирают, контакты утрачиваются.

     

  2. Прошу прощения что немного не в тему, а у Вас там в Зеленограде документации/топологии на 1801 серию не сохранилось случайно? Интерес чисто исторический, в виде хобби.

     

  3. Буквально сегодня снова на эти грабли с буквой 'я' наступил. Нагуглил решение где народ пропатчил фонт, и заменил 'ё' на 'я', соответственно в схеме и плате видится 'я', а в файлах записано 'ё'.

  4. VslavX

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

    Сайт не мой, поэтому что там в калькуляторе выдается - сложно сказать. А для генерации Baud_x16 в модуле UART оно вполне подходит и работает хорошо. На выходе будет небольшое дрожание фазы (в пределах периода опорной частоты), но для UART это неважно. Вот пример системы с таким UART-ом. Сейчас разрабатываю модуль видеозахвата для ретрокомпов, по прикидкам метод фазового аккумулятора тоже неплохо подходит для генерации пиксельной частоты.

     

    Или ,если мне нужна большая точность при делении частоты, то стоит задуматься о других методах?

    Смотря что понимать под точностью, если надо уменьшить jitter - то наращивать опорную частоту, если wander - то увеличивать разрядность сумматора.

     

  5. Если фазовая точность выходного сигнала не важна, то можно воспользоваться фазовым аккумулятором, вот тут нормально объясняется. Я обычно использую для тактирования UART-ов, чтобы не занимать PLL, но народ даже для генерации пиксельного клока и цветовой поднесущей на видеовыходе ухитряется использовать.

  6. Нужно восстановить схему соединений процессора и микросхемы памяти, а далее вопрос решается через JTAG Boundary Scan, на сайте у производителя файл BSDL есть. Я так через BS на MPC83xx начальный загрузчик прошиваю.

  7. Ну раз тему подняли - 1551 про который я тут пять лет назад рассказывал, все еще живой, вчера только смотрел его - докину еще 2ГБ памяти, SSD куплю и поставлю ту же лицензионную семерку. Жена пользовалась им каждый день - ей нравится что в сумочку влазит, на лекциях подключала к нему проектор по VGA, работала со статьями и документами, фоточки на отдыхе перегоняли, для себя даже VC2005 и Quartus 12.1 на нем поставил, и комп все еще в приличном состоянии, клавиатура нормальная, экран яркий, вентиллятор ни разу не чистили, батарея 1.5 часа держит, это очень удивительно - это всего лишь Acer.

  8. ссылка уже не работает, видимо имеется в виду вот этот аппарат.

    Да, оно. За увеличеним гнаться не стоит, комплект объективов там однаков, окуляров просто докидывают. Окуляры 20x - барахло, и камеру на них не натянешь.

     

    если почти наверняка можно договориться и поднять родную документацию из архива?

    Нету ничего, уже лет пять кого из сотрудников найдут - спрашивают. В те годы Ангстрем был режимным предприятием, вынести шаблоны/ленты домой в личный архив - можно было и срок заработать. А сейчас официалы морозятся, говорят что не сохранилось ничего, там их по части разработки и правда разгромили изрядно. 1801ВМ3 вроде до сих пор в системах управления лодок используется, и на нем все еще гриф, говорят (идиотизм, да). Пару лет назад повезло и выплыло ТО на 1801ВМ2. Но там неполная информация - нет матриц, не все разборчиво, есть неточности. А потом буквально сразу человек умер и все - контакт оборвался.

     

    Если кто может посодействовать по полной документации на ангстремовские микросхемы тех лет (серии 1801, 1515, 1545) - welcome.

     

    Еще у Боба Супника шаблоны дековские спрашивал на LSI-11/F-11/J-11, тех же времен, чуть раньше. Такой же ответ - не сохранилось ничего. Но не везде так печально - на Z80 сувенирный шаблон у Симы получить можно, на i4004 вроде тоже.

     

    А вообще пофиг, это хобби, кто вышивает крестиком, кто транзисторы по фотографии накидывает - вполне психоделическое занятие :)

  9. Бинокулярный микроскоп малого увеличения у AmScope не покупал, но есть опыт с металлографическим ME300. Это тупо перемаркированный кетаец XJP-H109. В двух словах - конструкция простая и кривая, оптика - ниже среднего, столик, камера и адаптер - нормальные. Объективы потом докупал отдельно никоновские и потихоньку продолжаю докупать. Вот ветка на микроскопном форуме, там есть примеры фотографий с разных объективов.

  10. ЕМНИП, мерялись мы с Rst7 пару лет назад производительностью своих сетевых стеков именно на STM32F20x. Максимальная wire speed для TCP была в обоих вариантах достигнута. У Rst7 загрузка процессорного ядра была процентов 30, у меня - около 70. А F40x пошустрее будет, так что цифры будут еще получше. К тому же MAC STM32 умеет считать не только CRC фрейма, но IP/TCP/UDP суммы, и это тоже хорошо так разгружает процессор.

  11. Перезапуск основной задачи тоже не вариант, т.к в начале этой задачи идет инициализация этого устройства и его первая перезагрузка, что в "разгаре" работы нельзя делать.

    И в чем проблема? При старте/рестарте задачи посмотрели на параметр, переданный задаче и делаем инициализацию/перезагрузку устройства только при первом старте или если по логике нужно, в остальных ненужных случаях - инициализацию пропускаем и сразу переходим "куда надо".

     

    Вот так делается однократная инициализация:

    //________________________________________________________________
    //
    void sample_task_start(void *param)
    {
        if (param == (void*)SUC_HReset)
        {
            //
            // Выполняем инициализацию
            //
            do_some_init();
        }
        //
        // Вызываем пользовательскую задачу в цикле
        //
         do_user_code(param);
    }

  12. У меня была похожая задача - прикладники перенесли очень старый софт под TNKernel и им иногда требовалось откуда-то из глубины приложения "вдруг все бросить" и начать исполнять совершенно другой кусок. Решилось завершением задачи и ее автоматическим рестартом с параметром, а код в начале задачи проверял параметр и переходил на начало нужной ветки.

  13. У меня даже ретропроцессор на 16800 дискретных транзисторах дал всего 5800 электрических цепей

    ca8c4d5be8b1t.jpg

    По топологии - 75 тысяч пинов и переходных, примерно столько же сегментов :)

    Так что речь все-таки у топикстартера об отдельных сегментах. Это как в советские времена завышали топологическую сложность микросхем - писали 50 тыс элементов, а на самом деле транзисторов втрое меньше. Вроде бы и правда, а со стороны выглядит как приписка.

     

  14. Кстати, проект создания реплики потихоньку продолжается. Уже полностью отреверсены матрицы 1801ВП1-014 и 1801ВП1-037, на выходе собственно точная реплика 1801ВМ1, сейчас его на Wishbone переводим.

  15. на 2.5 МГц, естественно, на другой не запускали. Сбоев замечено не было (на нем были программаторы ПЗУ, с которыми на тушинском рынке тусовались). Это ведь делали в старших классах школы... Температурный режим - улично-рыночный. Неработающих микросхем тоже не попалось (точнее, из имевшихся ИК80 и ИК80А - 100% не работали, а из имевшихся ВМ80А - 100% работали).

    Значит к тому времени технологию уже откатали. Но вроде бы в ВМ80А транзисторов со встроенным каналом еще не было. Я сейчас серию 1801 ковыряю, там уже такие n-MOS транзисторы со встроенным каналом были, поэтому она официально от единых +5В работает. Но под микроскопом я такие транзисторы явно отличить не смог.

  16. Этот экземпляр, когда перестал быть ИК80, а стал ВМ80, отлично работал с GND->-5V и 5V->12V. Такое ощущение, что они там остались лишь для совместимости с ИК80

    Просто грязи в подложке стало меньше, и она иногда работала и без -5V. Насчет работы без +12V - смотря на какой частоте и тоже не всегда. Топология ВМ80А от ИК80 отличается, в этой теме есть фотографии кристаллов, по ним полностью восстановили потранзисторную схему и сделали точную FPGA-реплику ВМ80А.

     

  17. Сильны же вы макросы смотреть.

    Там без поллитра ничего не высмотришь.

    Да ладно, все просто. В моей сегодня-скачанной версии 4.1.0:

    _INT_DISABLE/_INT_ENABLE определяются в одном файле mqx_prv.h, в итоге они или вызывают функции _int_disable/_int_enable определенные в int.c. Вариант когда MQX работает без прерываний (MQX_USE_INTERRUPTS == 0) не рассматриваем как вырожденный, поэтому интересующие нас макросы всегда приводят к макросам _INT_DISABLE_CODE/_INT_DISABLE_CODE в инлайновом или вынесенном в функции варианте. Эти макросы юзают _PSP_SET_DISABLE_SR и _PSP_SET_ENABLE_SR.

     

    Только пошаговая отладка позволяет понять какой там из кучи вариантов макросов реально выполняется.

    В моей тестовой конфигурации просто повышался приоритет разрешенных прерываний.

     

    Да, там действительно просмотрел ветвление между Cortex-M0 и Cortex-M4. Для Cortex-M4 производится модификация регистра BASEPRI. Это еще медленнее чем cpsie/cpsid (тем более там дополнительные обращения к памяти за значениями приоритета, так и за счетчиком вложенности), но, при некотором извращении позволяет оставлять разрешенными прерывания с приоритетом выше заданного. Обработчики таких прерываний будут ограниченными по функционалу, но чисто формально можно заявить что прерывания полностью не запрещаются.

     

    На STM32 порта MQX вообще-то нет. Забавно будет если кто-то его сделает. :biggrin:

    Не, мне лениво, у меня сейчас полное ретро - PDP-11 всякий разный в качестве хобби.

     

    Умеют они там или не умеют не так важно. Важно в честном сравнении это упоминать.

    Ну так тут пробегала ссылка в начале на тему с тестами, там и исходник приложения тестового был, кажется, прогнали бы, да назвали реальные цифры - вот и честное сравнение. Я сейчас просмотрел подробно sem_post, ну ничего нового, все та же банальщина - убрать задачу из двойного списка ожидающих таймер, убрать из ожидающих, добавить в активные, и все это сопровождается всякими относительно избыточными (относительно предельно вылизанных TNKernel или scmRTOS) телодвижениями - модификацией размера очереди и прочим. Хм, переключатель контекста сделан вообще громоздко - или сразу PendSV ставит, или выполняет svc где в обработчике опять таки PendSV ставится. Ну и cpsid/cpsie в перекллючателе контекста все-таки есть.

     

    Update: перечитал тему по "мерянью" временем переключения контекста, там цифра 1.30 мкс на STM32F205 120МНz, 3WS, IAR6.30. ScmRTOS еще чуток быстрее. То есть ~3мкс для MQX на 120МГц К60 вполне реалистична. Теперь верю :)

     

  18. На Kinetis MK60 120 МГц RTOS MQX при переключении контекста через сервис флагов получается время 3 мкс (369 тактов)

    Интересно, я смотрел MQX несколько лет назад, операционка хороша развитым middleware, но само ядро там слишком громоздкое и не может быть быстрым, имхо. Как бы цифра вызывает сомнения, но я смотрел давно, еще версию 3.7, надо будет собрать и погонять на STM32. Ну или К60 сам по себе фантастически быстрый, что тоже маловероятно. Или цифра 3 мкс никак не коррелирует с теми тестами по переключению контекста что мы с AHTOXA когда-то проводили. В-общем, у меня не сходится :)

     

    -не запрещаются прерывания ядра,

    А что такое прерывания ядра?

    Сейчас специально скачал свежую версию 4.1.0 для K60. Посмотрел функцию sem_post(), там все те же макросы _INT_ENABLE, _INT_DISABLE которые выливаются для CortexM3 в инструкции cpsie и cpsid. Да еще оно считает уровень вложенности запрета прерываний, что тоже скорости не добавляет. Так что все там банально в MQX, запрещает она прерывания как миленькая. Или я куда-то не туда посмотрел?

     

    -у задач разрешен планировщик time slice,

    -на ожидании флага может стоять очередь задач.

     

    Т.е. сервис остается еще довольно навороченным.

    Ну этим уже тыщу лет никого не удивишь, это многие старенькие RTOS типа TNKernel/FreeRTOS давно умеют.

  19. Одна задача, которая зажигает светодиод. Падает в hardFault. Прошелся дебагером - проблемное место - функция tn_start_exe() ( достигается конец функции: строчка
                    b       .                               // Never reach this

    А какой у Вас PendSV_Handler() работает? Судя по всему из файла startup_stm32f401xx.s, а должен бы из tn_port_cm4f_asm.s. Ну и для нормальной работы TN нужен системный таймер, функция tn_tick_int_processing() должна периодически вызываться из прерывания системного таймера.

     

  20. Я делал полноценный эмулятор РОМ в первой половине 90-х.

    Он представлял собой блок ОЗУ (сначала 8 килобайт на 4-х 537РУ10, потом 32 килобайта на 4-х 537РУ17, а потом уже сразу на импортной микросхеме статического ОЗУ на 128К), шина адреса и шина данных которого была мультиплексирована - то есть память была два режима доступа к памяти. В первом режиме мультиплескоры подавали адрес с тестируемой системы, а буфер транслировал данные на шину данных тестируемой системы - это был режим эмуляции. Во втором режиме мультиплексор подключал адрес ОЗУ к блоку загрузки, также к блоку загрузки подключалась шина данных ОЗУ - это был режим записи программы. Все это добро было собрано на ISA-плате и втыкалось в РС, а тестируемая система подключалась шлейфом.

     

    Сейчас бы я сделал блок памяти на флеши.

    Режим записи/верификации прошивки можно реализовать на микроконтроллере, с выводами выдерживающими 5V. Цепляем контроллер к шине адреса/данных/управления, пишем программку для контроллера, чтобы он принимал команды, например, по UART и читал/писал флешку. В режиме эмуляции микроконтроллер переключает свои выводы на вход и не влияет на работу схему.

     

    Следующий вопрос как сделать так чтобы тетстируемая система не мешала процессу прошивки. Самое простое - сделать трансляцию адреса и сигналов управления (CS/OE) через регистры/буферы с 3-им состоянием (чипы типа 74HCT373/244/125). Когда микроконтроллер желает прошить данные - он запрещает выход этих буферов и получает доступ к шине адреса флеш. Когда надо эмулировать - буфера разрешаются. Аналогично - шина данных флеш также транслируется в систему через буфер, и шина данных системы не мешает программировать контроллеру флеш. Еще хорошо бы рассмотреть в каком состоянии находятся шины данных в момент сброса - есть вероятность что в высокоимпедансном - тогда можно вооще обойтись без боьшей части буферов.

     

    Все это можно сделать и на ПЛИС, и на рассыпушке. Если на рассыпушке - то понадобится 4-5 корпусов 74HCT244/373, корпус мелкий элемент типа 3ИЛИ-НЕ (чтобы разрешать буфер на шине данных по !OE & !CS & EMU_MODE), ну и микроконтроллер типа Мега8515 - монтажа на день-два.

     

    На ПЛИС макетировать чуть сложнее - мелкий шаг у них всех и ног надо много - думаю тут 100-ножка типа EPM3064 пойдет. Если на ПЛИС - то уже можно какой-нить контроллер типа Cypress 68013 и программку уже писать для PC чтобы читать-писать данные.

     

     

  21. уже пытаюсь связаться как линк был выложен

    Я автор того РЕ-мулятора. Если будут вопросы - можно задать здесь. Но для Вашего случая оно не очень подходит - эмуляцию параллельного ПЗУ с временем доступа 75 нс (в первом посте фигурирует цифра 14МГц), микроконтроллерный вариант может банально не успеть. Хотя... Надо заснять диаграммку доступа к ПЗУ со стороны основного процессора - как там CS/ OE/ подаются.

     

    Я так понял Вы новый софт для этого прибора разрабатываете/перекомпилируете из исходников? Внешний интерфейс какой у этого прибора есть? (RS-232 типа). Может быть тогда возможно перейти на вариант встроенного загрузчика? Дописываете в софт кусочек, который по этому внешнему интерфейсу читает/пишет флешку.

  22. Объявление переменных в файле tn.c

    Ну да, все верно. TCB объявлены вне какой-либо функции.

    Класс размещения - статический, область видимости - глобальная.

    По стандарту - при старте программы все поля структур должны быть нулевые.

    Что вызывает сомнение?

     

     

     

     

  23. в тоже время tn_timer_task.id_task и tn_idle_task.id_task нигде не обнуляются. Это правильно?

     

    Вроде правильно. Проблема не очень понятна? Не создает задачи? Дело может быть вот в чем:

    Cтатические, явно не инициализированные переменные перед началом исполнения программы должны содержать нулевые значения. Согласно стандарту языка С, выдержка из самого старого ANSI C 89-го года:

     

    If an object that has static storage duration is not initialized explicitly, it is initialized implicitly as if every member that has arithmetic type were assigned 0 and every member that has pointer type were assigned a null pointer constant. If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate.

     

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

    Если у Вас в tn_timer_task.id_task и tn_idle_task.id_task какой-то мусор - то не отработал нормально стартап код компилятора, ну или систему второй раз пытаетесь стартануть.