Navigation software framework/core application structure in ANSI C
p-o-n-y / pony Goto Github PK
View Code? Open in Web Editor NEWNavigation software framework/core application structure in ANSI C
License: MIT License
Navigation software framework/core application structure in ANSI C
License: MIT License
Поскольку количество эфемерид не хардкодится, между структурами pony_gnss_gps_sat и pony_gnss_glo_sat нет разницы.
Всё равно делаем одинаковые структуры, или переименовываем pony_gnss_gps_sat в pony_gnss_sat и используем для всех?
Line 7 in 1d0f768
pony.h line 205 is not needed as separators have already been skipped, instead of them the first relevant symbol of comfiguration is skipped.
for (i = 0; confstr[i] && i < conflen; i++) {
// skip all non-printable characters, blank spaces and commas between groups
for (; confstr[i] && (confstr[i] <= ' ' || confstr[i] == ',') && i < conflen; i++); // already skipped here
// if no group started at this point
if (confstr[i] != '{')
break;
// if a group started
else {
group_layer = 1;
while (group_layer > 0 && confstr[i] && i < conflen) {
i++;
if (confstr[i] == '{')
group_layer++;
if (confstr[i] == '}')
group_layer--;
}
}
}
// skip all non-printable characters, blank spaces and commas between groups
for (i++; confstr[i] && (confstr[i] <= ' ' || confstr[i] == ',') && i < conflen; i++); // line 205
// start from this point
*groupptr = confstr + i;
pony_strncmpeff, pony_locatesubstrn и pony_locatesubstreff сейчас никак не используются. Всё равно пока оставляем их?
В строке
Line 613 in 733724f
и ей подобных символ '+' должен быть допустимым наравне с '-' и другими
github.com/p-o-n-y/pony/wiki/main
if (pony_init( "строка конфигурации" ));
На сейчас в функциях освобождения частей pony есть 3 варианта освобождения самих частей:
.
1
Lines 274 to 275 in 1d0f768
.
2
Line 506 in 1d0f768
.
3
Line 378 in 1d0f768
.
Итак,
во-первых, третий вариант лучше убрать (привести к первому или второму), так как он неоправданно множит стандарты, что не очень
во-вторых, возможно первый вариант лучше привести ко второму, на случай, если внезапно нужно будет делать несколько imu (ну мало ли)
@a-kozlov-msu
Комментарии на уже не русском языке
Line 21 in 44b89b3
Line 260 in 44b89b3
Константы для gps одинаковые, но у каждого gnss свои, то есть под одно и то же при нескольких gnss'ах память на одинаковые вещи выделяться несколько раз. Можно решить, скажем, переносом структуры из gnss'а в pony_bus.
Присваивание значений происходит даже при отсутствии gps. Возможно тогда стоит перенести структуру с константами в gps? Или наоборот, сделать её общей (переназвать в gnss_const)?
При n gnss'ов значения констант присваиваютя n*(n+1)/2 раз. Это можно решить переносом строки из pony_init_gnss
Line 465 in 1d0f768
Right now pony_terminate makes plugins run in finish mode twice
in pony.c line 254
return (*grouplen)>0 ? 1 : 0;
treats empty but labeled groups in configuration as being not found
После каждого динамического выделения памяти должна быть проверка на нулевой указатель (NULL).
Функции ядра pony, в которых происходит выделение памяти, должны возвращать значение char 0 или 1, которое должно проверяться вызывающей функцией.
Это касается pony_init, pony_setDASize и возможно других.
Lines 148 to 152 in 1d0f768
Наверное описания длин стоит поменять местами, иначе непонятно.
Кстати, общие подчасти строк конфигурации мы теперь называем settings, или это только в этом случае?
На сейчас переименовано только в частях шины, нужно ли переименовывать в методах тоже, для большей читаемости?
github.com/p-o-n-y/pony/wiki/plugins
plugin заменить на plugin_name
Инициализацию логично делать в начале функции, это соответствует "обычному" программированию, удобнее переделывать существующие функции в плагин.
// список используемых переменных
я бы вообще убрал, это очевидно, тем более это не просто список, а декларация
Раз уж после освобождения ссылок на части пони (imu и т.д.) им присваивается NULL, стоит ли так же обнулять ссылки на подстроки конфигурации и их длины в функциях free?
Все определения функций pony, за исключением тспользуемых хостом add_plugin, init, step и terminate нужно перенести в pony.c, так как использовать их предполагается только там.
Возможно, что какие-то мы перенесём обратно для использования юзером или добавим в будущем (например предполагается библиотека функций для работы с матрицами), но сейчас это внутренние функции pony, которые не должны появляться в коде хоста при включении pony.h.
Это был не 1b328c8? Или позже?
В данный момент в вики пишу историю изменений, в основном направленную на разработчиков плагинов, поэтому стараюсь в ней описывать новые возможности для них без того, чтобы им пришлось самим разбираться в коммитах. Так что эти вопросы будут поступать ещё некоторое время. Когда история изменений будет в приличном состоянии, добавлю ссылку на неё в readme.
Данный вопрос про летний major update, а именно что значит пункт added single-receiver gnss support to the bus.
pony.c line 210
Нужно добавить && (*groupptr)[*grouplen] != '}' к условиям, так как поиск "def" используя "gnss:" в "{gnss: {gps: abc} def} ghi" вернёт длину, соответствующую "def} ghi"
// determine the length, counting until the end of the string or when a group started
for (; (*groupptr)[*grouplen] && (*groupptr)[*grouplen] != '{'; (*grouplen)++);
Line 175 in 3d74440
For example "{imu:}{gnss:{gps:}{bds:}}"
Так как определяется во время выполнения, ответственность за освобождение памяти несёт пользователь?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.