Перейти к содержанию

FreeRTOS


Рекомендуемые сообщения

Вроде нет у нас темки по FreeRTOS. Создам, пусть будет.

И так, первый вопросик на засыпку. А можно ли её на халяву использовать в коммерческих проектах ?
Мне, конечно, без разницы, во всех проектах я делаю свои планировщики, но почему бы не попробовать что-нибудь готовое.

 

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Давайте тут ещё всякими наработочками и полезными кодами делиться :)

Выводим на дисплей загрузку процессора и использование памяти операционкой (своей кучи) :

Скрытый текст

 


volatile unsigned long  IdleCount = 0;
volatile int            cpu_perc=0;

/***********************************************************************************************************************************/
void Main_Task(void *vpParam){
	static char lcd_buf[40]="";
    while(1){
        vTaskDelay(1000 Ms);
      	
        sprintf(lcd_buf, "CPU: %lu,%lu%c", cpu_perc/10, cpu_perc%10, '%');
        Display_Puts_XY(0, 0, lcd_buf, 1);
      	
        int stack_used_max = configTOTAL_HEAP_SIZE-xPortGetMinimumEverFreeHeapSize();
        int perc=(stack_used_max*100)/configTOTAL_HEAP_SIZE;

        sprintf(lcd_buf, "Heap: %lu(%lu %c)", stack_used_max, perc, '%');
        Display_Puts_XY(0, 10, lcd_buf, 1);      
      
    }
}
/***********************************************************************************************************************************/

/***********************************************************************************************************************************/
void Perc_Task(void *vpParam){
int i, perc_01, prev_cnt;

vTaskDelay(100 Ms);

prev_cnt=xTaskGetTickCount();
IdleCount=0;
vTaskDelayUntil(&prev_cnt, 1000 Ms);
perc_01=IdleCount/1000;
//----------------------------------------------
xTaskCreate(Main_Task, "Main_Task", configMINIMAL_STACK_SIZE*2, NULL, 1, &pMain_Task);      // Тут создаём остальные задачи, или основную, в которой все создадутся.
//----------------------------------------------
prev_cnt=xTaskGetTickCount();
while(1){
    IdleCount=0;
    vTaskDelayUntil(&prev_cnt, 1000 Ms);
    i=IdleCount/perc_01;
    if(i>1000)  i=1000;
    i=1000-i;
    cpu_perc=i;
}
}
/***********************************************************************************************************************/
void vApplicationIdleHook( void ){
    portENTER_CRITICAL();
    IdleCount++;
    portEXIT_CRITICAL();
}
/***********************************************************************************************************************************/

/***********************************************************************************************************************************/
void main(void){

........
........
xTaskCreate(Perc_Task, "Perc_Task", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES-1, NULL);      // Первая задача. Сначала нужно ей отработать, потом из неё создадутся все сотальные.
........
........
vTaskStartScheduler();
while(1);
}

 

Очень помогает при набивании девайса всяческим функционалом в виде задач, очередей, ... Смотришь на циферки и сразу отпадает желание быдлокодить :) Начинаешь рационально использовать ресурсы и правильно составлять алгоритмы программы :)

Скрытый текст

DSC_0065.thumb.JPG.0341861e65bca025ca37bb269f20505f.JPG

 

Ссылка на комментарий
Поделиться на другие сайты

  • 10 месяцев спустя...

Подскажите пожалуйста,как подключить файлы к проекту в MPLAB X.Нужно подключить .h и .c

Первое что я пробую это пкм на папке Header Files ->Add Existing Item

Там выбираю папку с файлом и сам файл.Справа над кнопками есть выбор Store path as,так вот пока не поставишь там галку Copy,что есть судя по хелпу копирование данного файла в папку проекта,файл визуально добавляется в дерево проекта,но вот не подключается по факту .То есть данным способом без галки copy мы чисто добовляем отображение файла и всё?Типа что бы другой разработчик видел что мы подключили?

Следующая попытка подключить нужные файлы это пкм на проекте и выбор properties-general далее Source Folders .Там выбираю папку где находится файл и жму select,путь появляется в окошке source folders,но файл при компиляции так и не находит.

Третий вариант это на проекте пкм properties xc32-gcc option categories->preprocessing and messages->include directories->browse и тут уже выбрав папку среда начинает искать и находить файл.Получается зачем нужны предыдущие способы?Каша в голове полная,помогите понять что к чему.

Ссылка на комментарий
Поделиться на другие сайты

А если к примеру нужно фрииртос подключить,получается копировать все файлы?

Просто закидываю папку в проект с осью и не охото каждый раз руками указывать каждый файл

