void Task1_Task(void * ptr_args) { INT8U err; TASK1_MBOX_TypeDef * mbox; // // The first task to run must call this function // OS_CPU_SysTickInit(1000); LEDS_Off(LED_0); LEDS_Off(LED_1); for (;;){ mbox = (TASK1_MBOX_TypeDef *) OSMboxPend(task1_mbox, OS_MBOX_TIMEOUT_MAX, &err); if (err == OS_ERR_NONE){ if (mbox->action == 0x01){ LEDS_Toggle(LED_0); }else{ LEDS_Toggle(LED_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 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); } }
/* ********************************************************************************************************* * 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); } }
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); } }
/************************************************************************* * 野火嵌入式开发工作室 * * 函数名称:Task_Start * 功能说明:启动任务,初始化滴答时钟 * 参数说明:p_arg 没用 * 函数返回:无 * 修改时间:2012-2-10 * 备 注: *************************************************************************/ void Task_Start(void *p_arg) { /**************** 初始化 系统滴答时钟 :用于定时任务调度****************/ u32 cnts; cnts = core_clk_mhz * ( (u32)1000000u / (u32)OS_TICKS_PER_SEC ); /* Determine nbr SysTick increments. */ OS_CPU_SysTickInit(cnts); /* Init uC/OS periodic time src (SysTick). */ #if (OS_TASK_STAT_EN > 0) /* 开启统计任务 */ OSStatInit(); #endif (void)p_arg; // 'p_arg' 并没有用到,防止编译器提示警告 /******************* 用户任务区 ************************/ u32 i = 0; OLED_Init(); OLED_P6x8Str(0,0,"This is a test",0); while(1) { sprintf(mystr,"count:%d",i++); OLED_P6x8Str(0,3,mystr,0); OSTimeDlyHMSM(0, 0, 0, 10); } }
/** * @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); } }
void main(void) { OS_ERR error; HAL_Init(); TP_USART1.init(0); Debug_Init( (struct TRANSPORT_IF*)&TP_USART1 ); CPU_IntDis(); OSInit(&error); Launcher_Exec(); ///////////////////////////////////////////////////////////////// RCC_ClocksTypeDef RCC_Clocks; RCC_GetClocksFreq(&RCC_Clocks); OS_CPU_SysTickInit( (RCC_Clocks.HCLK_Frequency/OSCfg_TickRate_Hz) - 1 ); ///////////////////////////////////////////////////////////////// OSStart(&error); }
void BSP_OSTickInit (void) { CPU_INT32U cpu_clk_freq; cpu_clk_freq = BSP_ClkFreqGet(BSP_CLK_ID_HCLK); /* Determine SysTick reference freq. */ OS_CPU_SysTickInit(cpu_clk_freq); /* Init uC/OS periodic time src (SysTick). */ }
static void startup_task() { //RCC_ClocksTypeDef rcc_clocks; //RCC_GetClocksFreq(&rcc_clocks); //SysTick_Config(rcc_clocks.HCLK_Frequency / OS_TICKS_PER_SEC); led_config(); OS_CPU_SysTickInit(); OSTaskCreate(task1, (void *)0, &task1_stk[TASK1_STK_SIZE - 1], 7); OSTaskCreate(task2, (void *)0, &task2_stk[TASK2_STK_SIZE - 1], 6); //OSTaskDel(OS_PRIO_SELF); }
/* ********************************************************************************************************* * BSP_Tick_Init() * * Description : Initialize all the peripherals that required OS Tick services (OS initialized) * * Argument(s) : none. * * Return(s) : none. * * Caller(s) : Application. * * Note(s) : none. ********************************************************************************************************* */ void BSP_Tick_Init (void) { CPU_INT32U cpu_clk_freq; CPU_INT32U cnts; cpu_clk_freq = BSP_CPU_ClkFreq(); /* Determine SysTick reference freq. */ #if (OS_VERSION >= 30000u) cnts = cpu_clk_freq / (CPU_INT32U)OSCfg_TickRate_Hz; /* Determine nbr SysTick increments. */ #else cnts = cpu_clk_freq / (CPU_INT32U)OS_TICKS_PER_SEC; /* Determine nbr SysTick increments. */ #endif OS_CPU_SysTickInit(cnts); /* Init uC/OS periodic time src (SysTick). */ }
void BSP_Start (void) { CPU_INT32U cnts; CPU_INT32U cpu_freq; cpu_freq = CSP_PM_CPU_ClkFreqGet(); /* Get the CPU clock */ #if (OS_VERSION >= 30000u) cnts = (cpu_freq / OSCfg_TickRate_Hz); /* Calculate the number of SysTick counts */ #else cnts = (cpu_freq / OS_TICKS_PER_SEC); #endif OS_CPU_SysTickInit(cnts); /* Call the Generic OS Systick initialization */ }
/* ********************************************************************************************************* * BSP_Tick_Init() * * Description : Initialize all the peripherals that required OS Tick services (OS initialized) * * Argument(s) : none. * * Return(s) : none. * * Caller(s) : Application. * * Note(s) : none. ********************************************************************************************************* */ void BSP_Tick_Init (void) { CPU_INT32U cpu_clk_freq; CPU_INT32U cnts; cpu_clk_freq = BSP_CPU_ClkFreq(); /* Determine SysTick reference freq. */ #if (OS_VERSION >= 30000u) cnts = cpu_clk_freq / (CPU_INT32U)OSCfg_TickRate_Hz; /* Determine nbr SysTick increments. */ #else cnts = cpu_clk_freq / (CPU_INT32U)OS_TICKS_PER_SEC; /* Determine nbr SysTick increments. */ #endif OS_CPU_SysTickInit(cnts); /* 这里默认的是最高优先级,根据实际情况修改 */ // SysTick_Config(cnts); //这里默认的是最低优先级 }
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); } }
/* QF callbacks ============================================================*/ void QF_onStartup(void) { QF_CRIT_STAT_TYPE cpu_sr; QF_CRIT_ENTRY(cpu_sr); /* DISABLED interrupts */ /* initialize the system clock tick... */ OS_CPU_SysTickInit(SystemCoreClock / OS_TICKS_PER_SEC); /* set priorities of ALL ISRs used in the system */ NVIC_SetPriority(EXTI0_IRQn, 0xFFU); /* ... */ /* enable IRQs in the NVIC... */ NVIC_EnableIRQ(EXTI0_IRQn); /* NOTE: do not exit the critical section and leave interrupts DISABLED */ (void)cpu_sr; /* avoid compiler warning about unused variable */ }
void AppTaskStart (void *p_arg) { CPU_INT32U cpu_clk_freq; CPU_INT32U cnts; (void)p_arg; cpu_clk_freq = BSP_CPU_ClkFreq(); /* Determine SysTick reference freq. */ cnts = cpu_clk_freq / (CPU_INT32U)OSCfg_TickRate_Hz; /* Determine nbr SysTick increments */ OS_CPU_SysTickInit(cnts); /* Init uC/OS periodic time src (SysTick). */ BSP_Init(); /* Initialize BSP functions */ main_loop(); }
/* ------------------------------------------------------------------------------------------------------ * 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 AppTaskStart (void *p_arg) { CPU_INT32U clk_freq; CPU_INT32U ulPHYMR0; CPU_INT32U cnts; OS_ERR err; (void)&p_arg; BSP_Init(); /* Initialize BSP functions */ CPU_Init(); /* Initialize the uC/CPU services */ SysCtlPeripheralEnable(SYSCTL_PERIPH_ETH); /* Enable and Reset the Ethernet Controller. */ SysCtlPeripheralReset(SYSCTL_PERIPH_ETH); ulPHYMR0 = EthernetPHYRead(ETH_BASE, PHY_MR0); /* Power Down PHY */ EthernetPHYWrite(ETH_BASE, PHY_MR0, ulPHYMR0 | PHY_MR0_PWRDN); SysCtlPeripheralDeepSleepDisable(SYSCTL_PERIPH_ETH); clk_freq = BSP_CPUClkFreq(); /* Determine SysTick reference freq. */ cnts = clk_freq / (CPU_INT32U)OSCfg_TickRate_Hz; /* Determine nbr SysTick increments */ OS_CPU_SysTickInit(cnts); /* Init uC/OS periodic time src (SysTick). */ CPU_TS_TmrFreqSet(clk_freq); // #if(MICROSD_EN == 1) /* Mount the file system, using logical disk 0 */ //f_mount(0, &g_sFatFs); /* Create a new log.txt file */ //CmdLineProcess(g_cCmdBuf); // #endif /* Enable Wheel ISR Interrupt */ AppRobotMotorDriveSensorEnable(); /* Call your API here */ OSTaskCreateNew((OS_TCB *)&AppTaskOneTCB, (CPU_CHAR *)"App Task One", (OS_TASK_PTR ) AppTaskOne, (void *) 0, (OS_PRIO ) APP_TASK_ONE_PRIO, (CPU_STK *)&AppTaskOneStk[0], (CPU_STK_SIZE) APP_TASK_ONE_STK_SIZE / 10u, (CPU_STK_SIZE) APP_TASK_ONE_STK_SIZE, (OS_MSG_QTY ) 0u, (OS_TICK ) 0u, (void *)(CPU_INT32U) 1, (OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), (OS_ERR *)&err, (OS_PERIOD) 5000); OSTaskCreateNew((OS_TCB *)&AppTaskTwoTCB, (CPU_CHAR *)"App Task Two", (OS_TASK_PTR ) AppTaskTwo, (void *) 0, (OS_PRIO ) APP_TASK_TWO_PRIO, (CPU_STK *)&AppTaskTwoStk[0], (CPU_STK_SIZE) APP_TASK_TWO_STK_SIZE / 10u, (CPU_STK_SIZE) APP_TASK_TWO_STK_SIZE, (OS_MSG_QTY ) 0u, (OS_TICK ) 0u, (void *) (CPU_INT32U) 2, (OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), (OS_ERR *)&err,(OS_PERIOD) 7000); OSTaskCreateNew((OS_TCB *)&AppTaskThreeTCB, (CPU_CHAR *)"App Task Three", (OS_TASK_PTR ) AppTaskThree, (void *) 0, (OS_PRIO ) APP_TASK_THREE_PRIO, (CPU_STK *)&AppTaskThreeStk[0], (CPU_STK_SIZE) APP_TASK_THREE_STK_SIZE / 10u, (CPU_STK_SIZE) APP_TASK_THREE_STK_SIZE, (OS_MSG_QTY ) 0u, (OS_TICK ) 0u, (void *)(CPU_INT32U) 3, (OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), (OS_ERR *)&err, (OS_PERIOD) 7000); OSTaskCreateNew((OS_TCB *)&AppTaskFourTCB, (CPU_CHAR *)"App Task Four", (OS_TASK_PTR ) AppTaskFour, (void *) 0, (OS_PRIO ) APP_TASK_FOUR_PRIO, (CPU_STK *)&AppTaskFourStk[0], (CPU_STK_SIZE) APP_TASK_FOUR_STK_SIZE / 10u, (CPU_STK_SIZE) APP_TASK_FOUR_STK_SIZE, (OS_MSG_QTY ) 0u, (OS_TICK ) 0u, (void *) (CPU_INT32U) 4, (OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), (OS_ERR *)&err,(OS_PERIOD) 10000); OSTaskDel((OS_TCB *)0, &err); }
/*FUNCTION********************************************************************** * * Function Name : OSA_Init * Description : This function is used to setup the basic services, it should * be called first in function main. Return kStatus_OSA_Success if services * are initialized successfully, otherwise return kStatus_OSA_Error. * *END**************************************************************************/ osa_status_t OSA_Init(void) { OS_ERR err; OSInit(&err); if (OS_ERR_NONE == err) { #if OS_CFG_SCHED_ROUND_ROBIN_EN > 0u /* Enable task round robin. */ OSSchedRoundRobinCfg((CPU_BOOLEAN)1, 0, &err); #endif OS_CPU_SysTickInit(SystemCoreClock/(uint32_t)OSCfg_TickRate_Hz); return kStatus_OSA_Success; } else { return kStatus_OSA_Error; } }
static void AppTaskStart (void *p_arg) { CPU_INT32U cpu_clk_freq; CPU_INT32U cnts; OS_ERR err; CPU_TS ts; (void)p_arg; OSSemCreate(&AppSem, "Test Sem", 0, &err); BSP_Init(); /* Initialize BSP functions */ CPU_Init(); /* Initialize the uC/CPU services */ cpu_clk_freq = BSP_CPU_ClkFreq(); /* Determine SysTick reference freq. */ cnts = cpu_clk_freq / (CPU_INT32U)OSCfg_TickRate_Hz; /* Determine nbr SysTick increments */ OS_CPU_SysTickInit(cnts); /* Init uC/OS periodic time src (SysTick). */ #if OS_CFG_STAT_TASK_EN > 0u OSStatTaskCPUUsageInit(&err); /* Compute CPU capacity with no task running */ #endif CPU_IntDisMeasMaxCurReset(); BSP_LED_Off(0); while (DEF_TRUE) { /* Task body, always written as an infinite loop. */ BSP_LED_Toggle(0); #if 0 OSTimeDlyHMSM(0, 0, 0, 100, OS_OPT_TIME_HMSM_STRICT, &err); #endif OSSemPend(&AppSem, 100, OS_OPT_PEND_BLOCKING, &ts, &err); } }
static void AppTaskStart (void *p_arg) { CPU_INT32U clk_freq; CPU_INT32U cnts; OS_ERR err; (void)&p_arg; BSP_Init(); /* Initialize BSP functions */ CPU_Init(); /* Initialize the uC/CPU services */ clk_freq = BSP_CPU_ClkFreq(); /* Determine SysTick reference freq. */ cnts = clk_freq / (CPU_INT32U)OSCfg_TickRate_Hz; /* Determine nbr SysTick increments */ OS_CPU_SysTickInit(cnts); /* Init uC/OS periodic time src (SysTick). */ CPU_TS_TmrFreqSet(clk_freq); #if (OS_CFG_STAT_TASK_EN > 0u) OSStatTaskCPUUsageInit(&err); /* Compute CPU capacity with no task running */ #endif CPU_IntDisMeasMaxCurReset(); App_ProbeInit(); BSP_LED_On(1); BSP_LED_Off(2); AppDisplayTaskCreate(); while (DEF_ON) { /* Task body, always written as an infinite loop. */ OSTimeDlyHMSM(0u, 0u, 1u, 0u, OS_OPT_TIME_HMSM_STRICT, &err); BSP_LED_Toggle(0); /* Toggle both LEDs every second. */ bLED[0] ^= DEF_TRUE; bLED[1] ^= DEF_TRUE; } }
int main(void) { OS_CPU_SysTickInit(CLKPWR_GetCLK(CLKPWR_CLKTYPE_CPU) / 1000 - 1); Board_Init(); //KeyInit(); GUI_Init(); Display_Logo(); /* init phy */ PHY_Init(optionSaveStruct.ipConfig.mac); M25P128_SSP_Init(); GT21L16S2W_SSP_Init(); #if FRMB_DEBUG LPC_Uart_Init(1200*(0x01<<optionSaveStruct.uartConfig[2]),1200*(0x01<<optionSaveStruct.uartConfig[3]),1200*(0x01<<optionSaveStruct.uartConfig[4]),1200*(0x01<<optionSaveStruct.uartConfig[5])); #endif System_Time_Init(); /* Init RTC */ OSInit(); OSTaskCreate ( TaskStart,(void *)0,&GstkStart[TASK_START_STK_SIZE-1],TASK_START_PRIO ); /* Initialize the start task */ /* Start OS Schedule */ OSStart(); /* Start uC/OS-II ??uC/OS-II */ return(0); }
static void AppTaskStart (void *p_arg) { CPU_INT32U cpu_clk_freq; CPU_INT32U cnts; OS_ERR err; (void)p_arg; BSP_Init(); /* Initialize BSP functions */ CPU_Init(); cpu_clk_freq = BSP_CPU_ClkFreq(); cnts = cpu_clk_freq / (CPU_INT32U)OSCfg_TickRate_Hz;/* Determine nbr SysTick increments */ OS_CPU_SysTickInit(cnts); /* Init uC/OS periodic time src (SysTick). */ #if OS_CFG_STAT_TASK_EN > 0u OSStatTaskCPUUsageInit(&err); /* Compute CPU capacity with no task running */ #endif CPU_IntDisMeasMaxCurReset(); //init USART1 BSP_Ser_Init(9600); BSP_Ser_WrStr("start"); //init ADC1, ACC sensor TERM_init_adc(); //init PWM TERM_init_pwm(); //AppTaskCreate(); /* Create application tasks */ TERM_createTask(); }
static void App_TaskStart (void *p_arg) { (void)p_arg; /* Initialize BSP functions. */ OS_CPU_SysTickInit(); /* Initialize the SysTick. */ BSP_Init(); #if (OS_TASK_STAT_EN > 0) OSStatInit(); /* Determine CPU capacity. */ #endif /* 在此可创建事件 */ /* 在此可创建其他任务 */ //App_TaskCreate(); LED_GPIO_Conf(); while (1) { LED1(On); OSTimeDly(300); LED1(Off); OSTimeDly(300); MainTask(); } }
static void AppTaskStart (void *p_arg) { CPU_INT32U freq; CPU_INT32U cnts; OS_ERR err; (void)p_arg; BSP_Init(); /* Initialize BSP functions */ CPU_Init(); /* Initialize the uC/CPU services */ freq = BSP_CPU_ClkFreq(); /* Determine SysTick reference freq. */ cnts = freq / (CPU_INT32U)OSCfg_TickRate_Hz; /* Determine nbr SysTick increments */ OS_CPU_SysTickInit(cnts); /* Init uC/OS periodic time src (SysTick). */ #if OS_CFG_STAT_TASK_EN > 0u OSStatTaskCPUUsageInit(&err); /* Compute CPU capacity with no task running */ #endif #ifdef CPU_CFG_INT_DIS_MEAS_EN CPU_IntDisMeasMaxCurReset(); #endif AppEventCreate(); /* Create Application Kernel objects */ AppTaskCreate(); /* Create application tasks */ while (DEF_TRUE) { /* Task body, always written as an infinite loop. */ OSTimeDlyHMSM(0, 0, 0, 200, /* Delay task for 200 ms */ OS_OPT_TIME_HMSM_STRICT, &err); } }
static void AppTaskStart(void *p_arg) { CPU_INT08U led = 1; CPU_INT08U dir = 0; OS_ERR os_err; Mem_Init(); /* Init memory management. */ OS_CPU_SysTickInit(APP_CPU_CLK_FREQ / OS_CFG_TICK_RATE_HZ - 1u); /* Configure system tick. */ BSP_Led_On(1u); while (DEF_TRUE) { if(dir == 0) { OSTimeDlyHMSM(0, 0, 0, 100, OS_OPT_TIME_HMSM_STRICT, &os_err); BSP_Led_Off(0); OSTimeDlyHMSM(0, 0, 0, 50, OS_OPT_TIME_HMSM_STRICT, &os_err); BSP_Led_On(++led); if(led == 8) { dir = 1; } } else { OSTimeDlyHMSM(0, 0, 0, 100, OS_OPT_TIME_HMSM_STRICT, &os_err); BSP_Led_Off(0); OSTimeDlyHMSM(0, 0, 0, 50, OS_OPT_TIME_HMSM_STRICT, &os_err); BSP_Led_On(--led); if(led == 1) { dir = 0; } } } }
/* ********************************************************************************************************* * 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-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) ; }
/* ********************************************************************************************************* * 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) ; }
bool platform_initialize(void* tcb) { OS_ERR osErr; mainTcb = tcb; SYS_Init(); GPIO_SetBit(LED_LINK_PORT, LED_LINK_PIN); GPIO_Open(LED_LINK_PORT, GPIO_PMD_PMD8_OUTPUT, GPIO_PMD_PMD8_MASK); #if NABTO_ENABLE_LOGGING uart_initialize(115200); #endif // Initialize OS tick system OS_CPU_SysTickInit(SYS_GetHCLKFreq() / OS_CFG_TICK_RATE_HZ); OSSemCreate(&loggingSemaphore, NULL, 1, &osErr); if(osErr != OS_ERR_NONE) { NABTO_LOG_FATAL(("Unable to create logging semaphore")); } NABTO_LOG_INFO(("Initializing...")); if (RAK_DriverInit() != RAK_OK) { NABTO_LOG_FATAL(("Platform initialize failed!")); } { char mac[6]; if (RAK_GetMacAddr(mac) != RAK_OK) { NABTO_LOG_FATAL(("RAK_GetMacAddr() failed!")); } NABTO_LOG_INFO(("MAC: %.2x:%.2x:%.2x:%.2x:%.2x:%.2x", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5])); } { RAK_CONNECT param; param.mode = NET_MODE_STA; param.sec_mode = PSK_MODE_SEC; param.ssid = wifiSsid; param.psk = wifiKey; param.conn_handle = wifi_callback; if (RAK_ConnectAP(¶m) != RAK_OK) { NABTO_LOG_FATAL(("Wifi connect error!")); } } while(linkIsUp == false); // wait for callback to set connection status { RAK_IPCONFIG dhcp; if (RAK_IPConfigDHCP(&dhcp) != RAK_OK) { NABTO_LOG_FATAL(("DHCP error!")); } localAddress = dhcp.addr; localMask = dhcp.mask; gateway = dhcp.gw; dnsServer = dhcp.dnsrv1; NABTO_LOG_TRACE(("DHCP: Address=" PRI_IP " mask=" PRI_IP " gateway=" PRI_IP " DNS=" PRI_IP, PRI_IP_FORMAT(localAddress), PRI_IP_FORMAT(localMask), PRI_IP_FORMAT(gateway), PRI_IP_FORMAT(dnsServer))); } memset(sockets, 0, sizeof(sockets)); sendBuffer = RAK_SendMalloc(SEND_BUFFER_SIZE); return true; }
/* ********************************************************************************************************* * 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 */ ; } }