|
1 / 1 / 0
Регистрация: 26.05.2021
Сообщений: 80
|
|||||||||||
Работа с массивом в разных файлах28.11.2021, 00:24. Показов 4854. Ответов 32
Всем привет. столкнулся с проблемой, у меня есть два файла, в одном объявлен массив
До этого чтоб объявить массив в оперативке приходилось его делать не const, и тогда во втором файле он работал. Но PROGMEM нельзя сделать без const. Вообщем я запутался, помогите...
0
|
|||||||||||
| 28.11.2021, 00:24 | |
|
Ответы с готовыми решениями:
32
работа с экземпляром в разных файлах Работа в разных заголовочных файлах и исходниках
|
|
34 / 29 / 10
Регистрация: 26.06.2020
Сообщений: 113
|
|
| 28.11.2021, 14:26 | |
|
1
|
|
|
1 / 1 / 0
Регистрация: 26.05.2021
Сообщений: 80
|
|
| 28.11.2021, 14:36 [ТС] | |
|
это я знаю. но возможно в будущем возникнут потребности в такого вида извращениях, а я уже буду готов)
еще раз спасибо что помогли
0
|
|
|
1 / 1 / 0
Регистрация: 26.05.2021
Сообщений: 80
|
|||||||||||||||||||||
| 15.01.2022, 23:39 [ТС] | |||||||||||||||||||||
|
Продолжаю я мучать PROGMEM, и возникли некие непонятки.
объявил переменную в прогмем и указатель на нее.
0
|
|||||||||||||||||||||
|
34 / 29 / 10
Регистрация: 26.06.2020
Сообщений: 113
|
||
| 16.01.2022, 16:54 | ||
|
Он напоминает вопрос. "Что происходит, почему так, ничего не понимаю?" ![]() "proverka = (char*) pgm_read_ptr(adrs);" Здесь вы получили значение, хранящиеся в переменной, адрес которой находится в переменной (типа указатель на char) - adrs. "proverka = (char*) pgm_read_ptr(&adrs);" Здесь вы получаете адрес cамой переменной - adrs. "proverka = (char*) adrs;" Здесь, после вашего выражения, переменная proverka будет хранить адрес adrs. pgm_read_ptr - Возвращаемый результат - будет число, хранящаяся по адресу, указанному в 1 параметре функции. Просто для получения значения, по указанному адресу, будут использоваться инструкции "lpm" - загрузка значения из памяти программы.
0
|
||
|
1 / 1 / 0
Регистрация: 26.05.2021
Сообщений: 80
|
|
| 17.01.2022, 08:38 [ТС] | |
|
Вы меня наверное не так поняли. Я имею ввиду что как так получилось что можно считать адрес из памяти программ без специального макроса? Единственное объяснение что на этапе компиляции уже известно какой адрес я хочу получить.
Вот тогда не понятно для чего нужны эти макросы pgm_read_ptr Так же само касается и strcpy_P . Ей получается можно скормить адрес без макроса...
0
|
|
|
34 / 29 / 10
Регистрация: 26.06.2020
Сообщений: 113
|
|
| 17.01.2022, 12:12 | |
|
Ramzess1488,
Считать значение хранящееся в памяти программы, вы можете только с помощью макросов объявленных в файле avr/pgmspace.h. А что там хранится в этих данных, вы решаете сами, могут хранится и адреса. Переменная adrs, которая объявлена в памяти программы, хранит адрес переменной hzr, значение которой 232. pgm_read_ptr возвращает 16 разрядное значение из памяти программы, по адресу которой вы ему передадите. А адрес переменной, не известен на этапе компиляции, он появляется на этапе линковки. До линковки (на этапе компиляции) адресов нет.
0
|
|
|
1 / 1 / 0
Регистрация: 26.05.2021
Сообщений: 80
|
|||||||
| 17.01.2022, 18:13 [ТС] | |||||||
0
|
|||||||
|
34 / 29 / 10
Регистрация: 26.06.2020
Сообщений: 113
|
||||||
| 17.01.2022, 19:27 | ||||||
|
Ramzess1488,
Прогон на симуляторе "simulavr", оптимизация 0. результат: (char*) pgm_read_ptr(adrs) = 0x26e8 (char*) pgm_read_ptr(&adrs) = 0x26 proverka (char*) adrs = 0x26 proverka (char*) &adrs = 0x27 Код из файла "main.lss": 00000026 <__trampolines_end>: 26: e8 26 Address 0x00000026 is out of bounds. .word 0xffff ; ???? 00000027 <adrs>: 27: 26 00 Переменная hzr адрес 00x26, adrs адрес 00x27. Прикладываю файл проекта, с симулятором.
0
|
||||||
|
1 / 1 / 0
Регистрация: 26.05.2021
Сообщений: 80
|
|
| 17.01.2022, 20:03 [ТС] | |
|
я наверно надоел уже, но никак не пойму сути. вот даже по вашим ответам видно что конструкция proverka (char*) adrs = 0x26 работает. хотя не должна. мы ведь пытаемся получить данные из памяти программ
прилагаю скриншоты из атмел студио, я подключил отладчик и смотрел куда именно записывает программа
0
|
|
|
34 / 29 / 10
Регистрация: 26.06.2020
Сообщений: 113
|
||||||
| 18.01.2022, 08:46 | ||||||
|
Вот как транслятор делает код, это взял из файла "main.lst".
0
|
||||||
|
1 / 1 / 0
Регистрация: 26.05.2021
Сообщений: 80
|
|
| 19.01.2022, 22:22 [ТС] | |
|
я понял. получается что АВР в этом плане сложнее даже стм32.
Добавлено через 2 часа 6 минут Перечитываю ваше сообщение: "proverka = (char*) pgm_read_ptr(&adrs);" Здесь вы получаете адрес cамой переменной - adrs. "proverka = (char*) adrs;" Здесь, после вашего выражения, переменная proverka будет хранить адрес adrs. Что от сюда следует? что эти два выражение идентичны?
1
|
|
|
34 / 29 / 10
Регистрация: 26.06.2020
Сообщений: 113
|
||
| 20.01.2022, 06:17 | ||
|
Ramzess1488, Спасибо, за подсказку.
Простите великодушно.
1
|
||
|
1 / 1 / 0
Регистрация: 26.05.2021
Сообщений: 80
|
|
| 20.01.2022, 22:38 [ТС] | |
|
вот теперь вроде как картинка сложилась) спасибо
0
|
|
| 20.01.2022, 22:38 | |
|
Программирование в разных файлах JS Функционал в разных файлах Vector в разных файлах Сравнение строк в разных файлах Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|