c2000ware-FreeRTOS/kernel/.meta/freertos_tool/FREERTOS.syscfg.js
2023-07-20 14:13:51 +05:30

603 lines
18 KiB
JavaScript

"use strict";
/*global exports, system*/
let Common = system.getScript("/driverlib/Common.js");
let Pinmux = system.getScript("/driverlib/pinmux.js");
let CMDCommon = system.getScript("/kernel/freertos_tool/FREERTOSCommon.js");
/* Intro splash on GUI */
let longDescription = `FreeRTOS Configuration Tool
For more information on the tool visit:
`;
var config = [
// Folder select
{
name: "useExternalInstall",
displayName: "Use External FreeRTOS Install",
default: false,
onChange: (inst, ui)=>{
ui.freertosPath.hidden = !inst.useExternalInstall
}
},
{
name: "freertosPath",
displayName: "FreeRTOS Install Path",
default: "",
fileFilter: ".*",
hidden: true,
pickDirectory: true,
},
{
name: "GROUP_FREERTOS_CONFIG",
displayName: "FreeRTOS Configuration",
collapsed: true,
config: [
{
name: "GROUP_KERNEL_CONFIG",
displayName: "Kernel Configuration",
collapsed: false,
config: [
{
name: "CPU_CLOCK_HZ" ,
displayName: "CPU Clock Hz",
description: "",
default: 100000000,
},
{
name: "TICK_RATE_HZ" ,
displayName: "Tick Rate Hz",
description: "",
default: 1000,
},
{
name: "MAX_PRIORITIES" ,
displayName: "Max Priorities",
description: "",
default: 16,
},
{
name: "MINIMAL_STACK_SIZE" ,
displayName: "Minimal Stack Size",
description: "",
default: 128,
},
{
name: "MAX_TASK_NAME_LEN" ,
displayName: "Max Task Name Length",
description: "",
default: 10,
},
{
name: "QUEUE_REGISTRY_SIZE" ,
displayName: "Queue Registry Size",
description: "",
default: 10,
},
{
name: "TASK_NOTIFICATION_ARRAY_ENTRIES" ,
displayName: "Task Notification Array Entries",
description: "",
default: 3,
},
{
name: "USE_PREEMPTION" ,
displayName: "Use Preemption",
description: "",
default: true,
},
{
name: "USE_TIME_SLICING" ,
displayName: "Use Time Slicing",
description: "",
default: true,
},
{
name: "USE_PORT_OPTIMISED_TASK_SELECTION" ,
displayName: "Use Port Optimised Task Selection",
description: "",
default: false,
},
{
name: "USE_TICKLESS_IDLE" ,
displayName: "Use Tickless Idle",
description: "",
default: false,
},
{
name: "USE_16_BIT_TICKS" ,
displayName: "Use 16 Bit Ticks",
description: "",
default: false,
},
{
name: "IDLE_SHOULD_YIELD" ,
displayName: "Idle Should Yield",
description: "",
default: false,
},
{
name: "USE_TASK_NOTIFICATIONS" ,
displayName: "Use Task Notifications",
description: "",
default: true,
},
{
name: "USE_MUTEXES" ,
displayName: "Use Mutexes",
description: "",
default: false,
},
{
name: "USE_RECURSIVE_MUTEXES" ,
displayName: "Use Recursive Mutexes",
description: "",
default: false,
},
{
name: "USE_COUNTING_SEMAPHORES" ,
displayName: "Use Counting Semaphores",
description: "",
default: false,
},
{
name: "USE_QUEUE_SETS" ,
displayName: "Use Queue Sets",
description: "",
default: false,
},
{
name: "ENABLE_BACKWARD_COMPATIBILITY" ,
displayName: "Enable Backward Compatibility",
description: "",
default: false,
},
{
name: "RECORD_STACK_HIGH_ADDRESS" ,
displayName: "Record Stack High Address",
description: "",
default: false,
},
]
},
{
name: "GROUP_MEMORY_CONFIG",
displayName: "Memory Configuration",
collapsed: false,
config: [
{
name: "SUPPORT_STATIC_ALLOCATION" ,
displayName: "Support Static Allocation",
description: "",
default: true,
},
{
name: "SUPPORT_DYNAMIC_ALLOCATION" ,
displayName: "Support Dynamic Allocation",
description: "",
default: true,
},
{
name: "APPLICATION_ALLOCATED_HEAP" ,
displayName: "Application Allocated Heap",
description: "",
default: true,
},
{
name: "STACK_ALLOCATION_FROM_SEPARATE_HEAP" ,
displayName: "Stack Allocation From Separate Heap",
description: "",
default: false,
},
{
name: "TOTAL_HEAP_SIZE" ,
displayName: "Total Heap Size",
description: "",
default: 1024,
},
]
},
{
name: "GROUP_HOOK_FXN_CONFIG",
displayName: "Hook/Callback Configuration",
collapsed: false,
config: [
{
name: "USE_IDLE_HOOK" ,
displayName: "Use Idle Hook",
description: "",
default: false,
},
{
name: "USE_TICK_HOOK" ,
displayName: "Use Tick Hook",
description: "",
default: false,
},
{
name: "CHECK_FOR_STACK_OVERFLOW" ,
displayName: "Check For Stack Overflow",
description: "",
default: false,
},
{
name: "USE_MALLOC_FAILED_HOOK" ,
displayName: "Use Malloc Failed Hook",
description: "",
default: false,
},
{
name: "USE_DAEMON_TASK_STARTUP_HOOK" ,
displayName: "Use Daemon Task Startup Hook",
description: "",
default: false,
},
]
},
{
name: "GROUP_STATS_CONFIG",
displayName: "Statistics Configuration",
collapsed: false,
config: [
{
name: "GENERATE_RUN_TIME_STATS" ,
displayName: "Generate Run Time Stats",
description: "",
default: false,
},
{
name: "USE_TRACE_FACILITY" ,
displayName: "Use Trace Facility",
description: "",
default: false,
},
{
name: "USE_STATS_FORMATTING_FUNCTIONS" ,
displayName: "Use Stats Formatting Functions",
description: "",
default: false,
},
]
},
{
name: "GROUP_COROUTINE_CONFIG",
displayName: "Co-routine Configuration",
collapsed: false,
config: [
{
name: "USE_CO_ROUTINES" ,
displayName: "Use Co-Routines",
description: "",
default: false,
},
{
name: "MAX_CO_ROUTINE_PRIORITIES" ,
displayName: "Max Co-Routine Priorities",
description: "",
default: 0,
},
]
},
{
name: "GROUP_SWTIMER_CONFIG",
displayName: "Software Timer Configuration",
collapsed: false,
config: [
{
name: "USE_TIMERS",
displayName: "Use Timers",
description: "",
default: false,
},
{
name: "TIMER_TASK_PRIORITY",
displayName: "Timer Task Priority",
description: "",
default: 3
},
{
name: "TIMER_QUEUE_LENGTH",
displayName: "Timer Queue Length",
description: "",
default: 10
},
{
name: "TIMER_TASK_STACK_DEPTH",
displayName: "Timer Task Stack Depth",
description: "",
default: 0
},
]
},
{
name: "GROUP_RTOS_INCLUDE",
displayName: "FreeRTOS Optional API Include",
description: "Include optional APIs",
collapsed: false,
config: [
{
name: "vTaskPrioritySet",
displayName: "vTaskPrioritySet",
description: "",
default: false
},
{
name: "uxTaskPriorityGet",
displayName: "uxTaskPriorityGet",
description: "",
default: false
},
{
name: "vTaskDelete",
displayName: "vTaskDelete",
description: "",
default: false
},
{
name: "vTaskSuspend",
displayName: "vTaskSuspend",
description: "",
default: true
},
{
name: "xResumeFromISR",
displayName: "xResumeFromISR",
description: "",
default: false
},
{
name: "vTaskDelayUntil",
displayName: "vTaskDelayUntil",
description: "",
default: true
},
{
name: "vTaskDelay",
displayName: "vTaskDelay",
description: "",
default: true
},
{
name: "xTaskGetSchedulerState",
displayName: "xTaskGetSchedulerState",
description: "",
default: false
},
{
name: "xTaskGetCurrentTaskHandle",
displayName: "xTaskGetCurrentTaskHandle",
description: "",
default: false
},
{
name: "uxTaskGetStackHighWaterMark",
displayName: "uxTaskGetStackHighWaterMark",
description: "",
default: false
},
{
name: "xTaskGetIdleTaskHandle",
displayName: "xTaskGetIdleTaskHandle",
description: "",
default: false
},
{
name: "eTaskGetState",
displayName: "eTaskGetState",
description: "",
default: false
},
{
name: "xEventGroupSetBitFromISR",
displayName: "xEventGroupSetBitFromISR",
description: "",
default: false
},
{
name: "xTimerPendFunctionCall",
displayName: "xTimerPendFunctionCall",
description: "",
default: false
},
{
name: "xTaskAbortDelay",
displayName: "xTaskAbortDelay",
description: "",
default: false
},
{
name: "xTaskGetHandle",
displayName: "xTaskGetHandle",
description: "",
default: false
},
{
name: "xTaskResumeFromISR",
displayName: "xTaskResumeFromISR",
description: "",
default: false
},
{
name: "vTaskCleanUpResources",
displayName: "vTaskCleanUpResources",
description: "",
default: false
},
]
}
]
},
];
var moduleInstances = (inst) => {
var mods = []
mods.push({
name: "tasks",
displayName: "User Tasks Configuration",
moduleName: "/kernel/freertos_tool/task.js",
//requiredArgs : {
// :
//},
useArray: true,
collapsed: true,
})
mods.push({
name: "semaphores",
displayName: "Semaphores / Mutexes Configurations",
moduleName: "/kernel/freertos_tool/semaphore.js",
useArray: true,
collapsed: true,
})
mods.push({
name: "queues",
displayName: "Queues Configurations",
moduleName: "/kernel/freertos_tool/queue.js",
useArray: true,
collapsed: true,
})
mods.push({
name: "timers",
displayName: "Timers Configurations",
moduleName: "/kernel/freertos_tool/timer.js",
useArray: true,
collapsed: true,
})
mods.push({
name: "events",
displayName: "Events Configurations",
moduleName: "/kernel/freertos_tool/event.js",
useArray: true,
collapsed: true,
})
mods.push({
name: "tickTimer",
displayName: "Tick Timer",
description: "The CPU Timer used for FreeRTOS tick (Configured as part of xPortStartScheduler function)",
moduleName: "/driverlib/cputimer.js",
requiredArgs: {
$name : "timer2",
cputimerBase : CPUTIMER_INSTANCE[2].name,
enableInterrupt : true,
registerInterrupts : true,
startTimer : false,
timerPeriod : 100000,
timerPrescaler : 0,
clockPrescaler : "CPUTIMER_CLOCK_PRESCALER_1",
clockSource : "CPUTIMER_CLOCK_SOURCE_SYS",
timerInt : {
interruptHandler: "portTICK_ISR"
},
},
})
return mods
}
var CPUTIMER_INSTANCE = [
{ name: "CPUTIMER0_BASE", displayName: "CPUTIMER0"},
{ name: "CPUTIMER1_BASE", displayName: "CPUTIMER1"},
{ name: "CPUTIMER2_BASE", displayName: "CPUTIMER2"},
]
function sharedModuleInstances (inst)
{
var sharedModules = []
// sharedModules = sharedModules.concat([{
// name: "tickTimer",
// displayName: "Tick Timer",
// description: "The CPU Timer used for FreeRTOS tick",
// moduleName: "/driverlib/cputimer.js",
// requiredArgs: {
// $name : "timer2",
// cputimerBase : CPUTIMER_INSTANCE[2].name,
// enableInterrupt : true,
// registerInterrupts : true,
// startTimer : false,
// }
// }])
return sharedModules;
}
function onValidate(inst, validation)
{
if(inst.USE_PORT_OPTIMISED_TASK_SELECTION == true)
{
validation.logError(
"Port optimized task selection is not supported!",inst,"USE_PORT_OPTIMISED_TASK_SELECTION");
}
if(inst.APPLICATION_ALLOCATED_HEAP == false)
{
validation.logError(
"Application allocated heap should be enabled to avoid memory issues!", inst, "APPLICATION_ALLOCATED_HEAP");
}
if(inst.SUPPORT_STATIC_ALLOCATION == true)
{
validation.logInfo(
"Update minimal stack size to update Idle task stack size!", inst, "MINIMAL_STACK_SIZE");
}
if((inst.USE_TIMERS == true) && (inst.TIMER_TASK_STACK_DEPTH == 0))
{
validation.logError(
"Update timer task stack depth!", inst, "TIMER_TASK_STACK_DEPTH");
}
}
// Define the common/portable base FreeRTOS
var freeRTOSModule = {
displayName : "FREERTOS",
description : "FREERTOS",
defaultInstanceName : "myFREERTOS",
longDescription : longDescription,
maxInstances : 1,
moduleInstances : moduleInstances,
sharedModuleInstances: sharedModuleInstances,
modules: (inst) => {
var mods = []
if (inst) {
if (inst.useExternalInstall)
{
mods.push({
name: "pullInTemplateFREERTOS_SOURCE_C",
moduleName: "/kernel/freertos_tool/templates/c2000_freertos_source.c.dynamic.js",
})
mods.push({
name: "pullInTemplateFREERTOS_ASM",
moduleName: "/kernel/freertos_tool/templates/c2000_freertos_asm.asm.dynamic.js",
})
}
else
{
mods.push({
name: "pullInTemplateFREERTOS_SOURCE",
moduleName: "/kernel/freertos_tool/templates/c2000_freertos_references.dynamic.js",
})
}
return mods;
}
return [];
},
templates: {
"/kernel/freertos_tool/templates/c2000_freertos.c.xdt" : "",
"/kernel/freertos_tool/templates/c2000_freertos.h.xdt" : "",
"/kernel/freertos_tool/templates/FreeRTOSConfig.h.xdt" : "",
"/kernel/freertos_tool/templates/c2000_freertos.cmd.genlibs.xdt" : "",
"/kernel/freertos_tool/templates/c2000_freertos.opt.xdt": ""
},
config : config,
validate : onValidate,
};
exports = freeRTOSModule;