115 lines
4.2 KiB
Plaintext
115 lines
4.2 KiB
Plaintext
|
|
%%{
|
||
|
|
let options = args.options;
|
||
|
|
let stackSize = 16*1024;
|
||
|
|
let taskPri = "configMAX_PRIORITIES-1"
|
||
|
|
let entryFunction = "example_main";
|
||
|
|
|
||
|
|
if(options && options.entryFunction)
|
||
|
|
entryFunction = options.entryFunction;
|
||
|
|
if(options && options.stackSize)
|
||
|
|
stackSize = options.stackSize;
|
||
|
|
if(options && options.taskPri)
|
||
|
|
taskPri = options.taskPri;
|
||
|
|
|
||
|
|
%%}
|
||
|
|
/*
|
||
|
|
* Copyright (C) 2018-2021 Texas Instruments Incorporated
|
||
|
|
*
|
||
|
|
* Redistribution and use in source and binary forms, with or without
|
||
|
|
* modification, are permitted provided that the following conditions
|
||
|
|
* are met:
|
||
|
|
*
|
||
|
|
* Redistributions of source code must retain the above copyright
|
||
|
|
* notice, this list of conditions and the following disclaimer.
|
||
|
|
*
|
||
|
|
* Redistributions in binary form must reproduce the above copyright
|
||
|
|
* notice, this list of conditions and the following disclaimer in the
|
||
|
|
* documentation and/or other materials provided with the
|
||
|
|
* distribution.
|
||
|
|
*
|
||
|
|
* Neither the name of Texas Instruments Incorporated nor the names of
|
||
|
|
* its contributors may be used to endorse or promote products derived
|
||
|
|
* from this software without specific prior written permission.
|
||
|
|
*
|
||
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||
|
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
|
|
*/
|
||
|
|
|
||
|
|
#include <stdlib.h>
|
||
|
|
#include <kernel/dpl/DebugP.h>
|
||
|
|
#include "ti_drivers_config.h"
|
||
|
|
#include "ti_board_config.h"
|
||
|
|
#include "FreeRTOS.h"
|
||
|
|
#include "task.h"
|
||
|
|
|
||
|
|
extern volatile uint64_t ullPortSchedularRunning;
|
||
|
|
|
||
|
|
#define MAIN_TASK_PRI (`taskPri`)
|
||
|
|
|
||
|
|
#define MAIN_TASK_SIZE (`stackSize`U/sizeof(configSTACK_DEPTH_TYPE))
|
||
|
|
StackType_t gMainTaskStack[MAIN_TASK_SIZE] __attribute__((aligned(32)));
|
||
|
|
|
||
|
|
StaticTask_t gMainTaskObj;
|
||
|
|
TaskHandle_t gMainTask;
|
||
|
|
|
||
|
|
void `entryFunction`(void *args);
|
||
|
|
|
||
|
|
void frertos_main(void *args)
|
||
|
|
{
|
||
|
|
`entryFunction`(NULL);
|
||
|
|
|
||
|
|
vTaskDelete(NULL);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
int main(void)
|
||
|
|
{
|
||
|
|
/* init SOC specific modules */
|
||
|
|
System_init();
|
||
|
|
Board_init();
|
||
|
|
|
||
|
|
if (0 == Armv8_getCoreId())
|
||
|
|
{
|
||
|
|
/* This task is created at highest priority, it should create more tasks and then delete itself */
|
||
|
|
gMainTask = xTaskCreateStatic( frertos_main, /* Pointer to the function that implements the task. */
|
||
|
|
"freertos_main", /* Text name for the task. This is to facilitate debugging only. */
|
||
|
|
MAIN_TASK_SIZE, /* Stack depth in units of StackType_t typically uint32_t on 32b CPUs */
|
||
|
|
NULL, /* We are not using the task parameter. */
|
||
|
|
MAIN_TASK_PRI, /* task priority, 0 is lowest priority, configMAX_PRIORITIES-1 is highest */
|
||
|
|
gMainTaskStack, /* pointer to stack base */
|
||
|
|
&gMainTaskObj ); /* pointer to statically allocated task object memory */
|
||
|
|
configASSERT(gMainTask != NULL);
|
||
|
|
|
||
|
|
vTaskCoreAffinitySet(gMainTask, 1);
|
||
|
|
configASSERT(gMainTask != NULL);
|
||
|
|
|
||
|
|
/* Start the scheduler to start the tasks executing. */
|
||
|
|
vTaskStartScheduler();
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
while(ullPortSchedularRunning == 0)
|
||
|
|
{
|
||
|
|
;
|
||
|
|
}
|
||
|
|
xPortStartScheduler();
|
||
|
|
}
|
||
|
|
|
||
|
|
/* The following line should never be reached because vTaskStartScheduler()
|
||
|
|
will only return if there was not enough FreeRTOS heap memory available to
|
||
|
|
create the Idle and (if configured) Timer tasks. Heap management, and
|
||
|
|
techniques for trapping heap exhaustion, are described in the book text. */
|
||
|
|
DebugP_assertNoLog(0);
|
||
|
|
|
||
|
|
return 0;
|
||
|
|
}
|