В целом - смотря какая задача. Изобразить из контроллера флешку, на которой хранится снятые данные - а почему бы и нет? Или некое комбинированное устройство. Или, в порядке извращения, программатор для таких же микросхем. В любом случае, вряд ли производительность ядра позволит отличить аппаратный эзернет от spi-ного.
Ну да. Плюс встроенная флешка аж на мегабайт есть. И подешевле вроде как. Впрочем, что там с Амуром не знаю, может, у него есть и свои преимущества. Но лично меня вг015 впечатлил больше.
С usb, если верить еррате, там все плохо. Работает только одна конечная точка, и то нестабильно. Впрочем, возможно, это верно только для старых ревизий, а в новых уже все исправлено. Не знаю. Сишные библиотеки какие-то есть, но лично по мне они неудобные (но я-то вообще не показатель). Для криптомодулей - хз, возможно, для военных или какой-нибудь бюрократии важен сам факт их наличия. Вряд ли ведь контроллер делали с нуля специально для продажи всяким радиолюбителям. Ethernet - не знаю, скорее все же нет. Возможность (и желание) протащить к устройству витую пару все же меньше, чем USB или даже CAN. В любом случае, не стоит требовать слишком многого сразу. Именно этот МК заточен больше под аналоговые схемы, чем под сложные вычисления или обмен.
Про демку там есть ссылка на статью по прототипу, который еще давным-давно под stm32 писался. Что там еще описывать? Про камень - надо будет сначала самому разбираться. Если чего-то интересное найдется - опишу.
Принцип максимизации ошибки это, конечно, хорошо. Плохо, когда ошибку не дают отследить из юзерского кода. Самое простое - могли сделать дефолтный обработчик исключений и объявить его weak. Соответственно, если юзер напишет свою альтернативу - использоваться будет она. И, насколько я понимаю, в stm32 используется именно такой подход. Те же ecall-ы как иначе отслеживать? Это же не ошибка, это именно системный вызов.
Если во времена Ленина выпускались РИСК-5 (ну не на иностранном же языке маркировать!) микросхемы с мегабайтом ЭСППЗУ... А вообще, это скорее последствия отмывки или неудачно выставленного света.
ну да память SRAM и EXMC висят на специальных шинах внутренней и внешней памяти, переферия на паре других шин
Как минимум, на тройке - AHB, APB1, APB2, но это не предел. В какой-нибудь stm32h7 шин еще больше. Это никак не отменяет способность и PADDR и MADDR обращаться куда угодно.
ну в больших компах ДМА это отдельная микросхема.
Я говорил скорее про древние восьмибитки вроде AVR или PIC. Весь обмен с периферией только прямыми командами ядра. То есть оно вполне выполняло обязанности DMA.
Как же вы не поняли, если определили дублирование?
Я понял что написано, я не понял зачем. И соответственно как мне на это реагировать. Вы уточняете правильно ли поняли данную тему? Вы нашли в тексте ошибку и озвучиваете более правильную версию? Вы хотите как-то дополнить написанное?
На самом деле каждое устройство ввода вывода с точки зрения процессора это тоже маленький модуль памяти (регистры это тоже память).
Регистры все-таки памятью не считаются. К ним нельзя обратиться по адресу с помощью lw/sw, только жестко прописать номер в коде инструкции. А вот в AVR они таки отображались на память, по нулевым адресам. Правда, ни разу не видел чтобы этим кто-то пользовался. А отображение периферии на память так и называется, MMIO, memory-mapped input-output.
так они на разных шинах наверно висят.
Да не похоже. Раз можно поменять местами. Точнее, оба адреса DMA могут коммутироваться на любую шину. Впрочем, про исключение я в статье написал. Камень, в котором разделение PADDR / MADDR все-таки важно.
интересно, кстати, что сам по себе процессор можно рассматривать как модуль ДМА который способен выполнять те же ДМА операции.
Нет. Процессор **может ** играть роль DMA, но это мизерная часть его возможностей. Собственно, есть же куча процессоров, в которых DMA нет, и ничего, живут.
действие данных из регистров ДМА может вообще не иметь ограничения по времени, однажды установленные значения регистров будут воздействовать - управлять модулем ДМА вечно(!)
Ну... да. Как в принципе и любая другая периферия. ШИМ на таймере тоже может генерироваться вечно. Вообще, я не особо понял о чем эти ваши два поста: большая часть сказанного в них так или иначе дублирует описанное мной.
Можно добавить, что блокировку памяти по дефолту включает штатная wch-ная утилита бутлоадера (и это мешает!). И также через бутлоадер эту блокировку можно снять.
Про Амур не знаю. У меня его нет, соответственно и не интересовался.
Правда, решение от ch32 с их аппаратным стеком, переходящим при острой необходимости в аппаратное сохранение в ОЗУ
Стоп. Я сейчас попытался найти куда же оно сохраняет. Похоже, в ядре V2 на юзерский стек, а V3, V4 - куда-то в недра, такое ощущение что вообще без возможности ручного доступа.
речь не про Амур, надеюсь?
В целом - смотря какая задача. Изобразить из контроллера флешку, на которой хранится снятые данные - а почему бы и нет? Или некое комбинированное устройство. Или, в порядке извращения, программатор для таких же микросхем.
В любом случае, вряд ли производительность ядра позволит отличить аппаратный эзернет от spi-ного.
Перемаркированный вряд ли, уж больно странные решения и странные косяки. Изготовление в Китае возможно. Но давайте верить в лучшее :)
Написано, что еще в разработке. Или его уже можно пощупать?
Какой еще хитрый бутлоадер? В вг015 бутлоадера вообще нет.
Ну да. Плюс встроенная флешка аж на мегабайт есть. И подешевле вроде как. Впрочем, что там с Амуром не знаю, может, у него есть и свои преимущества. Но лично меня вг015 впечатлил больше.
Еще бы про запуск Doom вспомнили :) Хватит с вас и трехмерного шныга.
С usb, если верить еррате, там все плохо. Работает только одна конечная точка, и то нестабильно. Впрочем, возможно, это верно только для старых ревизий, а в новых уже все исправлено. Не знаю.
Сишные библиотеки какие-то есть, но лично по мне они неудобные (но я-то вообще не показатель).
Для криптомодулей - хз, возможно, для военных или какой-нибудь бюрократии важен сам факт их наличия. Вряд ли ведь контроллер делали с нуля специально для продажи всяким радиолюбителям.
Ethernet - не знаю, скорее все же нет. Возможность (и желание) протащить к устройству витую пару все же меньше, чем USB или даже CAN. В любом случае, не стоит требовать слишком многого сразу. Именно этот МК заточен больше под аналоговые схемы, чем под сложные вычисления или обмен.
А можно подробнее? Сейчас пролистал спецификацию на risc-v, не увидел ничего более интересного, чем парсинг того же mcause.
Про демку там есть ссылка на статью по прототипу, который еще давным-давно под stm32 писался. Что там еще описывать?
Про камень - надо будет сначала самому разбираться. Если чего-то интересное найдется - опишу.
Принцип максимизации ошибки это, конечно, хорошо. Плохо, когда ошибку не дают отследить из юзерского кода. Самое простое - могли сделать дефолтный обработчик исключений и объявить его weak. Соответственно, если юзер напишет свою альтернативу - использоваться будет она. И, насколько я понимаю, в stm32 используется именно такой подход. Те же ecall-ы как иначе отслеживать? Это же не ошибка, это именно системный вызов.
Если во времена Ленина выпускались РИСК-5 (ну не на иностранном же языке маркировать!) микросхемы с мегабайтом ЭСППЗУ... А вообще, это скорее последствия отмывки или неудачно выставленного света.
Да меня-то устроит любой вариант (кроме, разумеется, неадекватных), главное было понять с каким обратились вы.
Как минимум, на тройке - AHB, APB1, APB2, но это не предел. В какой-нибудь stm32h7 шин еще больше. Это никак не отменяет способность и PADDR и MADDR обращаться куда угодно.
Я говорил скорее про древние восьмибитки вроде AVR или PIC. Весь обмен с периферией только прямыми командами ядра. То есть оно вполне выполняло обязанности DMA.
Я понял что написано, я не понял зачем. И соответственно как мне на это реагировать. Вы уточняете правильно ли поняли данную тему? Вы нашли в тексте ошибку и озвучиваете более правильную версию? Вы хотите как-то дополнить написанное?
Вот и посмотрите для тех же gd32 или ch32. Можете сравнить с упомянутым в статье stm32f4.
Регистры все-таки памятью не считаются. К ним нельзя обратиться по адресу с помощью lw/sw, только жестко прописать номер в коде инструкции. А вот в AVR они таки отображались на память, по нулевым адресам. Правда, ни разу не видел чтобы этим кто-то пользовался.
А отображение периферии на память так и называется, MMIO, memory-mapped input-output.
Да не похоже. Раз можно поменять местами. Точнее, оба адреса DMA могут коммутироваться на любую шину. Впрочем, про исключение я в статье написал. Камень, в котором разделение PADDR / MADDR все-таки важно.
Нет. Процессор **может ** играть роль DMA, но это мизерная часть его возможностей. Собственно, есть же куча процессоров, в которых DMA нет, и ничего, живут.
Ну... да. Как в принципе и любая другая периферия. ШИМ на таймере тоже может генерироваться вечно. Вообще, я не особо понял о чем эти ваши два поста: большая часть сказанного в них так или иначе дублирует описанное мной.
Можно добавить, что блокировку памяти по дефолту включает штатная wch-ная утилита бутлоадера (и это мешает!). И также через бутлоадер эту блокировку можно снять.
То есть PFIC_VTFIDR и PFIC_VTFADDRR никак не связаны? Надо будет проверить, а то, возможно, я в своей статье дезынформировал.
Про Амур не знаю. У меня его нет, соответственно и не интересовался.
Стоп. Я сейчас попытался найти куда же оно сохраняет. Похоже, в ядре V2 на юзерский стек, а V3, V4 - куда-то в недра, такое ощущение что вообще без возможности ручного доступа.
Кто есть, стандартный CSR-регистр mcause? Есть, конечно. Вот пример использования в прерывании: https://github.com/KarakatitsaRISCV/riscv-asm/blob/main/4.interrupt_ch32/src/main_1_unified.S#L211