Ссылка на комментарий
Поделиться на другие сайты

В любом случае, .h-файлы мало кинуть в проект, к ним должны быть правильные пути. Либо в настройках проекта (подключаемые папки), либо в директиве #include.
В проект они добавляются только для удобства.

Ссылка на комментарий
Поделиться на другие сайты

Вот и суть в этом,у того же  же фриртос во многих файлах,подключаемые файлы записаны типа  #include "tasks.h" и стоит тронуть их из общей папки,приходится явно задавать пути потом для всех (типа "proj\rtos\...\...\...\tasks.h").Я думал есть средство что бы они поняли насколько их далеко по папкам засунули относительно корневого каталога.

Ссылка на комментарий
Поделиться на другие сайты

В файлах фриртос все иклюды имеют относительные пути. По этому достаточно в проекте выбрать только директорию самой оси. Плюс добавить в проект необходимые .c-файлы.

Ссылка на комментарий
Поделиться на другие сайты

В 12.02.2018 в 21:10, Alex сказал:

В файлах фриртос все иклюды имеют относительные пути

Судя по файлам,не совсем. И сделано это скорее всего по этой причине -Any #include directives that use directory separators in the header file specifications should be changed. Remove all but the header file name in the directive. Add the directory path to the compiler’s include search path or MPLAB X IDE equivalent. This will force the compiler to search the directories specified with this option.

И когда подключаешь ось к мплабу,после открытия их демок в настройках компилятора вылезают такие добавленные пути -I ../../../Source/include -I ../../../Source/portable/MPLAB/PIC32MX -I ../../Common/include -I ../

Изменено пользователем StationX
Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, StationX сказал:

Судя по файлам,нет.

Покажите мне хотябы один файл из FreeRTOS, в котором прописаны не относительные пути.

2 минуты назад, StationX сказал:

И когда подключаешь ось к мплабу,после открытия их демок в настройках компилятора вылезают ...

Какой-то сумбур написан. Подключаешь сам ось, тут сразу же их демки приплели. И где и что вылезает - тоже не понятно...

Ссылка на комментарий
Поделиться на другие сайты

Настройки компилятора -ПКМ на проекте-Conf-xc32-xc32gcc-additional options: -I ../../../Source/include -I ../../../Source/portable/MPLAB/PIC32MX -I ../../Common/include -I ../

10 минут назад, Alex сказал:

Покажите мне хотябы один файл из FreeRTOS, в котором прописаны не относительные пути.

Там вообще не прописаны пути,только имя подкл файла.Но всё это ИМХо,я же новенький,вероятность моей ошибки близка к 100%

Ссылка на комментарий
Поделиться на другие сайты

Я имею ввиду то,что если подключить чисто си файлы и указать путь расположения только директорию самой оси,то мплаб будет говорить что не найдены файлы,а когда делаю как пишут в MPLAB® XC32 C/C++ Compiler User’s Guide,то есть добавляю опции в виде -I ../../../Source/include -I ../../../Source/portable/MPLAB/PIC32MX -I ../../Common/include -I ../ все работает.

Ссылка на комментарий
Поделиться на другие сайты

7 минут назад, StationX сказал:

и указать путь расположения только директорию самой оси,то мплаб будет говорить что не найдены файлы

Этого не может быть просто по тому, что вся ось находится в единственной папке. Достаточно указать её в подключаемых директориях и всё.
Вообще, Фриртос подцепляется к проекту очень просто.

Ссылка на комментарий
Поделиться на другие сайты

То есть в одну папку свалить все необходимые файлы и подключить её?Я думал надо делать и делал как пишет Курниц в цикле статей про РТОС,убрать из папок все то,что не относится к ядру и подключаемому контроллеру и потом уже подключать оставшиеся файлы.

Ссылка на комментарий
Поделиться на другие сайты

5 минут назад, StationX сказал:

То есть в одну папку свалить все необходимые файлы и подключить её?

Да.
Хидеры лежат в папке "include", их можно кинуть в корневую папку ОСи, рядом с .c-файлами. Туда же кидаем и порт для своего камня из папки "portable".

Ссылка на комментарий
Поделиться на другие сайты

Попытаюсь пояснить что это.

Курниц в своей статье пишет использовать makefile.

Я пока не разобрался с тем что такое makefile,но из того что я вычитал,я понял(вероятно что и не правильно понял) что эта часть

 SRC = \
main.c \
$(SOURCE_DIR)/tasks.c \
$(SOURCE_DIR)/queue.c \
$(SOURCE_DIR)/list.c \
$(SOURCE_DIR)/croutine.c \
$(SOURCE_DIR)/portable/MemMang/heap_1.c \
$(PORT_DIR)/port.c

 

