-
- Ни хрена не понял, зачем хэш, если он не информативен. Почему не использовать индекс строки? - VL(02.10.2015 16:19, )
- Планируется сохранять в встроенный flash настроечные параметры. Параметров несколько десятков, могут корректироваться независимо друг от друга. Поэтому хочется организовать параметры в виде <ключ:значение>, сохраненные в произвольном порядке. LightElf(356 знак., 02.10.2015 17:40)
- Первый пункт понимаю, второй - частично, почему идентификатором не может быть последовательный номер(индекс строки), который можно легко получить X-макросами? Кто во флэш пишет? - VL(02.10.2015 18:27, )
- Из одних исходников собирается несколько проектов, надо чтобы одинаковые параметры в разных проектах (и разных билдах проектов) идентифицировались одинаково (чтобы при обновлении прошивки в работающем устройстве не слетали настройки). Можно LightElf(137 знак., 02.10.2015 18:41)
- Не, автоматизация - понятно, буду знать, тоже есть разные проекты в одном железе. Неужели так длина критична, что нельзя оригинальный текст оставить? - VL(02.10.2015 18:50, )
- Проекты разные, железо тоже разное. В некотором старом железе критична и длина и время на сравнение строк. Но самое критичное - возможность в одном проекте ввести новый параметр без оглядки на новые параметры в другом проекте, собираемом из тех же LightElf(140 знак., 02.10.2015 18:59)
- Аминь :) - VL(02.10.2015 19:09, )
- Проекты разные, железо тоже разное. В некотором старом железе критична и длина и время на сравнение строк. Но самое критичное - возможность в одном проекте ввести новый параметр без оглядки на новые параметры в другом проекте, собираемом из тех же LightElf(140 знак., 02.10.2015 18:59)
- Пробелы, большие/маленькие символы, опечатки в именах параметров поддерживаются? :) - Скрипач(02.10.2015 18:47)
- При копипасте будут скопированы вместе с опечатками :) - LightElf(02.10.2015 18:54)
- Не, автоматизация - понятно, буду знать, тоже есть разные проекты в одном железе. Неужели так длина критична, что нельзя оригинальный текст оставить? - VL(02.10.2015 18:50, )
- Из одних исходников собирается несколько проектов, надо чтобы одинаковые параметры в разных проектах (и разных билдах проектов) идентифицировались одинаково (чтобы при обновлении прошивки в работающем устройстве не слетали настройки). Можно LightElf(137 знак., 02.10.2015 18:41)
- длина записи фиксированная? А во флэш то кто параметр запишет? Или компилятор положит в константную секцию по фиксированному адресу?. А искать нужную строку как(как выбрать нужный параметр)? - abivan(02.10.2015 18:04)
- Кажись по второму кругу пошли... Ниже в топике уже вроде все обсудили. Во флеш параметр запишет сама программа, длину записи можно указать внутри самой записи. LightElf(605 знак., 02.10.2015 18:33)
- Да пофиг нам решение, разбираемся, зачем оно! ;) Если хочется строки, то понятно, есть открытые исходники для обработки init-файлов. Хочется енумы, еще более понятнее, сам так делаю. Промежуточное - не понимаю. Но ладно, проехали. - VL(02.10.2015 18:45, )
- Если совсем коротко - заколебало вести глобальный хидер с енумом. - LightElf(02.10.2015 18:49)
Утки!Х-макросы - VL(02.10.2015 18:54, )- Ну вот собственно и нашел в конце-концов решение в виде: LightElf(571 знак., 02.10.2015 19:01 - 19:06)
- Вам виднее, но по моему, с точки зрения документирования проекта, это тихий ужас. Тем более что Хэш не гарантирует уникальности. - Скрипач(02.10.2015 20:29)
- С точки зрения документирования, да и вообще сопровождения, проекты в одном workspace (термины IAR) - вообще ( . ). Не далее, как вчера, сам огрёб. - VL(03.10.2015 06:32, )
- А зачем их делать в одном workspace? А че делать, если используются разные компиляторы под разные процессоры? - LightElf(05.10.2015 08:37)
- Потому что код совпадает на 2/3. А если разные компиляторы под разные процессоры, тоже есть варианты, но это уже притянуто за уши. А workspace - не притянут. - VL(05.10.2015 16:50, )
- Ничего не притянуто. Из одних сорцов компилится тремя компиляторами: под HCS12, Coldfire и Cortex M. Есть шансы, что еще RX будет. Какой уж тут workspace. - LightElf(06.10.2015 08:22)
- А как это все организовано с учетом контроля версий? - VL(06.10.2015 21:45, )
- Да особо никак. Общие сорцы лежат в отдельном каталоге, откуда подтягиваются в проекты. Таким образом всегда компилится самая свежая версия общей части (HAL, протоколы, стек). В каждом конкретном проекте есть заголовочный файл, в котором дефайнами LightElf(148 знак., 07.10.2015 11:22)
- Вот и у меня практически так же, кстати есть аналогичный опыт MSP430 + Cortex, но "всегда компилится самая свежая версия" - это засада. Месяц назад заказчик захотел в одном проекте рюшечки одной версии, а в другом - рюшечки другой версии, тут я и VL(244 знак., 07.10.2015 13:17, )
- Третий месяц пытаюсь свести в один проект программные модули которые когда-то росли из одного места, но затем много лет развивались в разных проектах. Это оказалось неожиданно большой проблемой - вроде бы вот оно, все что нужно, но оно упорно не AlexG(23 знак., 07.10.2015 18:15)
- У меня задачи достаточно узкие. Все рюшечки общего кода старых версий доступны для новых версий. Старый функционал полностью сохраняется. Это временами огорчает (приходится поддерживать некоторые старые косячные опции параллельно новым прямым), но LightElf(293 знак., 07.10.2015 13:57)
- "Свежая версия общей части" - это мощно. Скажем, подпилили сорцы на Cortex, добавили баг, который проявляется только на Coldfire, и спокойно пошли пить чай. Красота! - SciFi(07.10.2015 11:28)
- Дык не надо общие сорцы "подпиливать на Cortex". На Cortex надо подпиливать только архитектурно-специфичные части, которые живут в своем собственном подкаталоге. Если возникла необходимость изменить общие сорцы в связи с новой архитектурой - это LightElf(38 знак., 07.10.2015 11:47)
- Можно, конечно, сделать вид, что существуют "архитектурно независимые" части, но это, скорее, иллюзия. Простейший пример - размеры целых типов. SciFi(36 знак., 07.10.2015 11:49 - 11:51)
- Размер целых типов прекрасно описывается в stdint.h Индейцы тоже легко обходятся макросами вида U32_TO_LE(), U16_FROM_BE() и т.д. - LightElf(07.10.2015 11:59)
- Можно, конечно, сделать вид, что существуют "архитектурно независимые" части, но это, скорее, иллюзия. Простейший пример - размеры целых типов. SciFi(36 знак., 07.10.2015 11:49 - 11:51)
- Дык не надо общие сорцы "подпиливать на Cortex". На Cortex надо подпиливать только архитектурно-специфичные части, которые живут в своем собственном подкаталоге. Если возникла необходимость изменить общие сорцы в связи с новой архитектурой - это LightElf(38 знак., 07.10.2015 11:47)
- Вот и у меня практически так же, кстати есть аналогичный опыт MSP430 + Cortex, но "всегда компилится самая свежая версия" - это засада. Месяц назад заказчик захотел в одном проекте рюшечки одной версии, а в другом - рюшечки другой версии, тут я и VL(244 знак., 07.10.2015 13:17, )
- Да особо никак. Общие сорцы лежат в отдельном каталоге, откуда подтягиваются в проекты. Таким образом всегда компилится самая свежая версия общей части (HAL, протоколы, стек). В каждом конкретном проекте есть заголовочный файл, в котором дефайнами LightElf(148 знак., 07.10.2015 11:22)
- А как это все организовано с учетом контроля версий? - VL(06.10.2015 21:45, )
- Ничего не притянуто. Из одних сорцов компилится тремя компиляторами: под HCS12, Coldfire и Cortex M. Есть шансы, что еще RX будет. Какой уж тут workspace. - LightElf(06.10.2015 08:22)
- Потому что код совпадает на 2/3. А если разные компиляторы под разные процессоры, тоже есть варианты, но это уже притянуто за уши. А workspace - не притянут. - VL(05.10.2015 16:50, )
- А зачем их делать в одном workspace? А че делать, если используются разные компиляторы под разные процессоры? - LightElf(05.10.2015 08:37)
- С точки зрения документирования, да и вообще сопровождения, проекты в одном workspace (термины IAR) - вообще ( . ). Не далее, как вчера, сам огрёб. - VL(03.10.2015 06:32, )
- Вам виднее, но по моему, с точки зрения документирования проекта, это тихий ужас. Тем более что Хэш не гарантирует уникальности. - Скрипач(02.10.2015 20:29)
- Ну вот собственно и нашел в конце-концов решение в виде: LightElf(571 знак., 02.10.2015 19:01 - 19:06)
- Если совсем коротко - заколебало вести глобальный хидер с енумом. - LightElf(02.10.2015 18:49)
- Да пофиг нам решение, разбираемся, зачем оно! ;) Если хочется строки, то понятно, есть открытые исходники для обработки init-файлов. Хочется енумы, еще более понятнее, сам так делаю. Промежуточное - не понимаю. Но ладно, проехали. - VL(02.10.2015 18:45, )
- Кажись по второму кругу пошли... Ниже в топике уже вроде все обсудили. Во флеш параметр запишет сама программа, длину записи можно указать внутри самой записи. LightElf(605 знак., 02.10.2015 18:33)
- Первый пункт понимаю, второй - частично, почему идентификатором не может быть последовательный номер(индекс строки), который можно легко получить X-макросами? Кто во флэш пишет? - VL(02.10.2015 18:27, )
- Планируется сохранять в встроенный flash настроечные параметры. Параметров несколько десятков, могут корректироваться независимо друг от друга. Поэтому хочется организовать параметры в виде <ключ:значение>, сохраненные в произвольном порядке. LightElf(356 знак., 02.10.2015 17:40)
- Что-то типа атомов в ресурсах виндовс-программ? Скрипач(765 знак., 29.09.2015 15:01 - 17:10)
- Можно налабать prebuid фиговину на питоне, но смысл? У Вас время доступа сравнимо с временем передачи по каналу связи и реакцией оператора? - Хитрый Китаец(29.09.2015 14:13)
- Смысл в том, чтобы: LightElf(177 знак., 29.09.2015 14:29)
- 4 буквы в одном uint32_t часто достаточно для построения иерархического дерева (и, например, для кодирования хэндла прямо в имени). Причем один байт можно зарезервировать для хэша Пирсона - Vit(29.09.2015 17:03 - 17:09, ссылка)
- Понятно, основное второе. Вот ссылка на дискуссию, может поможет. - Хитрый Китаец(29.09.2015 15:01, ссылка)
- Во че нашел! - LightElf(29.09.2015 17:16, ссылка)
- Фигасе! Заменить strlen("abc") на (sizeof "abc" - 1), и будет совсем православно. - SciFi(29.09.2015 17:28)
- Ура! Потестил в IAR ARM. Вот такой сорец: LightElf(925 знак., 30.09.2015 18:08, ссылка)
- Блин, ну вот от чего бы бустовцам не взять и не родить специальный язык метапрограммирования, который трансформирует С|С++ код. Сделать препроцессор этого языка на Tcl|Python|Perl, которые есть везде, и получить куда менее brain fuck'овый вариант. - Evgeny_CD(30.09.2015 18:20)
- Да нафиг не нужно никаких дополнительных языков, вполне было бы достаточно, если бы часть кода исполнялась в режиме интерпретатора до компиляции, как например в интерактивных компонентах делфи, и ВСЁ. Больше ничего не нужно. - =AlexD=(02.10.2015 14:52)
- ИМХуется мне, что таких мета-языков изобретено уже 100500, но не взлетело. Boost.PP принципиально юзает тока то, что есть искаропки. - LightElf(30.09.2015 18:40)
- Блин, ну вот от чего бы бустовцам не взять и не родить специальный язык метапрограммирования, который трансформирует С|С++ код. Сделать препроцессор этого языка на Tcl|Python|Perl, которые есть везде, и получить куда менее brain fuck'овый вариант. - Evgeny_CD(30.09.2015 18:20)
- OpenWatcom 1.9 не сворачивает :( - LightElf(29.09.2015 17:32)
- А если ключики у него покрутить? Например, "oh". - SciFi(29.09.2015 17:40)
- Дошло, оптимизатор васькома тупит. Constant folding обламывается на строках, считает что элемент строки не является константой даже если строкой является литерал. Кстати, открыл для себя прелестную конструкцию "abcdef"[2]. - LightElf(02.10.2015 14:44)
- Сейчас смотрю что он нагенерил - чет вообще фигня какая-то. - LightElf(29.09.2015 17:46)
- А если ключики у него покрутить? Например, "oh". - SciFi(29.09.2015 17:40)
- Ура! Потестил в IAR ARM. Вот такой сорец: LightElf(925 знак., 30.09.2015 18:08, ссылка)
- Фигасе! Заменить strlen("abc") на (sizeof "abc" - 1), и будет совсем православно. - SciFi(29.09.2015 17:28)
- Да, это практически то что надо. Осталось переползти в плюсы и убедиться, что данная фишка поддерживается в iar, к примеру. - LightElf(29.09.2015 17:02)
- Во че нашел! - LightElf(29.09.2015 17:16, ссылка)
- Ну так пребилд-фиговина всё это сможет. И даже может ругаться, если будет обнаружена коллизия. - SciFi(29.09.2015 14:33)
- Если только коллизия в пределах одного билда, а это вряд ли. - LightElf(29.09.2015 14:44)
- Смысл в том, чтобы: LightElf(177 знак., 29.09.2015 14:29)
- Если указатель на каждую строку уникален, то может, его приспособить. - Petrovich(29.09.2015 13:58, )
- Прошивка может обновляться (указатели съедут), при этом настройки желательно не трогать. - LightElf(29.09.2015 14:10)
- Енум не спасет? - ASDFS(29.09.2015 13:56)
- примерно так ? Nikolay801_(626 знак., 29.09.2015 14:25)
- Смысл такой, но дюже напрягает: LightElf(56 знак., 29.09.2015 14:37)
- я бы не стал паритья по всем пунктам, но дело Ваше. - Nikolay801_(29.09.2015 14:41)
- Я не парюсь, а советуюсь с общественностью. Может все давно придумано, а я тут моск морщу - LightElf(29.09.2015 14:45)
- На стадии компиляции возможности весьма ограничены. - SciFi(29.09.2015 14:48)
- Эта да, но иначе я бы и не спрашивал :) - LightElf(29.09.2015 17:01)
- На стадии компиляции возможности весьма ограничены. - SciFi(29.09.2015 14:48)
- Я не парюсь, а советуюсь с общественностью. Может все давно придумано, а я тут моск морщу - LightElf(29.09.2015 14:45)
- я бы не стал паритья по всем пунктам, но дело Ваше. - Nikolay801_(29.09.2015 14:41)
- Смысл такой, но дюже напрягает: LightElf(56 знак., 29.09.2015 14:37)
- Сейчас просто использую задефайненные значения, типа LightElf(300 знак., 29.09.2015 14:18)
- Дык табличка с индексами из енума. Не? ASDFS(139 знак., 29.09.2015 14:27)
- А не страшно, что будут опечатки в названии параметра? Имя макроса хотя бы проверяется компилятором. - SciFi(29.09.2015 14:22)
- Есть такая проблема, но я не думаю что это будет очень страшно. Если строку в юникоде, да еще апперкейснуть... - LightElf(29.09.2015 14:43)
- примерно так ? Nikolay801_(626 знак., 29.09.2015 14:25)
- Хеш нельзя, ибо возможны коллизии. - SciFi(29.09.2015 13:50)
- а в отладочной версии, или в мелкой вспомогательной программке на ПЦ (если есть вообще таковая) нельзя ли сделать предупреждалку, что господа - у вас
волчанкаколлизии ? - Mahagam(29.09.2015 16:17) - В данном случае это не проблема - параметров немного. - LightElf(29.09.2015 14:11)
- Щас придёт fk0 и сожгёт всё напалмом. SciFi(63 знак., 29.09.2015 14:23)
- CRC32 дает 4 млрд комбинаций. Я как-то не верю что пара сотен строк (с очень большим запасом) даст коллизию. - LightElf(29.09.2015 14:40)
- Дело не в том, сколько даёт, а в том, что он обладает вполне определенными свойствами. При использовании хэш-функций механизм разрешения коллизий нужно иметь принципиально. Представьте, Вы говорите юзеру: Тебя шарахнет, но не сейчас, а потом, Хитрый Китаец(18 знак., 29.09.2015 15:09)
- Мне кажется опасение несколько надуманное. Плавающий бит во флеше гораздо вероятнее, чем такое совпадение. - LightElf(29.09.2015 16:59)
- Ну, юзверя можно успокоить. Дескать, не волнуйся, гораздо вероятнее, что тебя собьёт машина :-) - SciFi(29.09.2015 15:59)
- Дело не в том, сколько даёт, а в том, что он обладает вполне определенными свойствами. При использовании хэш-функций механизм разрешения коллизий нужно иметь принципиально. Представьте, Вы говорите юзеру: Тебя шарахнет, но не сейчас, а потом, Хитрый Китаец(18 знак., 29.09.2015 15:09)
- CRC32 дает 4 млрд комбинаций. Я как-то не верю что пара сотен строк (с очень большим запасом) даст коллизию. - LightElf(29.09.2015 14:40)
- Щас придёт fk0 и сожгёт всё напалмом. SciFi(63 знак., 29.09.2015 14:23)
- а в отладочной версии, или в мелкой вспомогательной программке на ПЦ (если есть вообще таковая) нельзя ли сделать предупреждалку, что господа - у вас
- Ни хрена не понял, зачем хэш, если он не информативен. Почему не использовать индекс строки? - VL(02.10.2015 16:19, )