-
- Я бы сделал так (это идея, пишу набело, поэтому могут быть ошибки): il-2(420 знак., 07.10.2020 09:02)
- вот так abivan(473 знак., 06.10.2020 17:10)
- Докладываюсь! Сделал так Aleksey_75(492 знак., 06.10.2020 15:18, картинка)
- Только вместо #pragma я бы указал структуре атрибут __attribute__((packed)), результат тот же, строчек меньше. Да и привычнее как-то. - arhiv6(07.10.2020 08:51)
- Можно и массивом 3 байтовых переменных, вот Aleksey_75(329 знак., 06.10.2020 15:52, картинка)
- а кусок кода который выковыривает из такой структуры данные можно? - Mahagam(06.10.2020 15:22)
- ну как-то так Aleksey_75(336 знак., 06.10.2020 15:30)
- не, меня интересует что в ассемблере будет - Mahagam(06.10.2020 15:37)
- вот Aleksey_75(1745 знак., 06.10.2020 15:46)
- судя по всему, невыровненный доступ работает аппаратно. Mahagam(139 знак., 06.10.2020 16:02)
- а вот cvi так не умеет и вся идея летит в помойку ибо он как раз и формирует таблицу индексов (( печаль. Хотя Aleksey_75(29 знак., 06.10.2020 16:22)
- судя по всему, невыровненный доступ работает аппаратно. Mahagam(139 знак., 06.10.2020 16:02)
- вот Aleksey_75(1745 знак., 06.10.2020 15:46)
- не, меня интересует что в ассемблере будет - Mahagam(06.10.2020 15:37)
- ну как-то так Aleksey_75(336 знак., 06.10.2020 15:30)
- На 8-битниках работает нормально, на Cortex не проверялось, но
из-за невыровненного доступа возможны нюансы. Chip_n_Go(2342 знак., 06.10.2020 14:12)
- прикольно - Nikolay801_(06.10.2020 16:24)
- Интересно если внутри структуры сделать три переменные по байту, не проще ли будет компилятору оптимизировать... - Ralex(06.10.2020 12:43)
- Не проще ли будет сделать нормальную сериализацию и отделть форму хранения от формы использования? Тут конечно без уверенности т.к. непонятна реально поставленная задача и все условия. - Kabdim(06.10.2020 12:41)
- Организуешь доступ через функции set/get и хоть LZМ сжимай :) - Cкpипaч(06.10.2020 12:32)
- Мне не видно простых способов сделать через битовы поля. Nikolay801_(791 знак., 06.10.2020 11:01)
- Время тебе не критично. Сколько всего структур? Изобрази связанный
список (в начале каждой структуры во флеш указатель на следующую) и
ни в чем себе не отказывай без таблицы индексов ;) - Гyдвин(06.10.2020 09:11 - 09:36)
- Связанный список == дополнительный указатель == вся экономия байтов
теряется - AlexBi(06.10.2020 10:16)
- Предполагаю, что Алексею не требуется экономить внешнюю флеш, а
пытается он ужать размер индексной таблицы, которую грузит в RAM... - Гyдвин(06.10.2020 10:27)
- в раму полностью не влезает, приходится грузить кусочками + накладные расходы чтения и расшифровка, поэтому хочу свести до минимума. Связанный список не очень годится из за большого кол-ва разношерстных элементов (надо добавлять размер), в этоге чтоб получить доступ к последнего элементу надо прошерстить все и на это уходит до нескольких минут ((( - Aleksey_75(06.10.2020 15:12)
- Я тоже что-то предполагаю, но он молчит как рыба об лёд. Должно
быть, военная тайна, как обычно... - SciFi(06.10.2020 10:32)
- Судя по предыдущим постам, повангую :) Алексей за годы возни с различными авто собрал большую и ценную базу "CAN фишек". И творит он какой-нить иммо или ключ доступа "для всего". Эту базу (структуры, алгоритмы) он намеревается хранить во внешней флеш в зашифрованном виде. В зависимости от цели подгружает нужное из базы в набортную флеш. - Гyдвин(06.10.2020 10:46)
- Предполагаю, что Алексею не требуется экономить внешнюю флеш, а
пытается он ужать размер индексной таблицы, которую грузит в RAM... - Гyдвин(06.10.2020 10:27)
- И не забывай про постулаты: "нельзя объять необъятное"(с), монструозное может оказаться излишним, на обслуживании можно поиметь кусок хлеба ;)))) - Гyдвин(06.10.2020 09:23)
- Связанный список == дополнительный указатель == вся экономия байтов
теряется - AlexBi(06.10.2020 10:16)
- Я писал: нужно делать не массив структур, а структуру массивов.
Тогда в одной структуре сколько угодно байт может быть и доступ
всегда выравненный. fk0(237 знак., 06.10.2020 02:10)
- Структура массивов всегда не удобна с точки зрения понимания работы с ней человеком, и не всегда дает выигрыш. AlexBi(346 знак., 06.10.2020 08:32)
- "помедленнее пжалуйста я зыписываю" (с) и где здесь переменная в 3
байта ?? а уж как работать с такими криптоваными данными вообще
ужас.. чтоб получить один индекс расшифруй 100500 байт - Aleksey_75(06.10.2020 02:20)
- Если доступ изначально по случайному индексу -- уже без разницы, одно значение или три раза по байту читать. Если доступ последовательный то тогда остаётся сериализовать не в три массива байтов, а в три последовательно расположенных байта. А от структур в любом случае отказаться. - fk0(06.10.2020 02:37)
- В первом варианте между b и c была дырка в три байта (на арме). Во
втором никаких дыр нет. Конечно 3-байтную переменную в C не
сделать, но можно эмулировать: fk0(368 знак., 06.10.2020 02:34)
- ... и потом это будет читаться из последовательной флеши или
кэшироваться три раза вместо одного. Я бы последовательно 3 байта
положил, и не парился. - s_h_e(06.10.2020 10:32)
- Бочку говна. часто, ложкой дёгтя уже не сильно испортишь. - fk0(06.10.2020 19:37)
- понял! видимо битовые поля в данном варианте самый лучший варик! - Aleksey_75(06.10.2020 02:38)
- Не знаю как в твоём компиляторе, а в WinAVR и ICC для 51-го битовое поле имеет фиксированый размер в 16 бит, даже если используешь один бит. - symbions(06.10.2020 10:19)
- Геморрой, это же нужно минимум две битовых структуры сделать 16+8,
или три 8+8+8. Прозрачнее работать с одним байтовым массивом,
эмулируя индексирование. - VLLV(06.10.2020 09:36)
- Можно сделать uint32_t fld24:24; uint32_t fld8:8; - AlexBi(06.10.2020 10:17)
- ... и потом это будет читаться из последовательной флеши или
кэшироваться три раза вместо одного. Я бы последовательно 3 байта
положил, и не парился. - s_h_e(06.10.2020 10:32)
- А какова цель действа? Съэкономить меморей? - mse homjak(05.10.2020 23:52)
- да , перед гигантским шифрованным массивом структур (~6mb), есть
таблица индексов, вот её хочется хоть как-то уменьшить ) - Aleksey_75(05.10.2020 23:56)
- Проц 32р, значит, полюбому, будет побайтный доступ. Мобуть юнион? - mse homjak(06.10.2020 00:01)
- а как юнион здесь поможет ? кратность то в любом случае 1, 2,4
байта или не ? - Aleksey_75(06.10.2020 00:04)
- Да никак специально не поможет. Упорядочит. Массив индексов в
памяти будет невыровненным, потому, тока байтовый доступ как к
трёхбайтному юниону. А там уже тип преобразовывать во что-то
удобоваримое. - mse homjak(06.10.2020 00:32)
- и массив и таблица индексов все #pragma pack (1) - Aleksey_75(06.10.2020 00:34)
- Ну прально, вы выровняли побайтно, но доступ вам нужно получить
имана к трёхбайтной структуре. Я не ф курсе, как кортекс относится
к таким вещам, тупо делает два чтения или вываливается в какой
эксепшын? - mse homjak(06.10.2020 00:44)
- пока у меня все кратно! но 4 байта для адресации многовато, вот и
хотел высвободить по байту с каждой записи, а там не кисло набегает
) завтра , переведу на битовые поля .. касаемо одно или два чтения
эт фиолетово, дольше считать с внешней флеши и развернуть - Aleksey_75(06.10.2020 01:01)
- Ох с битовыми полями аккуратнее :-)) грабли с нумерацией бит
периодически всплывают... особенно классно было при переходе с
более старого на более новый процессор, там для совместимости с арм
их переставили :-))) и рабрчий код стал нерабочим - sav6622(06.10.2020 10:54)
- Я вот другого не пойму - а с чего есть мнение, что битовые поля
дадут экономию. Они же всё равно занимют место кратно int, даже
если один бит используешь? Или в новых редакциях С это убрали? - symbions(06.10.2020 14:59)
- Нет, может быть разный размер, если уточнять unsigned, например
unsigned short, или в терминах student.h - VLLV(06.10.2020 15:22)
- Ясно. У меня в винавр что инт, что шорт - поэтому разницу и не увидел - symbions(07.10.2020 08:29)
- Нет, может быть разный размер, если уточнять unsigned, например
unsigned short, или в терминах student.h - VLLV(06.10.2020 15:22)
- Я вот другого не пойму - а с чего есть мнение, что битовые поля
дадут экономию. Они же всё равно занимют место кратно int, даже
если один бит используешь? Или в новых редакциях С это убрали? - symbions(06.10.2020 14:59)
- Можно придумать более хитрые схемы упаковки. Ещё один байт сэкономить. Гулять так гулять. - SciFi(06.10.2020 08:54)
- наверное, будет быстрее работать, если хранить 24 бита в виде двух
массивов, по байту, и по два. надо смотреть, что там генерится на
битовых полях. оно вообще их тупо интами не сделает? - Mahagam(06.10.2020 01:34)
- не был в этом замечен! битовое как определено так в памяти и лежит! хоть с stm хоть cvi - Aleksey_75(06.10.2020 01:45)
- Ох с битовыми полями аккуратнее :-)) грабли с нумерацией бит
периодически всплывают... особенно классно было при переходе с
более старого на более новый процессор, там для совместимости с арм
их переставили :-))) и рабрчий код стал нерабочим - sav6622(06.10.2020 10:54)
- пока у меня все кратно! но 4 байта для адресации многовато, вот и
хотел высвободить по байту с каждой записи, а там не кисло набегает
) завтра , переведу на битовые поля .. касаемо одно или два чтения
эт фиолетово, дольше считать с внешней флеши и развернуть - Aleksey_75(06.10.2020 01:01)
- Ну прально, вы выровняли побайтно, но доступ вам нужно получить
имана к трёхбайтной структуре. Я не ф курсе, как кортекс относится
к таким вещам, тупо делает два чтения или вываливается в какой
эксепшын? - mse homjak(06.10.2020 00:44)
- и массив и таблица индексов все #pragma pack (1) - Aleksey_75(06.10.2020 00:34)
- Да никак специально не поможет. Упорядочит. Массив индексов в
памяти будет невыровненным, потому, тока байтовый доступ как к
трёхбайтному юниону. А там уже тип преобразовывать во что-то
удобоваримое. - mse homjak(06.10.2020 00:32)
- а как юнион здесь поможет ? кратность то в любом случае 1, 2,4
байта или не ? - Aleksey_75(06.10.2020 00:04)
- Проц 32р, значит, полюбому, будет побайтный доступ. Мобуть юнион? - mse homjak(06.10.2020 00:01)
- да , перед гигантским шифрованным массивом структур (~6mb), есть
таблица индексов, вот её хочется хоть как-то уменьшить ) - Aleksey_75(05.10.2020 23:56)
- Длинные уши ПИК33 вижу я здесь :-) - Kpoк(05.10.2020 23:34)
- не , кортекс!))) - Aleksey_75(05.10.2020 23:54)