Я пытаюсь прочитать значение переменной, ранее записанной на флэш-памяти NVM.Чтение значения из необработанной памяти (совместимо с MISRA)
Мой код:
uintptr_t address = getAddress();
//[MISRA C++ Rule 5-2-8] cast from unsigned int to pointer
uint16_t value = *(reinterpret_cast<uint16_t*>(address));
Проблема в том, отлитый из uintptr_t указателю не допускается в MISRA. Кто-нибудь знает, как получить доступ к этой памяти?
Я нарушаю одно из больших правил MISRA. Использование динамической памяти (содержимое вспышки динамическое, поэтому адрес данных является переменным). Только потому, что вы думаете объявить const-указатель на адрес флэш-памяти и получить доступ к нему после записи данных.
Каковы правила, если они не нарушают их? :)
«Динамическая память» не должно быть проблемой MISRA. Если 'GetAddress' вернул' void * ',' static_cast' было бы достаточно, и ваш инструмент, вероятно, не стал бы жаловаться. – MSalters
GetAddres не может вернуть указатель, потому что адрес хранится в целочисленной переменной.Итак, если getAddres делает: void * ptr = reinterpret_cast [void *] (адрес); проблема будет такой же, но в другом месте. (Я использовал [], потому что я нахожусь в телефоне и не имею символов gt и lt). –
Затем исправьте это - сохраните его в 'void *'. Реальная проблема остается прежней: вы используете неправильный тип для адреса. MISRA является достаточно строгим в этом отношении, храните указатели в переменных указателя. – MSalters