mirror of
https://github.com/azure-rtos/threadx
synced 2025-02-06 08:08:27 +08:00
158 lines
3.2 KiB
C
158 lines
3.2 KiB
C
|
|
#include <os.h>
|
|
|
|
/************************************************/
|
|
/* Azure RTOS Implementation Specific */
|
|
/************************************************/
|
|
|
|
/* Osek application definition. */
|
|
APPLICATION_INFO Application1;
|
|
|
|
/* Task definition. */
|
|
TaskType Task1;
|
|
|
|
/* Alarm definition. */
|
|
AlarmType Alarm1;
|
|
|
|
/* Resource definition. */
|
|
ResourceType Resource1;
|
|
|
|
/* Event definition. */
|
|
EventMaskType Event1;
|
|
|
|
/* Counter definition. */
|
|
CounterType SystemTimer;
|
|
|
|
/* Demo ISR definition. */
|
|
ISRType DemoISR;
|
|
|
|
/* Task body declaration. */
|
|
DeclareTask(Task1);
|
|
|
|
/* Demo ISR body declaration. */
|
|
DeclareISR(DemoISR);
|
|
|
|
/* User hooks declarations. */
|
|
static void ShutdownHook(StatusType Error);
|
|
|
|
static void PreTaskHook(void);
|
|
|
|
static void PostTaskHook(void);
|
|
|
|
static void StartupHook(void);
|
|
|
|
static void ErrorHook(StatusType Error);
|
|
|
|
|
|
/* ThreadX timer for demo ISR. */
|
|
TX_TIMER demo_isr_timer;
|
|
|
|
/* Entry function for the ThreadX timer. */
|
|
VOID demo_isr_timer_entry(ULONG arg);
|
|
|
|
|
|
/* Main function. */
|
|
int main()
|
|
{
|
|
|
|
tx_kernel_enter();
|
|
|
|
}
|
|
ULONG free_memory[64*1024 / sizeof(ULONG)];
|
|
|
|
VOID tx_application_define(VOID * first_unused_memory)
|
|
{
|
|
|
|
CHAR * pointer;
|
|
|
|
/* Put the first available address into character pointer. */
|
|
pointer = (CHAR * )free_memory;
|
|
|
|
/* Setup hook pointers (optional). */
|
|
Application1.shutdown_hook_handler = ShutdownHook;
|
|
Application1.pretask_hook_handler = PreTaskHook;
|
|
Application1.posttask_hook_handler = PostTaskHook;
|
|
Application1.startup_hook_handler = StartupHook;
|
|
Application1.error_hook_handler = ErrorHook;
|
|
|
|
/* Initialize a pointer. */
|
|
osek_initialize(pointer,&Application1);
|
|
|
|
/* Create the system counter */
|
|
SystemTimer = CreateCounter("SystemTimer", 0x7FFFFFFF, 2, 2, 0);
|
|
DefineSystemCounter(SystemTimer);
|
|
|
|
/* Create the first Task. */
|
|
Task1 = CreateTask("Task1", TaskEntry(Task1), 3, 1, 1024, NON, TRUE, EXTENDED, 0);
|
|
|
|
/* Create an event. */
|
|
Event1 = CreateEvent();
|
|
|
|
/* Register Event1 to Task1. */
|
|
RegisterEventtoTask(Event1 , Task1);
|
|
|
|
/* Create a resource. */
|
|
Resource1 = CreateResource("Resource1", STANDARD, 0);
|
|
|
|
/* Register Resource1 to Task1. */
|
|
RegisterTasktoResource(Resource1, Task1);
|
|
|
|
/* Create a demo ISR triggered by a ThreadX timer. */
|
|
DemoISR = CreateISR("Demo ISR", ISREntry(DemoISR), CATEGORY2, 1024);
|
|
|
|
/* Create a ThreadX timer to simulate an ISR. */
|
|
tx_timer_create(&demo_isr_timer, "Demo ISR timer", demo_isr_timer_entry, DemoISR,
|
|
1000, 1000, TX_AUTO_ACTIVATE);
|
|
|
|
/* Start OSEK */
|
|
StartOS(OSDEFAULTAPPMODE);
|
|
|
|
}
|
|
|
|
/* Task body. */
|
|
TASK(Task1)
|
|
{
|
|
/* Task body. */
|
|
while(1)
|
|
{
|
|
}
|
|
}
|
|
|
|
/* Demo category 2 ISR function body. */
|
|
ISR(DemoISR)
|
|
{
|
|
/* ISR body. */
|
|
}
|
|
|
|
static void ShutdownHook(StatusType Error)
|
|
{
|
|
/* Hook body. */
|
|
}
|
|
|
|
static void PreTaskHook(void)
|
|
{
|
|
/* Hook body. */
|
|
}
|
|
|
|
static void PostTaskHook(void)
|
|
{
|
|
/* Hook body. */
|
|
}
|
|
|
|
static void StartupHook(void)
|
|
{
|
|
/* Hook body. */
|
|
}
|
|
|
|
static void ErrorHook(StatusType Error)
|
|
{
|
|
/* Hook body. */
|
|
}
|
|
|
|
/* ThreadX timer handler to simulate an ISR. */
|
|
VOID demo_isr_timer_entry(ULONG arg)
|
|
{
|
|
/* Call OSEK to process the ISR. */
|
|
process_ISR2(arg);
|
|
}
|