|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
|||||||||||
avr-gcc, ассемблер, директивы резервирования инициализированной памяти20.10.2024, 21:40. Показов 2719. Ответов 30
Здравствуйте!
Какие директивы резервирования инциализированной памяти в avr-gcc? В nasm'a я знаю что это выглядит так:
0
|
|||||||||||
| 20.10.2024, 21:40 | |
|
Ответы с готовыми решениями:
30
Ассемблер AVR-AS из AVR-GCC
Сколько байт памяти будут распределены после выполнения заданной директивы языка ассемблер |
|
1472 / 487 / 72
Регистрация: 22.09.2023
Сообщений: 1,492
|
||
| 20.10.2024, 22:38 | ||
Сообщение было отмечено Medusa Kaiser как решение
Решение
https://ftp.gnu.org/old-gnu/Ma... as_7.html:
1
|
||
|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
|
| 21.10.2024, 09:09 [ТС] | |
|
Благодарю! То что надо.
0
|
|
|
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
|
|||||||||||
| 21.10.2024, 13:01 | |||||||||||
|
Вот тут уже важно в какой секции вы это делаете.
.text. Секция .data нужна скорее чтобы распределить память под переменные, но записывать в них значения придется вручную.
.byte, .half, .word, ...
0
|
|||||||||||
|
1472 / 487 / 72
Регистрация: 22.09.2023
Сообщений: 1,492
|
|||||||
| 21.10.2024, 13:39 | |||||||
0
|
|||||||
|
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
|
||
| 21.10.2024, 14:03 | ||
|
0
|
||
|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
|
| 21.10.2024, 14:58 [ТС] | |
|
0
|
|
|
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
|
|
| 21.10.2024, 15:19 | |
|
Medusa Kaiser, вы знакомы с Си или другими языками высокого уровня? Запись
int x = 123; вам о чем-нибудь говорит? Проблема в том, что при включении контроллера в его оперативке будет мусор. А чтобы там появились осмысленные данные, придется писать код, который их туда запишет. Пока ваши программы простые, достаточно полностью ручной записи. А представьте, что вам понадобился здоровенный буфер на сотню байт. Не писать же кучу ldi + sts в столбик. Вот поэтому и выделяют во флешке специальную область, где хранятся начальные значения всех переменных плюс специальный стартап-код, который их оттуда читает и копирует в оперативку. А заодно прочую базовую инициализацию вроде стека, прерываний и т.п.Еще раз говорю, что это актуально для более-менее сложных программ. Мне, например, на ассемблере avr не пригодилось ни разу. Когда понадобилось писать что-то сложное, уже использовал Си. А с линкер-скриптами и стартап-кодом познакомился совсем недавно, когда изучал контроллеры risc-v.
1
|
|
|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
||||||||
| 21.10.2024, 15:53 [ТС] | ||||||||
0
|
||||||||
|
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
|
||||||||||||||||||||||||
| 21.10.2024, 17:17 | ||||||||||||||||||||||||
|
Представьте, что вы к контроллеру подключили какое-то внешнее устройство, которое управляется текстовыми строками. Ну, например, светофор, понимающий команды "RED 10", "GREEN 50", "YELLOW 100", число - яркость в процентах. Одним из решений будет завести полуфабрикатную строку, что-то вроде
0
|
||||||||||||||||||||||||
|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
||||||||||||||||||||||||||
| 23.10.2024, 20:08 [ТС] | ||||||||||||||||||||||||||
![]() Как всё это дело работает с МК я пока не знаю. Идут ли cmd_*:, в оперативную память при включении МК?
Так что, чтобы продолжить дискуссию, мне нужно понять как с этим работать.Предположим, что UART у меня инициализирован правильно (я уже с отдельными байтиками поигрался, например спокойно вывожу все символы от A до Z, а в конце ставлю перенос строки и завершаю подпрограмму). Есть код:
0
|
||||||||||||||||||||||||||
|
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
|
||||||||
| 23.10.2024, 22:42 | ||||||||
.text забыли. Вы же не хотите код main() располагать в оперативке.
0
|
||||||||
|
10 / 8 / 2
Регистрация: 01.11.2019
Сообщений: 95
|
||||||||||||
| 23.10.2024, 23:08 | ||||||||||||
Вот HEX:
0
|
||||||||||||
|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
|||||||
| 23.10.2024, 23:23 [ТС] | |||||||
![]() ![]() Но .data это же static storage which has an initializer that is not all zeroes... Тут ТС надо ещё подумать... Добавлено через 8 минут Также у меня не avra, а avr-gcc -- другой диалект ассемблера. Т.е. если я сейчас скопирую ваш код, мне ассемблер в первую очередь что-то вроде "...uknown pseudo-op ".cseg"..." А так все мелкие задачки, которые я перед собой ставил оно выполняет. По UART отдельной подпрограммой выдаёт символы от A до Z. По UART отдельной подпрограммой выдаёт "Hello, world!\n" (Спасибо за это COKPOWEHEU. Но с секцией .data я ещё поговорю.) По прерыванию таймера 0 мигает светодиодиком.
0
|
|||||||
|
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
|
|||
| 24.10.2024, 00:28 | |||
|
И еще раз напоминаю: не смешивайте программирование под операционную систему и под контроллеры. В первом случае у вас есть целое окружение, написанное умными дяденьками. Оно может инициализировать области памяти, обеспечивать защиту от доступа в недоступные места и т.п. А во втором случае в роли умных дяденек - вы. Железо за вас делать ничего не будет, вы должны сами ему сказать что и куда копировать.
0
|
|||
|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
||
| 24.10.2024, 07:48 [ТС] | ||
|
0
|
||
|
10 / 8 / 2
Регистрация: 01.11.2019
Сообщений: 95
|
|
| 24.10.2024, 07:51 | |
|
Я, признаюсь, не знал что такое существует и не понимаю: что такое avr-gcc. Можете понятно объяснить (ссылками на "для чайников" в том числе) что это такое?
0
|
|
|
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
|
|||
| 24.10.2024, 08:39 | |||
|
И еще одно соображение. На метку RESET вы можете попасть не только из-за включения питания, но и из-за ресета или из-за бутлоадера. Та же Ардуина, например. Вот вы ее прошили через USB, тамошний загрузчик заполнил начало флеша - а потом передал туда управление. Но вот ОЗУ вашему коду досталось какое было, со всем бутлоадерным мусором. Из определения, gcc - GNU C compiler или GNU compiler collection. Одновременно компилятор языка Си и оболочка для вызова разных компиляторов. В том числе, как видите, и ассемблерного. В отличие от ассемблера, gcc проходит весь поток создания исполняемого файла - препроцессирование (разворачивание #define, #include и т.д.), компиляция (превращение файлов исходного кода в объектные, *.c->*.o, *.asm->*.o, ...) и линковка (объединение объектных файлов, добавление библиотек, расстановка адресов, ... чтобы получить исполняемый файл *.o+*.o+...+*.o -> *.elf).
0
|
|||
|
10 / 8 / 2
Регистрация: 01.11.2019
Сообщений: 95
|
||
| 24.10.2024, 11:06 | ||
|
0
|
||
|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
|||||||
| 24.10.2024, 14:40 [ТС] | |||||||
![]() Как выполнять отладку AVR без эмулятора/симулятора (с ходу разницу не вспомню) -- я не знаю. Знаю, что к STM платам можно непосредственно подключаться вот прям через gdb.
0
|
|||||||
| 24.10.2024, 14:40 | |
|
Помогаю со студенческими работами здесь
20
STM8 после AVR с AVR-GCC
Gcc-avr Не работает ассемблер под GCC GCC-AVR Linux Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|