Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.08.2021, 12:51   #11
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

Цитата:
Сообщение от Desc Посмотреть сообщение
При объявлении:
Код:
#define SIZE 256 // Глобальная константа, указывает рабочий объём буфера.
uint8_t buff[SIZE]; // size == 2056 bit
получите размер буфера 2 К.байта.
Здесь у меня опечатка. Подразумевались 2 килобита, а не 2 килобайта.

Цитата:
Сообщение от Air Посмотреть сообщение
Так как места под массив не зарезервировано и не дай бог, в этот момент произойдёт прерывание, приоритетом выше текущего, в это место может записаться другая информация.
Код:
std::cout << buff[1] << std::endl;
И этот оператор вернёт уже не 32767
Так и зачем тогда тему создали. Пытаюсь объяснить как так происходит, говорите так нельзя. Понятно что нельзя. ))

Цитата:
Сообщение от Air Посмотреть сообщение
Те. 8 бит, от типа данных uint8_t, о которых вы говорите, как раз таки пишутся во Flash (на первых скринах это видно)
uint8_t это и есть указание компилятору что при инициализации будет занято в RAM, по умолчанию 8 бит. Или бальше если явно при объявлении был указан больший размер.
А будете сохранять во флеш или нет роли не играет.
I am not a wizard, I am just learning.

Последний раз редактировалось Desc; 29.08.2021 в 12:53.
Desc вне форума Ответить с цитированием
Старый 29.08.2021, 13:06   #12
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Цитата:
Сообщение от Desc Посмотреть сообщение
А будете сохранять во флеш или нет роли не играет.
Что бы массив байт записались во Flash нужно явно это указать директивой PROGMEM.
В этом случае методом std::cout << buff[1] << std::endl; доступа даже на чтение не получите, не говоря уже о записи. Запись вообще станет невозможной.
В Си, например, есть функция pgm_read_byte, которая позволяет прочесть нужный адрес в статической памяти, но не более.
По этому роль тут важная.

Цитата:
Сообщение от Desc
Так и зачем тогда тему создали. Пытаюсь объяснить как так происходит, говорите так нельзя. Понятно что нельзя. ))
Цитата:
Суть данного поста не в том, что бы посчитать кто сколько чего занимает, а причины, почему данные передавались, почему на дисплее не было "мусора".
От того, что переменная существует и занимает место в памяти, ... сложно объясняет, почему не было ошибки... Или я чего-то недопонимаю...
Всё гениальное - просто!

Последний раз редактировалось Air; 29.08.2021 в 13:09.
Air вне форума Ответить с цитированием
Старый 29.08.2021, 13:12   #13
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

Вопрос темы тогда в чем.
Почему при указанном якобы нулевом размере переменной происходит чтение?
Или все же как корректно читать ПЗУ?
Вы уж будьте добры уточните. А то похоже говорим о различных методах.
I am not a wizard, I am just learning.
Desc вне форума Ответить с цитированием
Старый 29.08.2021, 13:27   #14
Air
Участник клуба
 
Аватар для Air
 
Регистрация: 30.04.2007
Сообщений: 1,307
По умолчанию

Desc
Цитирую из первого поста.
Цитата:
Сообщение от Air Посмотреть сообщение
А вот что не нормально!
Мне нужно было проверить объём ОЗУ занимаемый не буфером, а всякими переменными, по этому я константу SIZE сделал равной нулю.
Суть темы в том, что бы читать изложенные мысли людей на сложившуюся ошибочную ситуацию в коде и
возможных причинах не появления ошибок. Я думаю каждый маломальский программист понимает, что работать с не выделенной памятью по меньшей мере опасно и глупо.

Всё дело в том, что в книжке не напишут о возможных ситуациях и причинах случайно работающей программы, потому что таких ситуаций могут быть миллионы. Но людей много и кто-то что-то знает.

Цитата:
Сообщение от Desc
Или все же как корректно читать ПЗУ?
Нет, нет. Об этом я не заикался даже =))
Всё гениальное - просто!
Air вне форума Ответить с цитированием
Старый 29.08.2021, 13:52   #15
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

Дело в том что так называемый буфер, в данном случае это та же переменная.
Объявление uint8_t buff это объявление переменной. И каждая переменная после инициализации занимает определенное место в ОЗУ.
Код:
uint8_t buff0;    // объявлен тип переменной, до инициализации ОЗУ не занимает
                  // после инициализации занимает в ОЗУ 8 бит
                  // поведение предсказуемо
uint8_t buff1[1]; // объявлен тип переменной, до инициализации ОЗУ не занимает
                  // после инициализации занимает в ОЗУ 8 бит
                  // поведение предсказуемо
uint8_t buff2[0]; // объявлен тип переменной, до инициализации ОЗУ не занимает
                  // после инициализации занимает в ОЗУ 8 бит
                  // поведение не предсказуемо
Т. е. переменная uint8_t buff2[0] после инициализации займет в ОЗУ место но ее поведение будет не предсказуемо.
О подобных упущениях как правило сообщает линковщик в виде предупреждений.
Как-бы-так.
I am not a wizard, I am just learning.
Desc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Здравствуйте ! в чем проблема,почему почему время исполнения операций не работает ? ion leahu Помощь студентам 6 23.11.2014 19:36
AVR. Почему одно прерывание блокирует другое? Admin2 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 27.07.2013 22:30
Формула ЕСЛИ не работает. Почему? cutie_girl Microsoft Office Excel 3 25.10.2012 23:18
Скрипт не работает, если линкую локально, а работает если линкую на .. keen_ JavaScript, Ajax 3 08.03.2012 07:58
AVR ATmega 128: почему не происходит переход? Blondy Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 06.05.2011 01:28