реклама на сайте
подробности

 
 
> Представление адреса. Как лучше.
Jenya7
сообщение Jun 18 2018, 10:04
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 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
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ViKo
сообщение Jun 19 2018, 06:17
Сообщение #2


Универсальный солдатик
******

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



Да, я гений. Я умею задать дефайнами размеры, варианты. Слышали такое: #ifdef, #else, #endif?
Я сам себе заказчик, творю, что хочу. А если что-то предлагают, тоже делаю, если идет на пользу прибору.
А что было вам не описать структуру с нормальными размерами?
Повторю вопрос, как вы контролируете, что структура не вылезла за размеры памяти? Вот я знаю, сколько страниц в памяти, на столько и умножаю размер, не более.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 19 2018, 07:48
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(ViKo @ Jun 19 2018, 09:17) *
Да, я гений. Я умею задать дефайнами размеры, варианты. Слышали такое: #ifdef, #else, #endif?

Гений, знающий про ifdef, вот Вам пример из конкретного коммерческого проекта (ПО для линейки устройств). Покажите пожалуйста как вы сделаете распределение страниц FLASH в Вашем стиле?
А мы посмотрим - чей вариант нагляднее и читаемее.
Код
//каждый байт структуры соответствует странице DFLASH
union DFLASH {
  struct {
    u8 nastr[8];
    u8 jrnDayEnergy[10];
    u8 jrnMonthEnergy[5];
    u8 jrnEventFwUpdate[2];
    u8 jrnEventSetPwd[2];
    u8 jrnEventAccessDeny[2];
    u8 jrnEventTamper[2];
    u8 jrnEventClearEnergy[2];
    u8 jrnProfilePower[700];
    u8 jrnProfileBillingData1[39];
    u8 jrnProfileBillingData2[73];
    #if FIRMWARE_TARGET == FIRMWARE_TARGET_S04 || FIRMWARE_TARGET == FIRMWARE_TARGET_S07
    u8 jrnProfile_phase_A[510];
    u8 jrnProfile_phase_B[510];
    u8 jrnProfile_phase_C[510];
    u8 jrnProfileBillingData1_A[36];
    u8 jrnProfileBillingData2_A[64];
    u8 jrnProfileBillingData1_B[36];
    u8 jrnProfileBillingData2_B[64];
    u8 jrnProfileBillingData1_C[36];
    u8 jrnProfileBillingData2_C[64];
    #ifdef PKE
    u8 jrnEvent_PKE[2002];                 //Журнал текущих данных ПКЭ
    u8 jrnEvent_PKE_PandP[34];             //Журнал провалов,прерываний напряжения и перенапряжений
    u8 jrnEvent_PKEStatistic[368];         //Общий статистический журнал событий ПКЭ
    u8 jrnEvent_PKE_PandP_statistic[124];  //Журнал статистики по провалам, прерываниям, перенапряжениям
    #endif  //PKE
    #endif
    u8 jrnEventCosem[45];
    u8 jrnEventMonitorRegister[45];
    u8 jrnEventMeterConfiguration[45];
    #if FIRMWARE_TARGET == FIRMWARE_TARGET_S07
    u8 jrn_change_transformation_coefficient[10];
    #endif
    u8 jrn_Events_not_erase[10];
    u8 unuse0[FIRM_BUF_SIZE];  //резерв для DFLASH::firmware
  };
  struct {
    u8 unuse1[DF_N_PAGES - FIRM_BUF_SIZE];
    u8 firmware[FIRM_BUF_SIZE];
  };
};

Раз уж в теории никак не доходит, то может хоть на реальном примере дойдёт rolleyes.gif

Цитата(ViKo @ Jun 19 2018, 10:40) *
Где и когда вы сравниваете размер вашей структуры (в байтах, умноженных на размер страницы) и размер памяти? Кому вы доверяете эту процедуру, или просто забили, на авось?

Я эту "процедуру" доверяю стандартному инструменту, называемому assert_static.
А Вы какому авосю доверяете? wink.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jenya7   Представление адреса. Как лучше.   Jun 18 2018, 10:04
- - ViKo   Задаю дефайнами нужные мне адреса в SPI flash, выр...   Jun 18 2018, 11:03
|- - jcxz   Цитата(ViKo @ Jun 18 2018, 14:03) Задаю д...   Jun 18 2018, 11:10
|- - ViKo   Цитата(jcxz @ Jun 18 2018, 14:10) А когда...   Jun 18 2018, 11:18
|- - jcxz   Цитата(ViKo @ Jun 18 2018, 14:18) Зачем в...   Jun 18 2018, 11:30
|- - 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
|- - jcxz   Цитата(ViKo @ Jun 19 2018, 09:17) Повторю...   Jun 19 2018, 07:36
||- - ViKo   Цитата(jcxz @ Jun 19 2018, 10:36) В смысл...   Jun 19 2018, 07:40
- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 7th August 2025 - 17:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.01408 секунд с 7
ELECTRONIX ©2004-2016