Jump to content

    

FreeRTOS 10, теперь под лицензией MIT

Вот такая новость появилась: FreeRTOS перешёл под крыло Amazon и выпущен под лицензией MIT

Раньше была GPLv2 с модификациями, теперь MIT. Кто-нибудь, кто разбирается в лицензия, может пояснить какие это плюсы или минусы даёт? Вроде и раньше можно было исходники не открывать даже при модификации. Из плюсов пока только вижу - в предыдущей версии лицензии был пункт, что нельзя сравнивать производительность ОС по сравнению с другими, теперь, похоже, этот пункт убрали.

Share this post


Link to post
Share on other sites

Я тоже на первый взгляд отличий не вижу. Непонятно, зачем тогда меняли? Какие-то свои юридические заморочки?

Share this post


Link to post
Share on other sites
Вроде и раньше можно было исходники не открывать даже при модификации.

А с чего вы взяли что GPL позволяла не открывать исходники? Как раз наоборот, вы обязаны были раскрыть исходники либо вместе с программой либо по запросу.

Правда пишут что у FreeRtos было какое-то исключение на счет раскрытия исходников.

Share this post


Link to post
Share on other sites
Я тоже на первый взгляд отличий не вижу. Непонятно, зачем тогда меняли? Какие-то свои юридические заморочки?

Собственно, GPL + их исключения как раз и получается MIT. Просто сделали понятнее для всех.

Думаю, причина в том, что слово "GPL" отпугивает какую-то часть пользователей.

 

А вот что пункт про запрет сравнений убрали - это хорошо. Ждём весёлых тестов:)

Share this post


Link to post
Share on other sites

Думаю Амазон с его ресурсами довольно быстро это исправит.

Share this post


Link to post
Share on other sites

Вот добавили Message Buffers - уже польза есть

Share this post


Link to post
Share on other sites
Я тоже на первый взгляд отличий не вижу. Непонятно, зачем тогда меняли? Какие-то свои юридические заморочки?

Раньше (GPL+exception clause) можно было скрывать свои сорцы, при условии что саму FreeRTOS вы не меняли. Сейчас можно скрывать свои модификации FreeRTOS.

Кроме того, TCP и FAT раньше были под чистым GPL, т.е. надо было открывать свои исходники в любом случае. Сейчас такого требования нет.

Думаю такое было требование Amazon. Амазонцы лезут во всяческий IoT, а там открытые сорцы могут быть нежелательны по причине безопасности.

Share this post


Link to post
Share on other sites

Протестировал стрим буфер. Компилятор Keil, максимальная оптимизация по скорости, контроллер STM32F103C8T6. Измерил количество тиков на типовые операции и использование стека в байтах. Получились интересные результаты:

 

Create / Send / Receive (тики между переходом управления планировщику и получением байта принимающей задачей) / Stack

 

Стрим буфер = 200 / 572 / 548 / 136

 

Старая добрая очередь = 290 / 311 / 319 / 176

 

То есть выигрыш только в стеке? Я надеялся, что и скорость выше будет. :crying: Получается, что есть смысл использовать буферы только если прижимает по стеку, либо ради фишек буферов - Trigger Level для стрим буфера и возможность отправки данных разной длины для буфера сообщений.

 

Код тестовой программы:

 

#include "stm32f10x.h"

#include "FreeRTOS.h"
#include "stream_buffer.h"
#include "task.h"
#include "queue.h"

StreamBufferHandle_t buf_tmp;
QueueHandle_t        que_tmp;

uint8_t i, j, k;

void task_tmp1(void * param) {
    
    while (1) {
        
        i++;
        xStreamBufferSend(buf_tmp, &i, sizeof(uint8_t), portMAX_DELAY);
        vTaskDelay(100);
        
        i++;
        xQueueSend(que_tmp, &i, portMAX_DELAY);
        vTaskDelay(100);
        
    }
    
}

void task_tmp2(void * param) {
    
    while (1) {
        
        xStreamBufferReceive(buf_tmp, &j, sizeof(uint8_t), portMAX_DELAY);
        __NOP();
        
    }
    
}

void task_tmp3(void * param) {
    
    while (1) {
        
        xQueueReceive(que_tmp, &k, portMAX_DELAY);
        __NOP();
        
    }
    
}

int main() {
    
    xTaskCreate(task_tmp1, "tmp1", 128, NULL, 4, NULL);
    xTaskCreate(task_tmp2, "tmp2", 128, NULL, 3, NULL);
    xTaskCreate(task_tmp3, "tmp3", 128, NULL, 2, NULL);
    
    buf_tmp = xStreamBufferCreate(100 * sizeof(uint8_t), sizeof(uint8_t));
    que_tmp = xQueueCreate(100, sizeof(uint8_t));
    
    vTaskStartScheduler();
    
}

Edited by SMaster

Share this post


Link to post
Share on other sites

Короче реально надо сваливать с FreeRTOS и переходить на что-то более простое и эффективное.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now