//***************************************************************************** // // freertos_demo.c - Simple FreeRTOS example. // // Copyright (c) 2012 Texas Instruments Incorporated. All rights reserved. // Software License Agreement // // Texas Instruments (TI) is supplying this software for use solely and // exclusively on TI's microcontroller products. The software is owned by // TI and/or its suppliers, and is protected under applicable copyright // laws. You may not combine this software with "viral" open-source // software in order to form a larger program. // // THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. // NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT // NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY // CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL // DAMAGES, FOR ANY REASON WHATSOEVER. // // This is part of revision 9453 of the EK-LM4F120XL Firmware Package. // //***************************************************************************** #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "driverlib/gpio.h" #include "driverlib/pin_map.h" #include "driverlib/rom.h" #include "driverlib/sysctl.h" #include "driverlib/uart.h" #include "utils/uartstdio.h" #include "led_task.h" #include "switch_task.h" #include "FreeRTOS.h" #include "task.h" #include "queue.h" #include "semphr.h" //***************************************************************************** // //! \addtogroup example_list //!

FreeRTOS Example (freertos_demo)

//! //! This application demonstrates the use of FreeRTOS on Launchpad. //! //! The application blinks the user-selected LED at a user-selected frequency. //! To select the LED press the left button and to select the frequency press //! the right button. The UART outputs the application status at 115,200 baud, //! 8-n-1 mode. //! //! This application utilizes FreeRTOS to perform the tasks in a concurrent //! fashion. The following tasks are created: //! //! - An LED task, which blinks the user-selected on-board LED at a //! user-selected rate (changed via the buttons). //! //! - A Switch task, which monitors the buttons pressed and passes the //! information to LED task. //! //! In addition to the tasks, this application also uses the following FreeRTOS //! resources: //! //! - A Queue to enable information transfer between tasks. //! //! - A Semaphore to guard the resource, UART, from access by multiple tasks at //! the same time. //! //! - A non-blocking FreeRTOS Delay to put the tasks in blocked state when they //! have nothing to do. //! //! For additional details on FreeRTOS, refer to the FreeRTOS web page at: //! http://www.freertos.org/ // //***************************************************************************** //***************************************************************************** // // The mutex that protects concurrent access of UART from multiple tasks. // //***************************************************************************** xSemaphoreHandle g_pUARTSemaphore; //***************************************************************************** // // The error routine that is called if the driver library encounters an error. // //***************************************************************************** #ifdef DEBUG void __error__(char *pcFilename, unsigned long ulLine) { } #endif //***************************************************************************** // // This hook is called by FreeRTOS when an stack overflow error is detected. // //***************************************************************************** void vApplicationStackOverflowHook(xTaskHandle *pxTask, signed char *pcTaskName) { // // This function can not return, so loop forever. Interrupts are disabled // on entry to this function, so no processor interrupts will interrupt // this loop. // while(1) { } } //***************************************************************************** // // Initialize FreeRTOS and start the initial set of tasks. // //***************************************************************************** int main(void) { // // Set the clocking to run at 50 MHz from the PLL. // ROM_SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN); // // Initialize the UART and configure it for 115,200, 8-N-1 operation. // ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); GPIOPinConfigure(GPIO_PA0_U0RX); GPIOPinConfigure(GPIO_PA1_U0TX); ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); UARTStdioInit(0); // // Print demo introduction. // UARTprintf("\n\nWelcome to the Stellaris EK-LM4F120 FreeRTOS Demo!\n"); // // Create a mutex to guard the UART. // g_pUARTSemaphore = xSemaphoreCreateMutex(); // // Create the LED task. // if(LEDTaskInit() != 0) { while(1) { } } // // Create the switch task. // if(SwitchTaskInit() != 0) { while(1) { } } // // Start the scheduler. This should not return. // vTaskStartScheduler(); // // In case the scheduler returns for some reason, print an error and loop // forever. // while(1) { } }