Создание собственной системы стабилизации
у вас где-то неправильное приведение переменных
int32_t data;
data=45653;
if(data<0)… ГДЕ ?
16 бит 10000000000000000 - в дополнительном коде - старший бит это знак числа, дабы перевести в основной надо добавить в младший бит единицу и естественно поставить знак - получаем -1… если в старшем бите 0 то единицу добавлять ненадо… говорю же где-то кроется 16 битная переменная с переполнением…
Задам вопрос по другому,: “какого типа должна быть объявлена переменная, чтоб ей можно было присвоить значение 45635 и компилятор это значение не принимал за отрицательное” …
(а сейчас у меня условие <0 выполняется…(?))
Задам вопрос по другому
Олег пацаны тут умные - не то что я: кодятник в студию - разберуться 😃
ну задайте ему uint…
пацаны тут умные
Надеюсь, что ткнут меня носом в мою безграмотность… (если б не MS5611, с его “миллионными” значениями в расчетах, я б может и не знал,- что ничего не понимаю…)
Проверил, - то же самое… И так: (int32_t)45653 - тоже…
Перекомпили еще раз, должно было помочь, по всем описаниям, проблема именно в том, что константа по умолчанию идет как int, т.е. от -32768 до +32768.
хмм… а зачем вообще применять знаковые переменные? кто нам мешает использовать unsigned???
Не, ну а что за текст? Я без претензий ибо для меня языки программирования - это птичий язык, чесное слово, я могу понять где какие переменные, где какие алгоритмы - но общей картины я не могу представить - хоть убей, а по каким-то урывкам темболее 😦
Перекомпили еще раз
я чего-то не вижу?
кстати есть неразрешенный вопрос, вроде как можно родное ПО PX4 компилить и отлаживать в эклипсе?
Ситуация такая (CooCox): (для проверки сделал следующий код)
int32_t data;
data=45653;
if(data<0)
{out_usart2(0x2D);
data=abs(data);
}
Так вот компиллер считает что 45653 - “меньше нуля” (???), потом ессно делает abs() и далее из “data” получается -19883 (??)
Причем все нормально до 32768, а далее уже ненормально… Мне всегда казалось что int32_t (stdint.h) хватает чтоб 45653 было положительным…
Минуса быть не должно! Функция abs() (типовая) работает ТОЛЬКО С ПЛАВУЧКОЙ (float, double), вероятно срабатывает каконидь сурогатный подкокосовый макросс
#define ABS(X) ((X<0)?-X:X)
, а в нём может быть преобразование типа.
кстати есть неразрешенный вопрос, вроде как можно родное ПО PX4 компилить и отлаживать в эклипсе?
Компилить - смысла нет, отлаживать - надеюсь не придётся.
int32_t data;
data=45653;
if(data<0)… ГДЕ ?
Олег, покажите как у вас определены int32_t и другие типы переменных?
как у вас определены int32_t и другие типы переменных
Если б я знал… 😃. Полез сейчас в “дебри”, рою в сети, оказалось все не так просто…
Если б я знал… . Полез сейчас в “дебри”, рою в сети, оказалось все не так просто…
Как вариант, посмотреть ассемблерный код этого куска.
Я в дневнике выложил текущую прошивку и лодырь (пока всё обзывается px4)
Полез сейчас в “дебри”
Полез и нашел 😃, проблема была в настройках проекта CooCox, - действительно типы компиллер понимал неадекватно
из за непонятного #include stdint.h (подключался дважды (?) из разных мест)…
Теперь “все что нужно положительное” и давление показывает правильное, всем спасибо за поддержку…
Поздравляю!
У меня предложение - выкинуть еепромку 24xx - кто за? она уже не используется - раз, медленная - два, висит на i2c и занимает место на плате - три… все настройки хранятся в виртуальной eeprom в последних секторах флеша, на борту есть флеш m25p16 по spi…
У меня предложение - выкинуть еепромку 24xx - кто за?
Я давно ЗА, но мы, помнитцца, не докопались, где за неё АПМ цепляется. По идее, можно было от всех еепромов избавиться, достаточно набортной СД и внтренней памяти проца под настройки.
выкинуть еепромку 24xx - кто за?
И магнитометр… , я уже выкинул, оставил только наружу разъем i2c, на случай если “преспичит”…
достаточно набортной СД и внтренней памяти проца под настройки.
Вроде дидронсы напаролись на какие то проблемы с параметрами, когда они на SD карте лежат… И вроде их перенесли на флешку (но может я не правильно понял)
И магнитометр… ,
Не согласен. Зачем портить законченную систему? Кому “приспичит” может перерезать дорожки от набортного и подключить внешний.
Вроде дидронсы напаролись на какие то проблемы с параметрами, когда они на SD карте лежат…
настройки нужно в проце хранить, а логи и маршруты, автоскрипты можно на Сдшке.
настройки нужно в проце хранить, а логи и маршруты, автоскрипты можно на Сдшке.
По мне, кроме логов на СДшке ничего нельзя хранить. Представь что будет, если во время полета по точкам, отрубится СДшка…
По мне, кроме логов на СДшке ничего нельзя хранить. Представь что будет, если во время полета по точкам, отрубится СДшка…
Народ на SD сейчас только логи и файлы-флаги - всё перенесено в проц и 24-ю тоже наттикс больше не использует - я где-то выше писал 😃