Jump to content

Recommended Posts

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

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

 

Share this post


Link to post
Share on other sites

Блин, лазил-лазил по сайту, а найти не смог :) 
Спасибо !
 

Share this post


Link to post
Share on other sites

Технология Maxim Integrated nanoPower: когда малый IQ имеет преимущества

При разработке устройств с батарейным питанием важно выбирать компоненты не просто с малым потреблением, но и с предельно малым током покоя. При этом следует обратить внимание на линейку nanoPower производства компании Maxim Integrated. В статье рассмотрено их применение на примере системы датчиков беспроводной оконной сигнализации.

Подробнее

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

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

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

 


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

 

Share this post


Link to post
Share on other sites

Подскажите пожалуйста,как подключить файлы к проекту в 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 и тут уже выбрав папку среда начинает искать и находить файл.Получается зачем нужны предыдущие способы?Каша в голове полная,помогите понять что к чему.

Share this post


Link to post
Share on other sites
                     

Платы Nucleo на базе STM32G0: чего можно добиться с помощью связки Nucleo и Arduino

Платы Nucleo и платы расширения X-NUCLEO от STMicroelectronics можно интегрировать в платформу Arduino с помощью библиотеки STM32duino. Связка плат Nucleo и платформы Arduino, и наличие готовых библиотек – представляет удобный инструмент для создания прототипов и конечных приложений в условиях ограниченного времени. Статья содержит пошаговые инструкции по установке библиотек и запуску примеров для Nucleo.

Подробнее...

1 способ самый простой и правильный. Всегда так добавляю файлы и проблем нет никаких, всё компилируется.

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
В 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 ../

Edited by StationX

Share this post


Link to post
Share on other sites
1 минуту назад, StationX сказал:

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
7 минут назад, StationX сказал:

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
5 минут назад, StationX сказал:

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

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

Share this post


Link to post
Share on other sites

У меня 9-ая версия. Все порты - из архива с офф сайта :unknw:

А это что такое :

2018-02-16_08-49-44.png.c5a3caac962b7982694d6ce66c53bac7.png

:o

Share this post


Link to post
Share on other sites

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

Курниц в своей статье пишет использовать 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:

 

 

Share this post


Link to post
Share on other sites

