Мне нужно написать 0x000по адресу 0x8000000, возможно ли это в C?Как написать данные в конкретном адресе в C
ответ
Если вы работаете с аппаратным регистром в встроенной системе, то стандартный способ:
int volatile * const p_reg = (int *) 0x8000000;
*p_reg = 0x1234;
Вы можете иметь много проблем с оптимизацией компилятора, если опустить летучий
Вы можете, но у вас будет segfault 99.9999..9% времени, потому что у вашей программы не будет доступа по этому адресу памяти.
int *nb = (int *) 0x8000000;
*nb = 0x000;
Это зависит также от сценария компоновщика (вы можете опустить некоторые банки RAM и использовать их вручную), хотя это не рекомендуется. – lucasg
Ну если это назначение новичка в классе ac, я подозреваю, что это турбо или борланд, где вы программируете в 16-битной среде с адресной схемой смещения сегмента. В этом случае используется int * far ptr, с далеким, являющимся типом указателя для доступа к адресу из вашего текущего сегмента. 0xb8000000 был начальным адресом видеопамяти текстового режима.
т.е.
int far * p = 0xB8000000;
*p = 'A'; // This would actually print char 'A' on screen
*(p+1) = <some number>; // this would determine the color of char A
Обратите внимание, что это используется, чтобы быть 16-битное программирование. Таким образом, обычный int * будет 16 бит и, следовательно, не сможет получить доступ за пределы текущего сегмента памяти.
Мы использовали для реализации printf самостоятельно, напрямую записывая видеоматериалы. Это было задание класса в курсе программирования c более десяти лет назад. Возможно, это соответствует вашему сценарию.
This объяснение может быть полезным, а также
Это не задание начинающего .. :) – vkulkarni
Согласен, не очень «начинающий», заданный в начале курса программирования. Но это, безусловно, не требует реальной потребности даже в то время. Тем не менее, это помогает понять память, указатели и возможность самостоятельно писать функции. Следовательно, это скорее академическое использование. – fayyazkl
- 1. Как написать файл в конкретном матче
- 2. Как написать данные в расширении postgresql C?
- 3. Как написать большие данные в файл C#
- 4. Хостинг серверного сокета на конкретном IP-адресе
- 5. node.js server.listen на конкретном IP-адресе EADDRNOTAVAIL
- 6. Как написать в XMl на конкретном узле в Android?
- 7. Содержимое на конкретном адресе памяти отличается от ожидаемого в gdb
- 8. Данные POST в URL-адресе
- 9. Данные формы в URL-адресе
- 10. Как я могу написать несколько параметров в моем URL-адресе?
- 11. Кастинг в конкретном коде C#
- 12. Openpyxl - как заполнять данные на конкретном листе
- 13. Как написать данные Socket в текстовый файл в C#
- 14. Bootstrap, показать данные-toggle = "tab" в адресе
- 15. Как написать в сетевом адресе/сетевой маске следующее адресное пространство?
- 16. jList не отображает данные в конкретном случае
- 17. об адресе вектора в C++
- 18. Сохранить указатель в c в конкретном регистре
- 19. GetDayOfWeek в конкретном каландра (PersianCalender) в C#
- 20. AStar в конкретном случае в C#
- 21. Извлечь данные, хранящиеся в URL-адресе
- 22. Зашифрованные данные в URL-адресе и соли
- 23. Как написать данные о пересмотре в файл?
- 24. Как написать данные из приложения C# в GE Proficy Historian
- 25. Как написать «фиктивные данные» в двоичный файл?
- 26. Как получить данные о конкретном ст.ст. вращателя
- 27. Перенаправить Nginx Vhost/URL, если на конкретном URL-адресе нет?
- 28. Построить массив в определенном адресе в C
- 29. Экранная страница Значок действия на конкретном URL-адресе
- 30. Json-Viewer: данные в URL-адресе
Этот адрес, вероятно, не будет действителен для записи. Возможно, вы сможете заставить его существовать, например, с помощью '' mmap' и 'MAP_FIXED' (http://pubs.opengroup.org/onlinepubs/7908799/xsh/mmap.html), если вы используете ОС POSIX , – BoBTFish
@BoBTFish Может быть, он программирует для микроконтроллера. – RedX
Для чего вам это нужно? И почему? И с чем? – zoska