|
Представление адреса. Как лучше. |
|
|
|
Jun 18 2018, 10:04
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
У меня при обращении к памяти (чтение, запись) нужно передавать адрес. Адрес состоит из нескольких составляющих (на картинке).Изначально была такая конструкция Код typedef struct { uint32_t page_add : 6; uint32_t block_add : 11; uint32_t reserved : 15; }g_row_address; typedef union{ uint32_t all; g_row_address bits; }g_flashrow_address; Может так и проще работать но я как то сравнивал листинги и такой код компилирует в два раза больше инструкций чем mask&shift.Я подумал сделать по простому Код #define ROW_ADDRESS(BLOCK_ADDR,PAGE_ADDR) (BLOCK_ADDR|(PAGE_ADDR<<6)) но адрес 17-битный. то есть возникает тот же гемор сдвигать влево а потом вправо. или я что то упускаю?
Сообщение отредактировал Jenya7 - Jun 18 2018, 10:04
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
Jun 18 2018, 11:18
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(jcxz @ Jun 18 2018, 14:10)  А когда нужно изменить размер какого-то элемента - пересчитываете все эти дефайны врукопашную? Опишите структуру своей флешь через struct {...} и не конкурируйте с компилятором - времена рукопашной компоновки памяти давно прошли. Зачем вручную? Препроцессор считает. Код #define SFM_SYSTEM_BASE 0x00060000U //!< SFM System Variables ... #define SFM_SET1 (SFM_SYSTEM_BASE + SFM_PAGESIZE * 8) #define SFM_SET2 (SFM_SYSTEM_BASE + SFM_PAGESIZE * 9) ... Предлагаете описать в виде структуры из массивов, а потом вытягивать адреса членов этой структуры? Можно и так. Зато я точно знаю, где что расположено и сколько страниц занимает, а вам считать придется. А вдруг переполните размер памяти?
|
|
|
|
|
Jun 18 2018, 11:30
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(ViKo @ Jun 18 2018, 14:18)  Зачем вручную? Препроцессор считает. Ну да! Это пока у вас всего пара таких переменных и когда одного размера/типа. А когда их будет 100, да все разные - кто будет все эти 8,9,...,99 пересчитывать? Посмотрите насколько удобнее и понятнее: Код struct { //каждый байт структуры - страница FLASH char SFM_SET1; char SFM_SET2; ... };
|
|
|
|
Сообщений в этой теме
Jenya7 Представление адреса. Как лучше. Jun 18 2018, 10:04    ViKo Цитата(jcxz @ Jun 18 2018, 14:30) //кажды... Jun 18 2018, 11:35     jcxz Цитата(ViKo @ Jun 18 2018, 14:35) А если ... Jun 18 2018, 11:39      ViKo Цитата(jcxz @ Jun 18 2018, 14:39) char ma... Jun 18 2018, 11:45       jcxz Цитата(ViKo @ Jun 18 2018, 14:45) А как в... Jun 18 2018, 12:24 Jenya7 я что то утерял нить повествования.
проблема в то... Jun 18 2018, 12:01 ViKo Цитата(Jenya7 @ Jun 18 2018, 15:01) я что... Jun 18 2018, 12:12  Jenya7 Цитата(ViKo @ Jun 18 2018, 18:12) Храните... Jun 18 2018, 12:16 ViKo Я описываю структуры typedef-ми. Их точно никто ни... Jun 18 2018, 12:28 jcxz Цитата(ViKo @ Jun 18 2018, 15:28) Я описы... Jun 18 2018, 12:44 ViKo Не вижу увеличения size на размер страницы.
Чем ва... Jun 18 2018, 12:56 jcxz Цитата(ViKo @ Jun 18 2018, 15:56) Не вижу... Jun 18 2018, 13:13 ViKo Мне раз формулы задать, сложностей не вижу. Объект... Jun 18 2018, 13:29 jcxz Цитата(ViKo @ Jun 18 2018, 16:29) Ваша ид... Jun 18 2018, 13:52 ViKo Да, я гений. Я умею задать дефайнами размеры, вари... Jun 19 2018, 06:17 jcxz Цитата(ViKo @ Jun 19 2018, 09:17) Повторю... Jun 19 2018, 07:36  ViKo Цитата(jcxz @ Jun 19 2018, 10:36) В смысл... Jun 19 2018, 07:40 jcxz Цитата(ViKo @ Jun 19 2018, 09:17) Да, я г... Jun 19 2018, 07:48 ViKo Замените в моих
#define SFM_SET1 (SFM_SYSTE... Jun 19 2018, 08:03 jcxz Цитата(ViKo @ Jun 19 2018, 11:03) Заменит... Jun 19 2018, 08:37 ViKo В кусты, так в кусты. Собственно, всё уже выяснили... Jun 19 2018, 08:39
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|