.c файлы просто добавлются в проект. Не нужно их инклюдить...

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By ВикторТ
      Добрый день! Пытаюсь запустить SDкарту по 4-проводному интерфейсу совместно с использованием библиотеки STemWin под управлением FreeRTOS. Как только запускаю GRAPHICS_Init(), SDкарта перестает работать. Объясните, пожалуйста, в чем может быть причина.
    • By Anton Klapatun
      День добрый!
       
      Имеется sim-карта со статическим IP и модем SIM800C, который через UART соединен с STM32F0.
      Прочитав статью на хабре, которая и являлась отправной точкой, было решено повторить подвиг, но в версии lwip 2.0.3, которой я пользуюсь, ppp изменился до неузнаваемости, что сначала внесло некоторый сумбур. Но в документации к lwip был найден текстовый файл с настройкой ppp-соединения (ppp.txt, прикреплю его ниже), в котором было все, что нужно для счастья, но когда модем начал общаться с контроллером, дальше фазы LCP дело не зашло. Как я понял из документа (ppp_connect.docx), который оказался у меня уже-и-не-помню-откуда, после конфигурирования параметров соединения в фазе LCP контроллер должен посылать в модем пакет с заголовком PAP (C0 23), но он почему-то этого не делает... Он вообще больше ничего не делает. Я пытался проследить в отладчике весь путь запроса, что приходит от модема, но это только больше меня запутало.
      Собственно, прием данных у меня организован через прерывание. После ввода AT-команды "ATD*99***1#" и получения ответа "CONNECT", устанавливается флаг "ppp_enable" и при приходе байта он кладется в очередь `xQueue_PPP_Package`.
      void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { uint8_t u8; if(huart == &huart1) { if (ppp_enable == true) { portBASE_TYPE xHigherPriorityTaskWoken_PPP_Rx; u8 = Sim800.UsartRxTemp; xHigherPriorityTaskWoken_PPP_Rx = pdFALSE; xQueueSendFromISR(xQueue_PPP_Package, &u8, &xHigherPriorityTaskWoken_PPP_Rx); } else { /*Reception of AT commands*/ } HAL_UART_Receive_IT(&huart1,&Sim800.UsartRxTemp,1); } } В задаче `StartLwIPTask` в бесконечном цикле проверяется эта очередь и при появлении элементов, записывает их в массив `PPPx.Data` и при фиксации второго HDLC-заголовка (0x7E), отправляет данные в lwip функцией `pppos_input`.
      P.S. Переменная `PPPx.Last_Index` это размер пришедшего ppp-пакета.
      void StartLwIPTask(void const * argument) { /* USER CODE BEGIN StartLwIPTask */ /*Создаем очередь*/ xQueue_Sim800_Package = xQueueCreate(128, sizeof(uint8_t)); xQueue_PPP_Package = xQueueCreate(128, sizeof(uint8_t)); uint8_t u8=0; volatile int setup = 0; tcpip_init( NULL, NULL ); /*Инициализация стека tcp/ip*/ /*Create a new PPPoS interface*/ ppp = pppos_create(&ppp_netif, output_cb, status_cb, 0); // /* Auth configuration, this is pretty self-explanatory */ ppp_set_auth(ppp, PPPAUTHTYPE_PAP, "beeline", "beeline"); /* Require peer to authenticate */ ppp_set_auth_required(ppp, 1); /*Only for PPPoS, the PPP session should be up and waiting for input.*/ ppp_set_silent(ppp, 1); /* * Initiate PPP listener (i.e. wait for an incoming connection), can only * be called if PPP session is in the dead state (i.e. disconnected). */ ppp_listen(ppp); /* Infinite loop */ for(;;) { if (sim800_init() == S_RESET) /*Настройка модуля Sim800*/ continue; for (;;) { if (pdPASS == xQueueReceive(xQueue_PPP_Package, &u8, 100/portTICK_RATE_MS)) { if (u8 == 0x7E) t++; PPPx.Data[PPPx.Last_Index++] = u8; if (t==2) { PPPx.Last_Index--; pppos_input(ppp, PPPx.Data, PPPx.Last_Index); t=0; memset(&PPPx, 0, sizeof(PPPx)); } } } } /* USER CODE END StartLwIPTask */ } Как я писал выше, все идет хорошо, пока идет фаза LCP, но после подтверждения контроллера запроса опций, наступает тишина.
      В интернете мне удалось найти довольно мало исчерпывающей информации и примеров по связке stm32+lwip+ppp, если кто-нибудь занимался подобным или сталкивался с похожей проблемой, буду очень признателен за помощь и за пинки в нужном направлении. Заранее спасибо.
       
       
      ppp.txt
      ppp_connect.docx
    • By Michael4you
      Основные обязанности:
      •проектирование, разработка и поддержка ПО для встраиваемых систем;
      •сопровождение кода и тестов;
      •документирование разрабатываемого ПО;
      Требования к кандидату: 
      • опыт работы от 3 лет;
      • уверенное знание C;
      • опыт разработки встраиваемых приложений;
      • опыт работы с платформами на ARM-процессорах;
      • опыт работы с STM32;
      • опыт работы с ОСРВ (желательно FreeRTOS);
      • опыт работы с Keil, System Workbench;
      • опыт работы c ModBus, USB, CAN;
      Приветствуется:
      • опыт проектирования архитектур ПО;
      • знание Python;
      Условия:
      •трудоустройство по ТК РФ;
      •доход обсуждается с успешным кандидатом (от 60 тыс.руб.)
      •дистанционная работа, можно работать из дома;
      •выплаты заработной платы 2 раза в месяц
      Наш сайт: http://i-mt.net/
      Моя почта: dezh@i-mt.net
      Мой мобильный: +7963 776 36 55 
      С уважением, Михаил.
    • By Wenter
      Доброго времени суток. Подскажите пожалуйста, как установить файл с расширением .dll в Keil. Необходимо установить утилиту StateViewer для изучения FreeRTOS.
  • Сообщения

    • Объясняю. Входная емкость BC846 порядка 10 пф, на частоте 1000 Мгц,  это примерно 16 Ом, так что добавление например емкости 0.1 мкФ не имеет смысла, поэтому смело вычеркиваем из схемы, если она там есть. Борисов же пояснил, что это нужно в НЧ части, особенно при индуктивной нагрузке. Оконечной части в схеме нет, заранее неизвестно, какой нужен индикатор в итоге, у каждого свое, у меня например это было реле, поэтому схема была сложнее и совсем другая. Еще как влияет Значительно лучше и намного. Ну и практика. Чувствительность ОЧЕНЬ высокая, никаких там сантиметров и даже 1 метра, все значительно дальше, но нужна еще нормальная антенна
    • А смысл дублировать экран?
    • Может в межблочных соединениях или внутреннем коммутаторе входов
    • есть источник про звуковые на ферритах? че то гугл....
    • Всем доброго времени суток.  Прошу помочь советом в запуске передатчика . квалифицированных радиоинженеров. В качестве ЗГ и усилителя для раскачки свч модуля Тошиба 35 ватт попытался применить чипы СМТ2119а и SPF5043Z. Предварительно консультировался с профессиональными разработчиками СВЧ техники (по телефону). НО, не повезло. Трансмиттер не заработал, как надо. И не пойму причины. До этого, как-то получалось. Я не инженер, а аматор, особыми знаниями не обладаю, но, наверное, раньше везло.) Размеры  сегмента платы, где расположены ЗГ и СВЧ усилитель  20х5 мм (рисунок платы в прикрепленном файле) Снизу земляной полигон и все земляные цепи «прошиты» большим количеством переходных отверстий, особенно под усилителем. Слева кварц 5х3 мм, затем интегральный передатчик СМТ2119 sot23-6, далее цепи согласования, ну и справа прямо на косом участке земли двумя ножками стоит усилитель SRF5043 sot343 (4 ножки). Слева выше вход этого чипа, справа ниже выход. Цепи питания каскадов разделены. Заменил LC элементы межкаскадного согласования, просто поставил между каскадами ослабляющий аттенюатор – толку нет. Экранировка узла ничего не дала. При вых. мощности ЗГ 7-8 dBm, на антенном  выходе та же мощность 50% от нужной (~18 ватт),  также может заработать и на основной частоте 500+ Мгц и + на двух других более низких частотах, суммарная мощность на выходе возрастает до 20 ватт, но это нестабильная работа. Радиатор горячий, а толку нет.(  При мощности ЗГ +11-12dBм идет возбуд и по всей полосе, шум. Позвонил радиоинженеру в Киев, тот порекомендовал померить выходное ВЧ напряжение с СВЧ усилителя на нагрузке 50 ом. Делаю сейчас ВЧ вольтметр (еще проблема). Но, оно и так видно, что не качественно работает СВЧ усилитель. Раньше получалось раскачать бустерный СВЧ усилитель Toshiba до 35 ватт (для этого на его вход надо подать 75 мВт мщности) более простыми средствами (MRF49XA+BFG67X+2SC3356 и без особых конструкторских требований по СВЧ технике), а сейчас хотел применить более современные радиочипы и – такой облом.(   Я уже подумаю, что ошибся с применением такого широкополосного и мощного (до 180 мВТ на выходе) СВЧ усилителя, но, именно его применить мне порекомендовал спец высокого уровня, инженер-конструктор из НПО « Сатурн, (Киев).   По-этому нуждаюсь в помощи и консультации Гуру в радиоделе.   Девайс, на MRF49XA, нормально работающий, на фото. ЗГ+УВЧ.doc трансмиттер.rar Схема ЗГ+ УВЧ. Transmitter.rar
    • Скажите реально ли этот экран подключить к мультиметру .что бы показывал его показания?  
×
×
  • Create New...