Задать вопрос
  • Какое напряжение на контактах spi esp32s3 n16r8?

    jcmvbkbc
    @jcmvbkbc
    Тоесть через iomux на gpio 37,36,35 будет работать на 1.8v?

    Да, так можно сделать.

    Но как мне допустим подключать sd карту по spi или экран?

    Вопрос непонятен. В чём проблема?
    Написано
  • #Define TRUE FALSE. Что произойдёт?

    jcmvbkbc
    @jcmvbkbc
    Равносильно тому, что после этой строки в текстовом редакторе выполнить операцию "найти и заменить целое слово с учётом регистра" TRUE на FALSE

    Не, не равносильно, смотри.
    Написано
  • Каким образом прерывания работают в esp8266?

    jcmvbkbc
    @jcmvbkbc
    а у тебя случаем нет списка книг, по которым ты обучался встроенным системам да и работе с микропроцессорами

    djEban, конкретно по этим двум топикам -- нет. Мой опыт в основном получен из разборок с реальными системами и эмуляторами и из взаимодействия с людьми делающими железо. Хотя, можно упомянуть "Digital Design and Computer Architecture" Харрис и Харрис и какой-нибудь базовый учебник по верилогу, типа FPGA Prototyping by Verilog Examples.
    Написано
  • Каким образом прерывания работают в esp8266?

    jcmvbkbc
    @jcmvbkbc
    djEban, идея в том, что блок GPIO дёргает единственное IRQ процессора для любой комбинации GPIO вызывающей прерывание. Поскольку почти вся документация на esp8266 -- это результат реверс-инжениринга, можно считать, что ты экспериментально выяснил, что это IRQ #4. Могу добавить, что UART привязан к IRQ 5, а SPI -- к внешнему IRQ 6/внутреннему IRQ 8 (разница из-за того, что внутренние IRQ 6 и 7 -- это таймер и softirq, никакие внешние линии им не соответствуют).
    Написано
  • Каким образом прерывания работают в esp8266?

    jcmvbkbc
    @jcmvbkbc
    djEban, непонятен контекст того, что ты делаешь. Если ты запускаешь что-то в esp-open-rtos, то там всё настраивается собственными примитивами. Если ты программируешь голый esp8266, то всё надо настраивать. Нужны подробности.

    в GPIO пин прокинул пятерку с 7 по 9 биты, т.е. тем самым включил прерывание при высоком уровне

    переход от "прокинул" к "тем самым включил" непонятен. В esp8266 есть pinmux которым нужно настроить, что конкретно присоединяется к ногам чипа -- gpio или сигналы от другой периферии.

    Может прерывания нужно как-то явно включать процессорной командой, не знаешь?

    В самом процессоре прерывания включаются 1) очисткой PS.EXCM и установкой PS.INTLEVEL в значение ниже уровня прерываний которые нужно разрешить и 2) установкой битов в регистре INTENABLE соответствующих конкретным IRQ которые нужно разрешить.
    Написано
  • Каким образом прерывания работают в esp8266?

    jcmvbkbc
    @jcmvbkbc
    djEban, в оверлее адреса по умолчанию, вообще они перемещаются записью базового адреса в регистр vecbase, о чём можно прочитать в isa book.

    В esp-sdk почему-то векторы загружаются по 0x40010000

    По твоим ссылочкам, кстати, как будто выходит 0x40100000
    Написано
  • Есть ли модуль реального времени в AI Thinker ESP32 (ESP32 CAM)?

    jcmvbkbc
    @jcmvbkbc
    Контроллер который может работать когда весь остальной ESP32 находится в состоянии сна. 669569677749e831696479.png
    На его базе можно сделать часы реального времени, если озаботиться его непрерывным питанием.
    Написано
  • Какая сложность у std::sort?

    jcmvbkbc
    @jcmvbkbc
    Основание логарифма не имеет значения, потому что смена основания эквивалентна домножению на константу, которую в O-записи игнорируют.
    Написано
  • Как общаться с устройствами ввода вывода на Си в linux?

    jcmvbkbc
    @jcmvbkbc
    ты утверждаешь что mmap при мапинге /dev/mem будет напрямую писать в физическую память ??

    pfg21, mmap не будет никуда писать. Но mmap может отобразить любую область физической памяти в адресное пространство процесса для прямого доступа.

    тогда получается любой пользователь может получить доступ к любому участку физической памяти без каких-либо проверок, только за'mmap'ив /dev/mem в своей проге ??

    Почти. Любой пользователь который может открыть /dev/mem.
    Написано
  • Как общаться с устройствами ввода вывода на Си в linux?

    jcmvbkbc
    @jcmvbkbc
    pfg21, функция mmap_mem -- этот самый "хук". Она зарегистрирована здесь как обработчик mmap в mem_fops, mem_fops указаны как fops в массиве devlist для устройства с минорным кодом DEVMEM_MINOR, этот массив обрабатывается здесь, где регистрируются устройства с мажорным кодом MEM_MAJOR. Устройство с кодом 1, 1 -- это /dev/mem и есть, как можно увидеть здесь
    Написано
  • Как общаться с устройствами ввода вывода на Си в linux?

    jcmvbkbc
    @jcmvbkbc
    …но это совсем не в тему

    …в контексте вопроса сие не имеет значения.

    pfg21, твой последний вопрос был, я напомню, "в каком месте бредовость", в контексте этого вопроса это имеет непосредственное значение.

    код, реализующий mmap под /dev/mem, не приводил :)

    Я из этого могу сделать только вывод о том, что ты мои ответы не читаешь. Потому что я приводил ссылку на этот код, вот в этом комментарии: "Эта функция, как можно увидеть здесь, вызывает…". Как тебя после этого воспринимать хоть сколько-нибудь серьёзно -- непонятно.
    Написано
  • Как общаться с устройствами ввода вывода на Си в linux?

    jcmvbkbc
    @jcmvbkbc
    это потребует наличие в хуке кода обработки доступов пользователя к /dev/mem.

    pfg21, Нет, не потребует. Потому что проверкой доступа занимается вызов open, которым файл открывают.

    сильно сомневаюсь что такой хук будет внедрен, смысл в нем ??

    Я выше приводил ссылки в код ядра реализующий mmap для /dev/mem, в чём ты конкретно сомневаешься, я не понял?
    Написано
  • Как общаться с устройствами ввода вывода на Си в linux?

    jcmvbkbc
    @jcmvbkbc
    в каком месте бредовость ??

    pfg21, в каждом предложении. Конкретно:

    mmap отлавливает это изменение…

    когда пользователь обращается к отображённой памяти, вызов mmap уже давно закончился и не может "отловить это изменение". Ты имел в виду подсистему виртуальной памяти?

    …и формирует файловый запрос на запись. запрос получает драйвер VFS разбирает путь

    Т.е., я правильно понимаю, мы отобразили файл в память (а это значит, откыли его перед этим), а теперь "mmap, отловивший изменения в памяти" посылает запрос, в котором фигурирует путь до этого файла? А если файл тем временем удалили? Или переименовали? Или удалили и создали другой файл с таким же именем на его месте?

    выявляет подстрочку /dev

    Т.е., я правильно понимаю, что по-твоему /dev/mem работает только пока он в /dev, а если его перенести в какое-нибудь другое место, то он работать перестанет?

    и направляет его в драйвер udev ответственный за этот путь

    Что это за термин, "драйвер udev"? devtmpfs?
    Написано
  • Как общаться с устройствами ввода вывода на Си в linux?

    jcmvbkbc
    @jcmvbkbc
    не все знаю, чего в этом криповатого ??

    pfg21, чрезмерно уверенный тон ответов. "Не всё знаею", а пишешь -- как будто экспертным мнением делишься. И не в первый раз, и не только по этому топику.

    Цепочку действий для записи значения в память с помощью спец.файла /dev/mem я привел чуть выше.

    Это не "ты привёл цепочку действий", это ты какую-то бредовую фантазию привёл, без каких либо документальных потверждений.

    Приведи свою.

    Если внимательно прочитать этот комментарий, то он как раз об этом. Но и без того, любая книжка по внутренностям линукса это делает. Половина главы 15 LDD, например, буквально об этом.

    Я сильно сомневаюсь что в функции mmap есть хук под файл /dev/mem

    Хука под файл /dev/mem конечно нет. Есть поле mmap в структуре file_operations, позволяющее любой файловой системе или драйверу предоставить свою реализацию mmap для файлов которые они обслуживают. Опять же, любая книжка по внутренностям ядра об этом рассказывает.
    Написано
  • Как общаться с устройствами ввода вывода на Си в linux?

    jcmvbkbc
    @jcmvbkbc
    pfg21, выбери что-нибудь одно, либо

    неа, ваапче не так :)

    либо

    согласен. этих подробностей не знаю.

    И то и то вместе смотрится как-то крипово, как будто ты не человек разумный, а бот какой-то.

    запись значения в память, посредством /dev/mem, проходит кучу прослоек

    pfg21, запись значения в память происходит напрямую, нет никаких прослоек.
    Написано
  • Как общаться с устройствами ввода вывода на Си в linux?

    jcmvbkbc
    @jcmvbkbc
    mmap отображает фал на произвольную память, котрую ему выдал менджер памяти. ты записываешь в эту область, mmap отлавливает это изменение и формирует файловый запрос на запись. запрос получает драйвер VFS разбирает путь, выявляет подстрочку /dev и направляет его в драйвер udev ответственный за этот путь. udev перенаправляет запрос в драйвер, ответственный за /dev/mem, и только он разбирает файловый запрос и пишет напрямую в указанный адрес физической памяти.


    pfg21, прикольная фантазия.
    А теперь о реальности: когда ты открываешь файл /dev/mem и передаёшь его fd в системный вызов mmap, в ядре вызывается функция mmap_mem зарегистрированная здесь. Эта функция, как можно увидеть здесь, вызывает remap_pfn_range для выделенного участка виртуальной памяти, а в качестве параметра pfn, определяющего номер страницы физической памяти, как написано здесь, передаёт vma->vm_pgoff, т.е. смещение, переданное mmap, но выраженное в страницах. Т.е. не "произвольную память, котрую ему выдал менджер памяти", а вполне конкретную физическую память, которую ты попросил в вызове mmap.
    Написано
  • Как общаться с устройствами ввода вывода на Си в linux?

    jcmvbkbc
    @jcmvbkbc
    ты работаешь с памятью опосредовано :) через драйвер /dev/mem

    pfg21, ты создаёшь отображение памяти через драйвер. К отображённой памяти ты обращаешься напрямую, процессорными инструкциями.
    Написано
  • Как общаться с устройствами ввода вывода на Си в linux?

    jcmvbkbc
    @jcmvbkbc
    /dev/mem "не прямой путь"

    pfg21, в чём заключается его "непрямота"?
    Написано
  • Как общаться с устройствами ввода вывода на Си в linux?

    jcmvbkbc
    @jcmvbkbc
    никому другому ядро не даст работать напрямую с памятью.

    pfg21, man ioperm, google mmap /dev/mem
    Написано
  • Почему clang выдает такой ассемблерный код?

    jcmvbkbc
    @jcmvbkbc
    обычно -O3 для отладки с макс. кол-вом символов

    Сергей Соловьев, -O3 -- это максимальная оптимизация. Максимальная отладочная информация -- -g3. Уровень отдладочной информации выбранной ключом -g не влияет на сгенерированный код.
    Написано