Говорит о том,что: необходимо подключить эти файлы,что я и хотел по сути сделать тем,что Вы обвели кружком :rolleyes:

 

 

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • У меня больше всего вопросов вызвала необычная схема обеспечения отрицательного питания. Автор этой обстоятельной заметки пишет: For this supply to work correctly, the transformer must have a secondary voltage of at least 18V RMS.  Почему? Что будет не так с отрицательным питанием, если напряжение на трансформаторе будет меньше 18В?   https://tinyurl.com/23mlwxtt - я в простейшей эмуляции ставлю 12В пикового напряжения для трансформатора и на стабилитроне все как положено: -5.6В.
    • Согласен, очень криво объяснил. Это работа трёх вольтовой линии, просто на диод шотки сдвоенный, на один анод приходит сигнал напрямую с трансформатора, а на второй через дроссель. Вольт/деление 5 вольт в клетке, тайминг по моему 10 МС. Третья фотография это сигнал на катодах уровень земли ровно по центру экрана. Но все линии по итогу в порядке 3.3 в, 5, в, 12 в и -12 в. Нагрузить все линии не могу сразу ,так как тут же выгорают транзисторы (имеется нагрузка 250 ватт по 10 ампер на каждую линию за исключением-12в), поэтому нагружаю 3.3 вольтовую линию на 10 ампер,  подключаю переменный резистор 50 ватт на 15 ом на 5 вольтовую линию и постепенно довожу до той той картины с перекосом (это гдето  50 ватт общее). По поводу микросхемы, вверху имеется скрин где между импульсами проскакивает мини импульс, если так можно сказать, он проскакивает и на одной  и на второй ноге (7,8). Микросхема не tl 494, а lw4933/abx942.1/c9421646. Далее они приходят на базы транзисторов 945g  коллекторы этих транзисторов соединены с  выводами трансформатора. Просто схема типовая, легче мне кажется просто привести фото самого блока, для тех кто разбирается будет гораздо информативне.  Диод шотки по 12 вольтовой линии был подгоревший, заменил на донора. Приводить скрины не буду что бы не захламлять тему. В итоге, пока все так же, при достижении определенной нагрузки суммарно где-то 50 ватт, появляется этот "выброс и перекос". По этому имеются мысли на два варианта, это микросхема , этот мини импульс между периодами, на низкой нагрузке особо не влияет, но при достижении определенной приводит с самовозбуждению входной цепи и непроизвольному открытию транзистора нижнего плеча. Либо дело в "горячей части", плавающий дефект в обвязке силовых ключей.  Спасибо за ответ.
    • @Gomerchik а вы контролировали как меняется уровень сигнала на А1 ардуины?
    • Спасибо за совет. Автором данного проекта я не являюсь, мне нужно было воссоздать уличный датчик для метеостанции взамен пропавшего(( Из разного найденного в интернете этот проект работает с моей станцией Орегон (спасибо автору). В понедельник попробую последовать Вашему совету. Но все равно куча непоняток  как блин это работает)) Если дело в неправильной отправки команды, то как на это влияет подключение датчика температуры? Если совсем не подключать таймер, то передача идет один раз (как и прописано в программе), станция принимает и отображает, но минут через сколько-то естественно станция уже ни чего не показывает, но с таймером питание полностью не пропадает с ардуинки, но передача сигнала каким-то образом работает по таймеру.  В моем понимании данная команда подается один раз потому, что таймер должен отключать питание МК после передачи сигнала и каждые 43 сек снова подавать питание (так того требует станция).  Ардуино передает показания температуры отключается полностью и 43 секунды мк не работает.  Сейчас у меня питание пока сделано на подпитке от солнечной батареи, но пару пасмурных дней и аккумулятор съедается до отключения(
    • thickman Так и сделаю. Вытащу из бу БП.  Буду знать, как отличить. Благодарю. Заменил транзисторы на IRFB20N50K. Картина стала, совсем другой.  Похоже трудность не в драйвере, на момент подвозбуда, переходные процессы, в нем, завершены. Увеличил затворные резисторы до 50ом, стало немного лучше.  Не понятно, почему верхний ключ греется несколько сильнее. Возможно, стоит посмотреть ток в коллекторе.  Снабберные емкости временно удалил, изменений не произошло.  Замена ТГР на другой, на кольце MSTN-16A-TH, так же, результата не принесла.   irfb20n50k.pdf
    • А что нить из ассортимента активных щупов производства СССР..))
  • Похожий контент

×
×
  • Создать...