Line 59... |
Line 59... |
#include "spr_defs.h"
|
#include "spr_defs.h"
|
|
|
/* Scheduler header files. */
|
/* Scheduler header files. */
|
#include "FreeRTOS.h"
|
#include "FreeRTOS.h"
|
#include "task.h"
|
#include "task.h"
|
|
#include "queue.h"
|
|
|
|
/* Demo application includes. */
|
|
#include "serial.h"
|
|
#include "partest.h"
|
|
#include "flash.h"
|
|
#include "integer.h"
|
|
#include "blocktim.h"
|
|
#include "BlockQ.h"
|
|
#include "comtest2.h"
|
|
#include "dynamic.h"
|
|
|
|
/* BSP headers. */
|
|
#include "support.h"
|
|
#include "board.h"
|
#include "uart.h"
|
#include "uart.h"
|
#include "interrupts.h"
|
#include "gpio.h"
|
|
|
#define TASK_STACK_SIZE (configMINIMAL_STACK_SIZE)
|
#include "interrupts.h"
|
|
|
|
/* Demo application task priorities. */
|
|
#define mainCHECK_TASK_PRIORITY ( tskIDLE_PRIORITY + 4 )
|
|
#define mainBLOCK_Q_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
|
#define mainLED_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )
|
|
#define mainCOM_TEST_PRIORITY ( tskIDLE_PRIORITY + 1 )
|
|
#define mainLCD_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )
|
|
|
|
#define mainPRINT_STACK_SIZE ( ( unsigned short ) 64 )
|
|
#define mainDEBUG_LOG_BUFFER_SIZE ( ( unsigned short ) 256 )
|
|
|
|
/* How often should we check the other tasks? */
|
|
#define mainCHECK_TASK_CYCLE_TIME ( 3000 )
|
|
|
|
/* Baud rate used by the comtest tasks. */
|
|
#define mainCOM_TEST_BAUD_RATE ( 115200 )
|
|
|
|
/* The LED used by the comtest tasks. See the comtest.c file for more
|
|
information. */
|
|
#define mainCOM_TEST_LED ( 7 )
|
|
|
|
/*-----------------------------------------------------------*/
|
|
|
|
/*
|
|
* The task that executes at the highest priority and checks the operation of
|
|
* all the other tasks in the system. See the description at the top of the
|
|
* file.
|
|
*/
|
|
static void vCheckTask( void *pvParameters );
|
|
|
|
/*
|
|
* ST provided routine to configure the processor.
|
|
*/
|
static void prvSetupHardware(void);
|
static void prvSetupHardware(void);
|
void vDemoTask(void *pvParameters);
|
|
void vClockTask(void *pvParameters);
|
|
|
|
void vApplicationTickHook(void);
|
|
void vApplicationIdleHook(void);
|
void vApplicationIdleHook(void);
|
|
void vApplicationTickHook( void );
|
void vApplicationStackOverflowHook(xTaskHandle *pxTask, signed char *pcTaskName);
|
void vApplicationStackOverflowHook(xTaskHandle *pxTask, signed char *pcTaskName);
|
|
void vApplicationMallocFailedHook( void );
|
|
|
|
/*-----------------------------------------------------------*/
|
|
|
int main(int argc, char **argv) {
|
/* Create all the demo application tasks, then start the scheduler. */
|
|
int main( int argc, char **argv )
|
|
{
|
argc = argc;
|
argc = argc;
|
argv = argv;
|
argv = argv;
|
|
|
portBASE_TYPE delay[3] = {600, 400, 200};
|
/* Perform any hardware setup necessary. */
|
|
|
prvSetupHardware();
|
prvSetupHardware();
|
|
vParTestInitialise();
|
|
|
xTaskCreate(vDemoTask , (signed char *)"vTask0", TASK_STACK_SIZE, (void*)&delay[0], 1, (xTaskHandle)NULL);
|
/* Create the standard demo application tasks. See the WEB documentation
|
xTaskCreate(vDemoTask , (signed char *)"vTask1", TASK_STACK_SIZE, (void*)&delay[1], 2, (xTaskHandle)NULL);
|
for more information on these tasks. */
|
xTaskCreate(vDemoTask , (signed char *)"vTask2", TASK_STACK_SIZE, (void*)&delay[2], 3, (xTaskHandle)NULL);
|
vAltStartComTestTasks( mainCOM_TEST_PRIORITY, mainCOM_TEST_BAUD_RATE, mainCOM_TEST_LED );
|
xTaskCreate(vClockTask, (signed char *)"vClock", TASK_STACK_SIZE, (void*)&delay[2], 3, (xTaskHandle)NULL);
|
vStartLEDFlashTasks( mainLED_TASK_PRIORITY );
|
|
vStartIntegerMathTasks( tskIDLE_PRIORITY );
|
|
|
|
// vCreateBlockTimeTasks();
|
|
// vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );
|
|
// vStartDynamicPriorityTasks();
|
|
|
|
/* Create the tasks defined within this file. */
|
|
xTaskCreate( vCheckTask, ( signed char * ) "Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );
|
|
|
vTaskStartScheduler();
|
vTaskStartScheduler();
|
|
|
// Control will not reach here
|
/* Execution will only reach here if there was insufficient heap to
|
|
start the scheduler. */
|
return 0;
|
return 0;
|
}
|
}
|
|
/*-----------------------------------------------------------*/
|
|
|
|
static void vCheckTask( void *pvParameters )
|
|
{
|
|
static unsigned long ulErrorDetected = pdFALSE;
|
|
portTickType xLastExecutionTime;
|
|
|
void vClockTask(void *pvParameters) {
|
/* prevent compiler warning */
|
pvParameters = pvParameters;
|
pvParameters = pvParameters;
|
unsigned portBASE_TYPE ticks = xTaskGetTickCount();
|
|
|
|
int hour = 0;
|
/* Initialise xLastExecutionTime so the first call to vTaskDelayUntil()
|
int min = 0;
|
works correctly. */
|
int sec = -1;
|
xLastExecutionTime = xTaskGetTickCount();
|
while(1) {
|
|
sec += 1;
|
|
if(sec == 60) {
|
|
sec = 0;
|
|
min += 1;
|
|
}
|
|
if(min == 60) {
|
|
min = 0;
|
|
hour += 1;
|
|
}
|
|
if(hour == 24) {
|
|
hour = 0;
|
|
}
|
|
|
|
portENTER_CRITICAL();
|
for( ;; )
|
{
|
{
|
uart_print_int(hour);
|
/* Wait until it is time for the next cycle. */
|
uart_print_str(" : ");
|
vTaskDelayUntil( &xLastExecutionTime, mainCHECK_TASK_CYCLE_TIME );
|
uart_print_int(min);
|
|
uart_print_str(" : ");
|
|
uart_print_int(sec);
|
|
uart_print_str(" , ");
|
|
uart_print_int(ticks);
|
|
uart_print_str("\n\r");
|
|
}
|
|
portEXIT_CRITICAL();
|
|
|
|
vTaskDelay(1000);
|
/* Has an error been found in any of the standard demo tasks? */
|
ticks = xTaskGetTickCount();
|
|
|
if( xAreIntegerMathsTaskStillRunning() != pdTRUE )
|
|
{
|
|
ulErrorDetected = pdTRUE;
|
}
|
}
|
|
|
|
/* FIXME, xAreComTestTasksStillRunning assumed that UART TX is loopbacked to RX
|
|
but, current Or1ksim does not surrpot UART loopback. so, ignore it.*/
|
|
if( xAreComTestTasksStillRunning() != pdTRUE )
|
|
{
|
|
// ulErrorDetected = pdTRUE;
|
}
|
}
|
|
|
void vDemoTask(void *pvParameters) {
|
// if( xAreBlockTimeTestTasksStillRunning() != pdTRUE )
|
// unsigned portBASE_TYPE priority = uxTaskPriorityGet(NULL);
|
// {
|
unsigned portBASE_TYPE ticks = xTaskGetTickCount();
|
// ulErrorDetected = pdTRUE;
|
portTickType delay = *((portTickType *)pvParameters);
|
// }
|
|
|
while(1) {
|
// if( xAreBlockingQueuesStillRunning() != pdTRUE )
|
portENTER_CRITICAL();
|
// {
|
|
// ulErrorDetected = pdTRUE;
|
|
// }
|
|
|
|
// if( xAreDynamicPriorityTasksStillRunning() != pdTRUE )
|
|
// {
|
|
// ulErrorDetected = pdTRUE;
|
|
// }
|
|
|
|
if(ulErrorDetected == pdTRUE)
|
{
|
{
|
uart_print_str("vTask ");
|
// something was wrong. report negative indicator
|
uart_print_int(delay);
|
const char *message = "vCheckTask Error detected!\n\r";
|
uart_print_str(" : ");
|
vSerialPutString(NULL, (const signed char*)message, strlen(message));
|
// uart_print_int(priority);
|
|
// uart_print_str(" , ");
|
report(0xDEADBEEF);
|
uart_print_int(ticks);
|
|
uart_print_str(" \n\r");
|
|
}
|
}
|
portEXIT_CRITICAL();
|
else
|
vTaskDelay(delay);
|
{
|
ticks = xTaskGetTickCount();
|
// we have no error. report positive indicator
|
|
const char *message = "vCheckTask OK!\n\r";
|
|
vSerialPutString(NULL, (const signed char*)message, strlen(message));
|
|
|
|
report(0x00000000);
|
|
}
|
|
|
}
|
}
|
}
|
}
|
|
|
static void prvSetupHardware(void) {
|
/*-----------------------------------------------------------*/
|
|
|
|
void prvSetupHardware( void )
|
|
{
|
// UART controller use 25 Mhz Wishbone bus clock, define in board.h
|
// UART controller use 25 Mhz Wishbone bus clock, define in board.h
|
uart_init(0);
|
uart_init(0);
|
|
uart_rxint_enable(0);
|
|
|
// Initialize internal Programmable Interrupt Controller
|
// Initialize internal Programmable Interrupt Controller
|
int_init();
|
int_init();
|
|
|
|
// GPIO Initialize
|
|
gpio_init(0);
|
|
|
|
// set low 8 port is outout
|
|
set_gpio_direction(0, 0xFFFFFF00);
|
}
|
}
|
|
/*-----------------------------------------------------------*/
|
|
|
void vApplicationTickHook(void) {
|
void vApplicationIdleHook( void )
|
uart_print_str(".");
|
{
|
}
|
}
|
|
/*-----------------------------------------------------------*/
|
|
|
void vApplicationIdleHook(void) {
|
void vApplicationTickHook( void )
|
uart_print_str(" i ");
|
{
|
}
|
}
|
|
/*-----------------------------------------------------------*/
|
|
|
void vApplicationStackOverflowHook(xTaskHandle *pxTask, signed char *pcTaskName) {
|
void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed char *pcTaskName )
|
|
{
|
|
/* prevent compiler warning */
|
pxTask = pxTask;
|
pxTask = pxTask;
|
pcTaskName = pcTaskName;
|
pcTaskName = pcTaskName;
|
|
|
uart_print_str(" S \n\r");
|
report(0x00000099);
|
|
}
|
|
/*-----------------------------------------------------------*/
|
|
|
|
void vApplicationMallocFailedHook( void )
|
|
{
|
|
report(0x00000098);
|
}
|
}
|
|
/*-----------------------------------------------------------*/
|
|
|
No newline at end of file
|
No newline at end of file
|