Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Codevision и AVRStudio4 как таковых плюшек не имеют, ну разве что примитивная подсветка синтаксиса. Keil 4 уже лучше, но с перечислениями в битовых полях структур тоже что-то не так.
Уже на протяжении многих лет применяю и всем советую IDE Eclipse. Это, конечно, редактором назвать можно с определенной натяжкой, это 100% IDE, и не очень легковесная... Но по сравнению с MS Visual Studio просто перышко.
Сам пользуюсь Eclipse Mars 2, более новые стали сильнее ориентироваться на Java-разработчиков и имеют всякие странные эффекты при работе с Си.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Eclipse классный, но по enum автоподсказку вытащить не получилось. Может делаю не так?
Код:
typedef enum{ STOP=0, UP=1, DOWN=2 } DEV_STA_t;
void main(void) { DEV_STA_t s;
s = ? }
По Ctr+Space конечно вываливается всё подряд(сотни имён). Но так и в Keil оно работает. Кажется в древней VisualC или Borland было неплохое автозаполнение. Надо поставить и посмотреть.
нажимайте Ctrl-Space после ввода первых символов константы. лично я для удобства всегда константам даю имена, начинающиеся со смыслового префикса, например:
Код:
enum{ CMD_STOP, CMD_UP, CMD_DN };
тогда ввожу CMD_ и получаю ограниченный список имен. enum в Си не тип вообще, есличо (ну, может последние версии что-то поменяли... не в курсе)
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Можете ещё Qt Creator попробовать, он достаточно легковесный, по сравнению с тем же Eclipse:
Не совсем то, что Вы заказывали, но автодополнение с учётом препроцессора (а ADCSRAs это всё же макрос) - это посложнее будет и, если и реализовано где-то, то вряд ли много где.
Мне ещё в Qt Creator нравится его способ работы с несколькими файлами исходного кода. Можно рядом открыть даже один и тот же файл в нескольких "окнах".
Почитал тут заголовок файла, что мне сгенерил мплаб и вычитал интересную фразу:
Цитата:
Use project enums instead of #define for ON and OFF.
.Погуглил. Показалось интересным. Правда для моего проекта это мало интересно - слишком прост, чтобы в дебаггере ковыряться. Но, решил попробовать. Нашел в исходнике кучу #define и решил их превратить в enum.
С первыми двумя, вроде как проблем нет: Это биты соответствующие нажатым кнопкам. В принципе, еще в ту же группу можно добавить KEY_RELEASE - этот код функция выдаёт при отпущенной клавише. Так что можно бы написать:
Тогда я бы мог переменной, куда читаю кнопки присвоить тип keys_t, да вот беда в том, что у них может быть аттрибут "повторения". И чтобы это работало корректно, надо определить еще по одному варианту для каждой кнопки (и еще вариант возврата "пустоты" - 0x00).
Можно ли это как сделать корректно или ну его нафиг? Причем, просто сейчас сделав такое изменение (заменил так #define на enum) компилятор проглотил и не подавился. Правда еще не проверил в работе. Переменной тип keys_t не назначал.
_________________ А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Тогда я бы мог переменной, куда читаю кнопки присвоить тип keys_t, да вот беда в том, что у них может быть аттрибут "повторения". И чтобы это работало корректно, надо определить еще по одному варианту для каждой кнопки (и еще вариант возврата "пустоты" - 0x00). Можно ли это как сделать корректно или ну его нафиг?
А в чём некорректность? Неудобство обработки? Как вариант:
Код:
[...] case KEY_SET_REPEAT: repeat = true; // no break case KEY_SET: // обрабатываем с учётом флага break; [...]
Использование enum типов позволяет компилятору не позволять заведомо [и потенциально] некорректные присвоения переменных - т.е. все возможные варианты в enum должны быть перечислены. Некоторые компиляторы настолько мудры, что и в switch-ах предупреждают нас если какое-то значение остаётся необработанным - default: при этом, понятное дело, должен отсутствовать.
_________________ Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR!
Просто много писанины. Так функция обработки кнопок может вернуть значение
Код:
return readkey;
или
Код:
return readkey | HOLDED;
Т.е. в enum придется отдельно вводить KEY_SET_HOLDED, KEY_MODE_HOLDED. И еще третий вариант возможен (и четвертый...) когда обе кнопки нажаты и/или удерживаются... что-то много становится сущностей для двух кнопок. А стоит добавить третью - число вариаций начнет расти как снежный ком. Кажется, что в данном случае эти enum для меня не рациональны. Спойлер
Код:
// Функция опроса клавиатуры // kbddelay = 448 - соответствует 1с. 1/488 = 2ms #define DEBOUNCE_DELAY 6 // 6*2=12ms - подавление дребезга #define REPEAT_DELAY (SCANPERSECOND/3*2) // 0.66c - задержка перед повтором #define REPEAT_PERIOD (SCANPERSECOND/3) // 0.33c - период автоповтора
Всем привет. Друзья, помогите, пожалуйста. Учу CVAVR, он основан на C++, пишу простенькую программку для переключения поворотов и включения аварийки. Применяю побитовый сдвиг, и собсно проблема - когда переключаю по одному порту, то все работает, если же задествую два порта одновременно, программа виснет. Код под спойлером. Не могу понять, в чем причина, по логике должно работать. Спойлер
if (!left_butt) {flag=switch_arr[0]; switcher ();} else if (left_butt) {left_off; numl=0;} //Правый указатель if (!right_butt) {flag=switch_arr[1]; switcher ();} else if (right_butt) {right_off; nump=0;} //Аварийка. if (!alarm_butt) {flag=switch_arr[2]; switcher ();} else if (alarm_butt) {alarm_off; num_al=0;} ///через ету строку не работает все, то есть контроллер начинает переключать выводы на высокой частоте. } }
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения