static void App_TaskStart(void* p_arg)//负责读取传感器 { (void) p_arg; //初始化ucos时钟节拍 OS_CPU_SysTickInit(); /* Initialize the SysTick. */ //使能ucos 的统计任务 #if (OS_TASK_STAT_EN > 0) //----统计任务初始化函数 OSStatInit(); /* Determine CPU capacity. */ #endif LED_Init(); //建立其他的任务 //LED_P8x16Str(0,0,"Hello",0); //LED_P8x16Str(0,1,"Dolphin",0); //AD9850_Write_Serial(10000,0,0); App_TaskCreate(); while (1) { MPU6050_Read_GYRO(&MPU6050_g); //780us MPU6050_Read_ACCEL(&MPU6050_a); // HMC5883L_MultRead(&hmc5883l); // LED_N_STATUS(1,1); AHRS_position(&hmc5883l,&MPU6050_a,&MPU6050_g,&EulerAngle_Current);//164us for fast invsqrt 256us for 1.0 / sqrt. //350us with EulerAngle //IMU_getYawPitchRoll(&EulerAngle_Current);//178us LED_N_STATUS(1,0); OSTimeDlyHMSM(0, 0, 0, 10);//5ms //LED_N_STATUS(1,1); } }
static void App_TaskStart(void* p_arg) { (void) p_arg; //初始化ucos时钟节拍 OS_CPU_SysTickInit(); /* Initialize the SysTick. */ //使能ucos 的统计任务 #if (OS_TASK_STAT_EN > 0) //----统计任务初始化函数 OSStatInit(); /* Determine CPU capacity. */ #endif //建立其他的任务 App_TaskCreate(); while (1) { //1秒一次循环 OSTimeDlyHMSM(0, 0,10, 0); } }
/** * @brief The startup task. The uC/OS-II ticker should only be initialize * once multitasking starts. * @param p_arg Argument passed to 'App_TaskStart()' by 'OSTaskCreate()'. * @retval None */ static void App_TaskStart (void *p_arg) { (void)p_arg; /* Initialize BSP functions. */ BSP_Init(); /* Initialize the SysTick. */ OS_CPU_SysTickInit(); #if (OS_TASK_STAT_EN > 0) /* Determine CPU capacity. */ OSStatInit(); #endif /* Create application events. */ App_EventCreate(); /* Create application tasks. */ App_TaskCreate(); while (DEF_TRUE) { STM_EVAL_LEDToggle(LED4); OSTimeDlyHMSM(0, 0, 0, led_dly_cout); STM_EVAL_LEDToggle(LED6); OSTimeDlyHMSM(0, 0, 0, led_dly_cout); STM_EVAL_LEDToggle(LED5); OSTimeDlyHMSM(0, 0, 0, led_dly_cout); STM_EVAL_LEDToggle(LED3); OSTimeDlyHMSM(0, 0, 0, led_dly_cout); } }
/* ********************************************************************************************************* * App_TaskStart() * * Description : This is an example of a startup task. As mentioned in the book's text, you MUST * initialize the ticker only once multitasking has started. * * Argument(s) : p_arg is the argument passed to 'App_TaskStart()' by 'OSTaskCreateExt()'. * * Return(s) : none. * * Caller(s) : This is a task. * * Notes : (1) The first line of code is used to prevent a compiler warning because 'p_arg' is not * used. The compiler should not generate any code for this statement. ********************************************************************************************************* */ static void App_TaskStart (void *p_arg) { (void)p_arg; /* See Note #1 */ BSP_Init(); /* Initialize BSP functions */ OS_CPU_SysTickInit(); /* Initialize the SysTick */ #if (OS_TASK_STAT_EN > 0) OSStatInit(); /* Determine CPU capacity */ #endif MEM_Init(); End_Init(); GUI_Init(); TIME_Init(); MENU_Init(); App_EventCreate(); /* Create application events */ App_TaskCreate(); /* Create application tasks */ while (DEF_TRUE) { /* Task body, always written as an infinite loop */ beep(); OSTimeDlyHMSM(0, 0, 0, 50); } }
/* ********************************************************************************************************* * App_StartTask() * * Description : 系统任务初始化 * * Argument(s) : pdata. * * Return(s) : none. ********************************************************************************************************* */ static void App_StartTask(void *pdata) { (void)pdata; //创建事件 App_EventCreate(); //系统滴答设置 SysTick_Configure(); //机器人系统初始化 RobotSystemInit(); //创建任务 App_TaskCreate(); //挂起任务 OSTaskSuspend(4); //超声波避障任务 OSTaskSuspend(5); //机器人防跌落(PD: Prevent Drop) OSTaskSuspend(6); //机器人动作任务挂起和恢复 // OSTaskSuspend(7); //GLWP: Get the Legs and Waist Position//储存膝关节位置信息,用于指导机器人摆臂 // OSTaskSuspend(8); //串口接收任务 // OSTaskSuspend(9); //动作执行任务(RW: Robot Walk) // OSTaskSuspend(10); //动作步骤任务(RFS: Robot Forward Step) // OSTaskSuspend(11); //动作步骤任务(RBS: Robot Backward Step) // OSTaskSuspend(12); //右臂复位任务(RRA: Reset Right Arm) // OSTaskSuspend(13); //左臂复位任务(RLA: Reset Left Arm) // OSTaskSuspend(14); //右摆臂任务(SRA: Swing Right Arm) // OSTaskSuspend(15); //左摆臂任务(SLA: Swing Left Arm) // OSTaskSuspend(16); //摆腰任务(SW: Swing Waist) OSTaskSuspend(17); //左右手腕和头部转动任务(SteerWork:Steer control) // OSTaskSuspend(18); //眼睛任务(EE: Eye Expression) // OSTaskSuspend(19); //LED任务(LED:decorative lighting) // OSTaskSuspend(20); //LED任务(LED:decorative lighting) //挂起自己 OSTaskDel(OS_PRIO_SELF); }
static void App_TaskStart (void *p_arg) { OS_ERR os_err; (void)p_arg; /* See Note #1. */ BSP_Init(); /* Start BSP and tick initialization. */ BSP_Tick_Init(); /* Start Tick Initialization. */ BSP_UART_Init(BSP_UART_DEFAULT, /* Start UART Initialization */ BSP_BUSCLK, 9600); BSP_LCD_Init(); /* Initialize the seven-segment display panel. */ #if OS_CFG_STAT_TASK_EN > 0u OSStatTaskCPUUsageInit(&os_err); /* Compute CPU capacity with no task running */ #endif #ifdef CPU_CFG_INT_DIS_MEAS_EN CPU_IntDisMeasMaxCurReset(); #endif APP_TRACE_INFO(("Creating Application Events...\n\r")); App_ObjCreate(); /* Create Applicaton kernel objects. */ APP_TRACE_INFO(("Creating Application Tasks...\n\r")); App_TaskCreate(); /* Create Application tasks. */ while (DEF_TRUE) { /* Task body, always written as an infinite loop. */ OSTimeDlyHMSM(0, 0, 2, 0, OS_OPT_TIME_HMSM_STRICT, &os_err); // BSP_UART_Send_String(BSP_UART_1, // "Hello\n"); uart_printf("Hello world\n"); OSTimeDly(10, OS_OPT_TIME_HMSM_STRICT, &os_err); uart_printf("os_err = %d\n", os_err); // while (BSP_SW_Read (BSP_SW_1) != DEF_ON) { // OSTimeDly(1, OS_OPT_TIME_HMSM_STRICT, &os_err); // } // BSP_LED_Toggle(BSP_LED_RED); // // BSP_UART_Send_String(BSP_UART_1, // "Hello\n"); // // while (BSP_SW_Read (BSP_SW_1) == DEF_OFF) { // OSTimeDly(1, OS_OPT_TIME_HMSM_STRICT, &os_err); // } } }
static void App_TaskStart(void* p_arg) { (void) p_arg; OS_CPU_SysTickInit(); /* Initialize the SysTick. */ #if (OS_TASK_STAT_EN > 0) OSStatInit(); /* Determine CPU capacity. */ #endif App_TaskCreate(); while (1) { // LED_LED1_ON(); // OSTimeDlyHMSM(0, 0, 0, 100); // LED_LED1_OFF(); OSTimeDlyHMSM(0, 0, 0, 1); } }
/* ------------------------------------------------------------------------------------------------------ * App_TaskStart() * * Description : Task start function. * * Argument(s) : none. * */ static void App_TaskStart (void *p_arg) { (void)p_arg; OS_CPU_SysTickInit(SysCtlClockGet() / OS_TICKS_PER_SEC); /* Initialize the SysTick.*/ lwIP_init(); /* Initialise lwIP stack. */ App_EventCreate(); App_TaskCreate(); while(1) { OSTaskSuspend(OS_PRIO_SELF); /* Suspend Start Task.*/ // OSTimeDlyHMSM(0, 0, 0, 2); /* Task delay 2ms.*/ } }
static void App_TaskStart (void *p_arg) { OS_ERR os_err; (void)p_arg; /* See Note #1. */ BSP_Init(); /* Start BSP and tick initialization. */ BSP_Tick_Init(); /* Start Tick Initialization. */ BSP_LCD_Init(); /* Initialize the seven-segment display panel. */ #if OS_CFG_STAT_TASK_EN > 0u OSStatTaskCPUUsageInit(&os_err); /* Compute CPU capacity with no task running */ #endif #ifdef CPU_CFG_INT_DIS_MEAS_EN CPU_IntDisMeasMaxCurReset(); #endif APP_TRACE_INFO(("Creating Application Events...\n\r")); App_ObjCreate(); /* Create Applicaton kernel objects. */ APP_TRACE_INFO(("Creating Application Tasks...\n\r")); App_TaskCreate(); /* Create Application tasks. */ while (DEF_TRUE) { /* Task body, always written as an infinite loop. */ BSP_LED_Toggle(BSP_LED_RED); OSTimeDlyHMSM(0, 0, 0, 200, OS_OPT_TIME_HMSM_STRICT, &os_err); BSP_LED_Toggle(BSP_LED_GREEN); OSTimeDlyHMSM(0, 0, 0, 200, OS_OPT_TIME_HMSM_STRICT, &os_err); } }
/* ********************************************************************************************************* * AppTaskStart() * * Description : The startup task. The uC/OS-III ticker should only be initialize once multitasking starts. * * Argument(s) : p_arg Argument passed to 'AppTaskStart()' by 'OSTaskCreate()'. * * Return(s) : none. * * Note(s) : (1) The first line of code is used to prevent a compiler warning because 'p_arg' is not * used. The compiler should not generate any code for this statement. * * (2) Interrupts are enabled once the task starts because the I-bit of the CCR register was * set to 0 by 'OSTaskCreate()'. ********************************************************************************************************* */ static void App_TaskStart(void *p_arg) { uint16_t osVersion1, osVersion2, osVersion3; OS_ERR err = OS_ERR_NONE; (void)p_arg; /* Note(1) */ /* Initialize BSP functions */ BSPOS_Init(); /* Initialize the uC/OS-III ticker */ OS_CPU_SysTickInit(OS_CPU_SysTickClkFreq() / OS_CFG_TICK_RATE_HZ); #if (OS_TASK_STAT_EN > 0U) /* Determine CPU capacity */ OSStatInit(); #endif /* Create application tasks */ App_TaskCreate(); /* Create application mailboxes */ App_MailboxCreate(); /* Enable RS232A peripheral */ BSP_PeripheralAccess(BSP_RS232A, true); /* Initialize Serial */ RETARGET_SerialInit(); /* Map LF to CRLF */ RETARGET_SerialCrLf(1); /* Initialize LCD */ SegmentLCD_Init(true); /* Turn gecko symbol ON */ SegmentLCD_Symbol(LCD_SYMBOL_GECKO, 1); /* Turn EFM32 symbol ON */ SegmentLCD_Symbol(LCD_SYMBOL_EFM32, 1); /* Write welcome message on LCD */ SegmentLCD_Write("uC/OS-3"); osVersion3 = OSVersion( &err ); osVersion1 = osVersion3 / 10000; osVersion3 -= osVersion1 * 10000; osVersion2 = osVersion3 / 100; osVersion3 -= osVersion2 * 100; osVersion3 %= 100; /* Write welcome message on serial */ printf("\n*****************************************************************************"); printf("\n uC/OS-III v%d.%02d.%02d on Energy Micro EFM32 DVK ", osVersion1, osVersion2, osVersion3 ); printf("\n Demo Application \n"); printf("\n uC/OS-III "); printf("\n \"The real time kernel\" "); printf("\n www.micrium.com "); printf("\n\n is running on "); printf("\n\n Energy Micro EFM32 "); printf("\n \"The world's most energy friendly microcontrollers\" "); printf("\n www.energymicro.com \n"); printf("\nDescription:"); printf("\nTask1: LED blink task"); printf("\nTask2: Receives characters from serial and posts message to Task3"); printf("\nTask3: Receives message from Task2 and writes it on LCD and serial "); printf("\n*****************************************************************************\n"); printf("\nStart typing...\n"); /* Suspend this task as it is only used once in one Reset cycle */ OSTaskSuspend(&AppTaskStartTCB, &err); /* Error had occured if code execution reached this point as suspend calls the scheduler * that performs a context switch */ while (1U) ; }
/* ********************************************************************************************************* * AppTaskStart() * * Description : The startup task. The uC/OS-II ticker should only be initialize once multitasking starts. * * Argument(s) : p_arg Argument passed to 'AppTaskStart()' by 'OSTaskCreate()'. * * Return(s) : none. * * Note(s) : (1) The first line of code is used to prevent a compiler warning because 'p_arg' is not * used. The compiler should not generate any code for this statement. * * (2) Interrupts are enabled once the task starts because the I-bit of the CCR register was * set to 0 by 'OSTaskCreate()'. ********************************************************************************************************* */ static void App_TaskStart(void *p_arg) { (void)p_arg; /* Note(1) */ uint16_t osVersion1, osVersion2, osVersion3; /* Initialize BSP functions */ BSPOS_Init(); /* Initialize the uC/OS-II ticker */ OS_CPU_SysTickInit(CMU_ClockFreqGet(cmuClock_HFPER)/OS_TICKS_PER_SEC); #if (OS_TASK_STAT_EN > 0) /* Determine CPU capacity */ OSStatInit(); #endif /* Create application tasks */ App_TaskCreate(); /* Create application mailboxes */ App_MailboxCreate(); /* Initialize LCD */ SegmentLCD_Init(true); /* Turn gecko symbol ON */ SegmentLCD_Symbol(LCD_SYMBOL_GECKO, 1); /* Turn EFM32 symbol ON */ SegmentLCD_Symbol(LCD_SYMBOL_EFM32, 1); /* Write welcome message on LCD */ SegmentLCD_Write("uC/OS-2"); /* As USART connectors are not available on the STK by default, * therefore printf() functions are turned off. * Uncomment the macro definition in includes.h if serial * is connected to your STK board (USART1 or LEUART0)! */ #ifdef USART_CONNECTED /* Initialize serial port */ RETARGET_SerialInit(); RETARGET_SerialCrLf(1); osVersion3 = OSVersion(); osVersion1 = osVersion3 / 10000; osVersion3 -= osVersion1 * 10000; osVersion2 = osVersion3 / 100; osVersion3 -= osVersion2 * 100; osVersion3 %= 100; /* Write welcome message on serial */ printf("\n*****************************************************************************"); printf("\n uC/OS-II v%d.%02d.%02d on Silicon Labs EFM32WG STK ", osVersion1, osVersion2, osVersion3 ); printf("\n Demo Application \n"); printf("\n uC/OS-II "); printf("\n \"The real time kernel\" "); printf("\n www.micrium.com "); printf("\n\n is running on "); printf("\n\n Silicon Labs EFM32 "); printf("\n \"The world's most energy friendly microcontrollers\" "); printf("\n www.silabs.com \n"); printf("\nDescription:"); printf("\nTask1: LED blink task"); printf("\nTask2: Receives characters from serial and posts message to Task3"); printf("\nTask3: Receives message from Task2 and writes it on LCD and serial"); printf("\n*****************************************************************************\n"); printf("\nStart typing...\n"); #endif /* end of #ifndef USART_CONNECTED */ /* Suspend this task as it is only used once in one Reset cycle */ OSTaskSuspend(APP_CFG_TASK_START_PRIO); while (1) {/* endless loop of Start task */ ; } }
/* ********************************************************************************************************* * main() * * Description : This is the standard entry point for C code. It is assumed that your code will call * main() once you have performed all necessary initialization. * * Argument(s) : none. * * Return(s) : none. ********************************************************************************************************* */ int main(void) { uint16_t osVersion1, osVersion2, osVersion3; #if (OS_TASK_NAME_EN > 0) CPU_INT08U err; #endif /* Disable all interrupts until we are ready to accept * them. */ CPU_IntDis(); /* Chip errata */ CHIP_Init(); /* setup SW0 for energyAware Profiler */ setupSWO(); /* Initialize BSP functions */ BSPOS_Init(); /* Initialize "uC/OS-II, The Real-Time Kernel". */ OSInit(); /* Initialize the uC/OS-II ticker */ OS_CPU_SysTickInit(CMU_ClockFreqGet(cmuClock_HFPER)/OS_TICKS_PER_SEC); #if (OS_TASK_STAT_EN > 0) /* Determine CPU capacity */ OSStatInit(); #endif /* Create application tasks */ App_TaskCreate(); /* Create application mailboxes */ App_MailboxCreate(); /* Initialize LCD */ SegmentLCD_Init(true); /* Turn gecko symbol ON */ SegmentLCD_Symbol(LCD_SYMBOL_GECKO, 1); /* Turn EFM32 symbol ON */ SegmentLCD_Symbol(LCD_SYMBOL_EFM32, 1); /* Write welcome message on LCD */ SegmentLCD_Write("uC/OS-2"); /* As USART connectors are not available on the STK by default, * therefore printf() functions are turned off. * Uncomment the macro definition in includes.h if serial * is connected to your STK board (USART1 or LEUART0)! */ #ifdef USART_CONNECTED /* Initialize */ RETARGET_SerialInit(); RETARGET_SerialCrLf(1); osVersion3 = OSVersion(); osVersion1 = osVersion3 / 10000; osVersion3 -= osVersion1 * 10000; osVersion2 = osVersion3 / 100; osVersion3 -= osVersion2 * 100; osVersion3 %= 100; /* Write welcome message on serial */ printf("\n*****************************************************************************"); printf("\n uC/OS-II v%d.%02d.%02d on Silicon Labs EFM32TG STK ", osVersion1, osVersion2, osVersion3 ); printf("\n Demo Application \n"); printf("\n uC/OS-II "); printf("\n \"The real time kernel\" "); printf("\n www.micrium.com "); printf("\n\n is running on "); printf("\n\n Silicon Labs EFM32 "); printf("\n \"The world's most energy friendly microcontrollers\" "); printf("\n www.silabs.com \n"); printf("\nDescription:"); printf("\nTask1: LED blink task"); printf("\nTask2: Receives characters from serial and posts message to Task3"); printf("\nTask3: Receives message from Task2 and writes it on LCD and serial "); printf("\n*****************************************************************************\n"); printf("\nStart typing...\n"); #endif /* end of #ifndef USART_CONNECTED */ /* Start multitasking (i.e. give control to uC/OS-II). */ OSStart(); /* OSStart() never returns, serious error had occured if * code execution reached this point */ while(1) ; }
/* ********************************************************************************************************* * AppTaskStart() * * Description : The startup task. The uC/OS-III ticker should only be initialize once multitasking starts. * * Argument(s) : p_arg Argument passed to 'AppTaskStart()' by 'OSTaskCreate()'. * * Return(s) : none. * * Note(s) : (1) The first line of code is used to prevent a compiler warning because 'p_arg' is not * used. The compiler should not generate any code for this statement. * * (2) Interrupts are enabled once the task starts because the I-bit of the CCR register was * set to 0 by 'OSTaskCreate()'. ********************************************************************************************************* */ static void App_TaskStart(void *p_arg) { uint16_t osVersion1, osVersion2, osVersion3; OS_ERR err = OS_ERR_NONE; (void)p_arg; /* Note(1) */ /* Initialize BSP functions */ BSPOS_Init(); /* Initialize the uC/OS-III ticker */ OS_CPU_SysTickInit(OS_CPU_SysTickClkFreq() / OS_CFG_TICK_RATE_HZ); #if (OS_TASK_STAT_EN > 0U) /* Determine CPU capacity */ OSStatInit(); #endif /* Create application tasks */ App_TaskCreate(); /* Create application mailboxes */ App_MailboxCreate(); /* Initialize LCD */ SegmentLCD_Init(true); /* Turn gecko symbol ON */ SegmentLCD_Symbol(LCD_SYMBOL_GECKO, 1); /* Turn EFM32 symbol ON */ SegmentLCD_Symbol(LCD_SYMBOL_EFM32, 1); /* Write welcome message on LCD */ SegmentLCD_Write("uC/OS-3"); /* As USART connectors are not available on the STK by default, * therefore printf() functions are turned off. * Uncomment the macro definition in includes.h if serial * is connected to your STK board (USART1 or LEUART0)! */ #ifdef USART_CONNECTED /* Initialize serial port */ RETARGET_SerialInit(); RETARGET_SerialCrLf(1); osVersion3 = OSVersion( &err ); osVersion1 = osVersion3 / 10000; osVersion3 -= osVersion1 * 10000; osVersion2 = osVersion3 / 100; osVersion3 -= osVersion2 * 100; osVersion3 %= 100; /* Write welcome message on serial */ printf("\n*****************************************************************************"); printf("\n uC/OS-III v%d.%02d.%02d on Energy Micro EFM32 STK ", osVersion1, osVersion2, osVersion3 ); printf("\n Demo Application \n"); printf("\n uC/OS-III "); printf("\n \"The real time kernel\" "); printf("\n www.micrium.com "); printf("\n\n is running on "); printf("\n\n Energy Micro EFM32 "); printf("\n \"The world's most energy friendly microcontrollers\" "); printf("\n www.energymicro.com \n"); printf("\nDescription:"); printf("\nTask1: LED blink task"); printf("\nTask2: Receives characters from serial and posts message to Task3"); printf("\nTask3: Receives message from Task2 and writes it on LCD and serial."); printf("\n*****************************************************************************\n"); printf("\nStart typing...\n"); #endif /* end of #ifndef USART_CONNECTED */ /* Suspend this task as it is only used once in one Reset cycle */ OSTaskSuspend(&AppTaskStartTCB, &err); /* Error had occured if code execution reached this point as suspend calls the scheduler * that performs a context switch */ while (1U) ; }
/* ********************************************************************************************************* * AppTaskStart() * * Description : The startup task. The uC/OS-II ticker should only be initialize once multitasking starts. * * Argument(s) : p_arg Argument passed to 'AppTaskStart()' by 'OSTaskCreate()'. * * Return(s) : none. * * Note(s) : (1) The first line of code is used to prevent a compiler warning because 'p_arg' is not * used. The compiler should not generate any code for this statement. * * (2) Interrupts are enabled once the task starts because the I-bit of the CCR register was * set to 0 by 'OSTaskCreate()'. ********************************************************************************************************* */ static void App_TaskStart(void *p_arg) { (void)p_arg; /* Note(1) */ uint16_t osVersion1, osVersion2, osVersion3; /* Use 48MHZ HFXO as core clock frequency */ CMU_ClockSelectSet(cmuClock_HF, cmuSelect_HFXO); /* Initialize DK board register access */ /* This demo currently only works in EBI mode */ BSP_Init(BSP_INIT_DEFAULT); /* If first word of user data page is non-zero, enable eA Profiler trace */ BSP_TraceProfilerSetup(); /* Setup SysTick Timer for 10 msec interrupts */ if (SysTick_Config(CMU_ClockFreqGet(cmuClock_CORE) / 1000)) { while (1) ; } /* Initialize the uC/OS-II ticker */ OS_CPU_SysTickInit(CMU_ClockFreqGet(cmuClock_HFPER)/OS_TICKS_PER_SEC); #if (OS_TASK_STAT_EN > 0) /* Determine CPU capacity */ OSStatInit(); #endif /* Create application tasks */ App_TaskCreate(); /* Create application mailboxes */ App_MailboxCreate(); /* Enable EFM32LG_DK3650 RS232/UART switch */ BSP_PeripheralAccess(BSP_RS232_UART, true); UART1_SerialInit(); UART1_SerialCrLf(1); /* Initialize the TFT stdio retarget module. */ RETARGET_TftInit(); RETARGET_TftCrLf(0); osVersion3 = OSVersion(); osVersion1 = osVersion3 / 10000; osVersion3 -= osVersion1 * 10000; osVersion2 = osVersion3 / 100; osVersion3 -= osVersion2 * 100; osVersion3 %= 100; printf("\n*************************************"); printf("\n uC/OS-II v%d.%02d.%02d on EFM32 DK ", osVersion1, osVersion2, osVersion3 ); printf("\n Demo Application \n"); printf("\n uC/OS-II "); printf("\n \"The real time kernel\" "); printf("\n www.micrium.com "); printf("\n is running on "); printf("\n Silicon Labs EFM32 "); printf("\n www.silabs.com \n"); printf("\nDescription:"); printf("\n\nTask1: LED blink task"); printf("\n\nTask2: Receives characters from serial and posts message to Task3"); printf("\n\nTask3: Receives message from Task2 and writes it on screen"); printf("\n\n**************************************\n"); printf("\nStart typing...\n"); /* Suspend this task as it is only used once in one Reset cycle */ OSTaskSuspend(APP_CFG_TASK_START_PRIO); while (1) {/* endless loop of Start task */ ; } }
/* ********************************************************************************************************* * AppTaskStart() * * Description : The startup task. The uC/OS-II ticker should only be initialize once multitasking starts. * * Argument(s) : p_arg Argument passed to 'AppTaskStart()' by 'OSTaskCreate()'. * * Return(s) : none. * * Note(s) : (1) The first line of code is used to prevent a compiler warning because 'p_arg' is not * used. The compiler should not generate any code for this statement. * * (2) Interrupts are enabled once the task starts because the I-bit of the CCR register was * set to 0 by 'OSTaskCreate()'. ********************************************************************************************************* */ static void App_TaskStart(void *p_arg) { (void)p_arg; /* Note(1) */ uint16_t osVersion1, osVersion2, osVersion3; /* Initialize BSP functions */ BSPOS_Init(); /* Initialize the uC/OS-II ticker */ OS_CPU_SysTickInit(CMU_ClockFreqGet(cmuClock_HFPER)/OS_TICKS_PER_SEC); #if (OS_TASK_STAT_EN > 0) /* Determine CPU capacity */ OSStatInit(); #endif /* Create application mailboxes */ App_MailboxCreate(); /* Enable RS232A peripheral */ BSP_PeripheralAccess(BSP_RS232_UART, true); /* Initialize LCD */ SegmentLCD_Init(true); /* Turn gecko symbol ON */ SegmentLCD_Symbol(LCD_SYMBOL_GECKO, 1); /* Turn EFM32 symbol ON */ SegmentLCD_Symbol(LCD_SYMBOL_EFM32, 1); /* Write welcome message on LCD */ SegmentLCD_Write("uC/OS-2"); osVersion3 = OSVersion(); osVersion1 = osVersion3 / 10000; osVersion3 -= osVersion1 * 10000; osVersion2 = osVersion3 / 100; osVersion3 -= osVersion2 * 100; osVersion3 %= 100; /* Write welcome message on serial */ printf("\n*****************************************************************************"); printf("\n uC/OS-II v%d.%02d.%02d on Silicon Labs EFM32G_DK3550 ", osVersion1, osVersion2, osVersion3 ); printf("\n Demo Application \n"); printf("\n uC/OS-II "); printf("\n \"The real time kernel\" "); printf("\n www.micrium.com "); printf("\n\n is running on "); printf("\n\n Silicon Labs EFM32 "); printf("\n \"The world's most energy friendly microcontrollers\" "); printf("\n www.silabs.com \n"); printf("\nDescription:"); printf("\nTask1: LED blink task"); printf("\nTask2: Receives characters from serial and posts message to Task3"); printf("\nTask3: Receives message from Task2 and writes it on LCD and serial."); printf("\n*****************************************************************************\n"); printf("\nStart typing...\n"); /* Create application tasks */ App_TaskCreate(); /* Suspend this task as it is only used once in one Reset cycle */ OSTaskSuspend(APP_CFG_TASK_START_PRIO); while (1) {/* endless loop of Start task */ ; } }
/* ********************************************************************************************************* * AppTaskStart() * * Description : The startup task. The uC/OS-III ticker should only be initialize once multitasking starts. * * Argument(s) : p_arg Argument passed to 'AppTaskStart()' by 'OSTaskCreate()'. * * Return(s) : none. * * Note(s) : (1) The first line of code is used to prevent a compiler warning because 'p_arg' is not * used. The compiler should not generate any code for this statement. * * (2) Interrupts are enabled once the task starts because the I-bit of the CCR register was * set to 0 by 'OSTaskCreate()'. ********************************************************************************************************* */ static void App_TaskStart(void *p_arg) { uint16_t osVersion1, osVersion2, osVersion3; OS_ERR err = OS_ERR_NONE; (void)p_arg; /* Note(1) */ /* Use 48MHZ HFXO as core clock frequency */ CMU_ClockSelectSet(cmuClock_HF, cmuSelect_HFXO); /* Initialize DK board register access */ /* This demo currently only works in EBI mode */ BSP_Init(BSP_INIT_DEFAULT); /* If first word of user data page is non-zero, enable eA Profiler trace */ BSP_TraceProfilerSetup(); /* Initialize the uC/OS-III ticker */ OS_CPU_SysTickInit(CMU_ClockFreqGet(cmuClock_CORE) / OS_CFG_TICK_RATE_HZ); #if (OS_TASK_STAT_EN > 0U) /* Determine CPU capacity */ OSStatInit(); #endif /* Create application tasks */ App_TaskCreate(); /* Create application mailboxes */ App_MailboxCreate(); UART1_SerialInit(); UART1_SerialCrLf(1); /* Initialize tft serial */ RETARGET_SerialInit(); osVersion3 = OSVersion( &err ); osVersion1 = osVersion3 / 10000; osVersion3 -= osVersion1 * 10000; osVersion2 = osVersion3 / 100; osVersion3 -= osVersion2 * 100; osVersion3 %= 100; printf("\n*************************************"); printf("\n uC/OS-III v%d.%02d.%02d on EFM32 DK ", osVersion1, osVersion2, osVersion3 ); printf("\n Demo Application \n"); printf("\n uC/OS-III "); printf("\n \"The real time kernel\" "); printf("\n www.micrium.com "); printf("\n is running on "); printf("\n Energy Micro EFM32 "); printf("\n www.energymicro.com \n"); printf("\nDescription:"); printf("\n\nTask1: LED blink task"); printf("\n\nTask2: Receives characters from serial and posts message to Task3"); printf("\n\nTask3: Receives message from Task2 and writes it on screen"); printf("\n\n**************************************\n"); printf("\nStart typing...\n"); /* Suspend this task as it is only used once in one Reset cycle */ OSTaskSuspend(&AppTaskStartTCB, &err); /* Error had occured if code execution reached this point as suspend calls the scheduler * that performs a context switch */ while (1U) ; }