|
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
|
|||||||||||
Указатели и mmap() линукс01.12.2014, 14:19. Показов 6294. Ответов 10
Метки нет (Все метки)
Помогите разобраться с "затупом". Короче ситуация следующая:
Есть арм процессор под imbiddid linux, который управляет ПЛИСиной. Как из под линукса добраться до gpio? Очень просто, для этого используют функции mmap(). Примерно так:
И ура на входе начали появляться какие то цифры. Правда не на долго, ибо уже на следующую итерацию нихрена не заработало. Опытным удалось установить что, везде в инициализации должно быть (u_int8_t *)virtual_base. А вот по ходу программы городить преобразование указателей *(u_int32_t *) надо только для 32х разрядных портов, а вот там где вывод 1 надо оставить просто, например *strobe_base . Понимаю что вопрос, возможно, из сферы телепатии, но что не правильно было в первом случае понять не могу. ЗЫ Писал на C++ в Qt 5.2.
0
|
|||||||||||
| 01.12.2014, 14:19 | |
|
Ответы с готовыми решениями:
10
Си/Си++/Линукс, тесты на тему управления памятью и работе с ос линукс, папками и каталогами mmap() failed Mmap в nasm |
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
|
| 01.12.2014, 14:35 | |
|
Кстати, в линуксе есть и нормальный драйвер GPIO. Не обязательно через указатель на память обращаться.
0
|
|
|
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
|
|
| 01.12.2014, 14:46 | |
|
Да есть, но конкретно в этой сборке его выкинули. А пересобрать ядро... я до этого еще не дорос.
0
|
|
|
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
|
|
| 01.12.2014, 14:48 | |
|
я мог что-то неправильно понять, но делая
(u_int32_t *)virtual_base + nnn мы смещаемся на nnn 32-бит слов вперед. а надо наверняка смещаться на nnn байт. вот это u_int32_t *data_in_base= (u_int8_t *)virtual_base + nnn *data_in_base = xxx не решит проблему?
0
|
|
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
||
| 01.12.2014, 15:10 | ||
В ней nnn должно быть кратно четырём.
0
|
||
|
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
|
||||||||
| 01.12.2014, 15:11 | ||||||||
Я просто понимал это код, как присвоить указателю на 32 разрядное число, адрес порта, а сколько там надо взять байт(слов) для сдвига компилятор сам разберется.
То есть как я понимаю сдвиг virtual_base всегда должен быть приведен к байту. Хотя если совсем честно, что делает функция mmap я не очень догоняю.
0
|
||||||||
|
0 / 0 / 0
Регистрация: 20.06.2010
Сообщений: 454
|
|
| 01.12.2014, 15:23 | |
|
Ваша система с mmu?
В системах с mmu память устройств отделена от пространства пользователя, управляет этим как раз mmap system. Можно начать читать тут: http://www.xml.com/ldd/chaptir/book/ch13.html При no-mmu (ucLinux и др) mmap() тоже бывает, но это отдельная тема.
0
|
|
|
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
|
||||||||||||
| 01.12.2014, 15:27 | ||||||||||||
В ней nnn должно быть кратно четырём. Спасибо кажись не много начинает прояснятся. Видимо, когда первый раз у меня кое как начало работать(когда я везде проставил (u_int8_t *)virtual_base ) , я оставил объявление указателей без изменений:
*( u_int32_t *)strobe_base =1 -> *strobe_base =1; temp =* data_in_base -> temp =*( u_int32_t *) data_in_base; Короче, как тут не вспомнить известную цитату про указатели и выстрел в ногу. Но касательно 8-ми разрядной m_tid_base, реально на плате 10 светодиодов. А потому конструкция * m_tid_base=0хFF зажигает только первые 8. А что бы зажечь остальные надо *( u_int32_t *)m_tid_base=0х4FF.
0
|
||||||||||||
|
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
|
||
| 01.12.2014, 15:29 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
|
|||
| 01.12.2014, 16:47 | |||
В ней nnn должно быть кратно четырём. си - вообще опасный язык. надо понимать, что делаешь.
0
|
|||
|
0 / 0 / 0
Регистрация: 15.12.2010
Сообщений: 931
|
||||||
| 01.12.2014, 17:06 | ||||||
|
Ну так :
0
|
||||||
| 01.12.2014, 17:06 | |
|
Помогаю со студенческими работами здесь
11
mmap запись в отображения Подскажите пожалуйста как правильно Grub в линукс Федоре настроить, чтобы ещё и второй линукс Мандриву можно было загружать. ImportError: cannot import name 'PROT_READ' from 'mmap' Ошибка при указании offset в mmap Работа процессов с общим файлом (mmap) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|