void Task1(void *pdata) //任务1,控制LED灯亮,开启蜂鸣器同时鸣叫 { U16 task1Cnt=0; if(user_task1_firstboot == 1) { // RTC初始化 Rtc_Init(); user_task1_firstboot = 0; } while (1) { task1Cnt++; OSPrintf("\nEnter Task1\n"); OSPrintf("uC/OS Version:V%4.2f\n",(float)OSVersion()*0.01);//打印uC/OS的版本号 //实现流水灯 if((task1Cnt%5) == 0) rGPBDAT = 0x1E0; //全灭 else rGPBDAT = rGPBDAT - (0x10<<(task1Cnt%5)); //流水灯 #if 0 //蜂鸣器鸣叫 Beep(3000, 60); Beep(2500, 60); Beep(2000, 60); Beep(1500, 60); Beep(1000, 60); Beep(900, 60); #endif OSTimeDly(OS_TICKS_PER_SEC*5); } }
std::string Platform::GetPlatformVersionString() { DWORD major; DWORD minor; OSVersion(&major, &minor); std::stringstream ss; ss << "Windows NT " << major << "." << minor; if( PlatformIs64Bit() ) ss << "; Win64; x64"; return ss.str(); }
static void TaskStartDisp (void) { char s[80]; sprintf(s, "%5d", OSTaskCtr); /* Display #tasks running */ PC_DispStr(18, 22, s, DISP_FGND_YELLOW + DISP_BGND_BLUE); #if OS_TASK_STAT_EN > 0 sprintf(s, "%3d", OSCPUUsage); /* Display CPU usage in % */ PC_DispStr(36, 22, s, DISP_FGND_YELLOW + DISP_BGND_BLUE); #endif sprintf(s, "%5d", OSCtxSwCtr); /* Display #context switches per second */ PC_DispStr(18, 23, s, DISP_FGND_YELLOW + DISP_BGND_BLUE); sprintf(s, "V%1d.%02d", OSVersion() / 100, OSVersion() % 100); /* Display uC/OS-II's version number */ PC_DispStr(75, 24, s, DISP_FGND_YELLOW + DISP_BGND_BLUE); switch (_8087) { /* Display whether FPU present */ case 0: PC_DispStr(71, 22, " NO FPU ", DISP_FGND_YELLOW + DISP_BGND_BLUE); break; case 1: PC_DispStr(71, 22, " 8087 FPU", DISP_FGND_YELLOW + DISP_BGND_BLUE); break; case 2: PC_DispStr(71, 22, "80287 FPU", DISP_FGND_YELLOW + DISP_BGND_BLUE); break; case 3: PC_DispStr(71, 22, "80387 FPU", DISP_FGND_YELLOW + DISP_BGND_BLUE); break; } }
static void TaskStartDisp (void) { char s[80]; sprintf(s, "%5d", OSTaskCtr); /* Display #tasks running */ PC_DispStr(18, 22, s, DISP_FGND_YELLOW + DISP_BGND_BLUE); #if OS_TASK_STAT_EN > 0 sprintf(s, "%3d", OSCPUUsage); /* Display CPU usage in % */ PC_DispStr(36, 22, s, DISP_FGND_YELLOW + DISP_BGND_BLUE); #endif sprintf(s, "%5d", OSCtxSwCtr); /* Display #context switches per second */ PC_DispStr(18, 23, s, DISP_FGND_YELLOW + DISP_BGND_BLUE); #ifdef __WIN32__ sprintf(s, "uCOS-II V%1d.%02d WIN32 V%1d.%02d", OSVersion() / 100, OSVersion() % 100, OSPortVersion() / 100, OSPortVersion() % 100); /* Display uC/OS-II's version number */ #endif #ifdef __LINUX__ sprintf(s, "uCOS-II V%1d.%02d LINUX V%1d.%02d", OSVersion() / 100, OSVersion() % 100, OSPortVersion() / 100, OSPortVersion() % 100); /* Display uC/OS-II's version number */ #endif PC_DispStr(52, 23, s, DISP_FGND_YELLOW + DISP_BGND_BLUE); }
VIDEODRIVER::~VIDEODRIVER() { //mypVideoMemory=NULL; OSVER=OSVersion(); if (OSVER==OSWIN2000||OSVER==OSWIN2003||OSVER==OSWINXP) { Mirror_driver_detach_XP(); if (mypVideoMemory!=NULL) VideoMemory_ReleaseSharedMemory(mypVideoMemory); } if (OSVER==OSVISTA) { Mirror_driver_Vista(0,0,0,0,0); if (mypVideoMemory!=NULL) VideoMemory_ReleaseSharedMemory(mypVideoMemory); } }
void DisplayStatus ( void ) { char s[100]; sprintf(s, "%5d", OSTaskCtr); /* Display #tasks running */ PC_DispStr(18, 22, s, DISP_FGND_BLUE + DISP_BGND_CYAN); sprintf(s, "%3d", OSCPUUsage); /* Display CPU usage in % */ PC_DispStr(36, 22, s, DISP_FGND_BLUE + DISP_BGND_CYAN); sprintf(s, "%5d", OSCtxSwCtr); /* Display #context switches per second */ PC_DispStr(18, 23, s, DISP_FGND_BLUE + DISP_BGND_CYAN); OSCtxSwCtr = 0; sprintf(s, "V%3.2f", (float)OSVersion() * 0.01); /* Display version number as Vx.yy */ PC_DispStr(75, 24, s, DISP_FGND_YELLOW + DISP_BGND_BLUE); PC_GetDateTime(s); /* Get and display date and time */ PC_DispStr(0, 24, s, DISP_FGND_BLUE + DISP_BGND_CYAN); }
void VIDEODRIVER::VIDEODRIVER_Stop() { OSVER=OSVersion(); if (OSVER==OSWIN2000||OSVER==OSWIN2003||OSVER==OSWINXP) { Mirror_driver_detach_XP(); if (mypVideoMemory!=NULL) VideoMemory_ReleaseSharedMemory(mypVideoMemory); } if (OSVER==OSVISTA) { Mirror_driver_Vista(0,0,0,0,0); if (mypVideoMemory!=NULL) VideoMemory_ReleaseSharedMemory(mypVideoMemory); } mypVideoMemory=NULL; mypchangebuf=NULL; myframebuffer=NULL; }
/* ********************************************************************************************************* * 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-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) ; }
/*..........................................................................*/ void BSP_init(int argc, char *argv[]) { char const *com = "COM1"; uint8_t n; if (argc > 1) { l_delay = atol(argv[1]); /* set the delay counter for busy delay */ } if (argc > 2) { com = argv[2]; (void)com; /* avoid compiler warning if Q_SPY not defined */ } if (!QS_INIT(com)) { /* initialize QS */ Q_ERROR(); } QS_OBJ_DICTIONARY(&l_tickHook); QS_OBJ_DICTIONARY(&l_kbdTask); Video_clearScreen(VIDEO_BGND_BLACK); Video_clearRect( 0, 0, 80, 7, VIDEO_BGND_LIGHT_GRAY); Video_clearRect( 0, 11, 80, 12, VIDEO_BGND_LIGHT_GRAY); Video_clearRect( 0, 12, 41, 23, VIDEO_BGND_BLUE); Video_clearRect(41, 12, 80, 23, VIDEO_BGND_RED); Video_clearRect( 0, 23, 80, 24, VIDEO_BGND_LIGHT_GRAY); n = VIDEO_FGND_BLUE; Video_printStrAt(10, 0, n, " __"); Video_printStrAt(10, 1, n, " / | _ _ -|- _ _"); Video_printStrAt(10, 2, n, " \\__| | | _\\ | \\ | | | | \\ \\"); Video_printStrAt(10, 3, n, " | \\_/ |_| | | | \\_| | | |"); Video_printStrAt(10, 4, n, " |"); n = VIDEO_FGND_RED; Video_printStrAt(43, 0, n, " _ __ "); Video_printStrAt(43, 1, n, "| /_\\ | \\ TM"); Video_printStrAt(43, 2, n, "| \\_ _ |__/ _"); Video_printStrAt(43, 3, n, "| _\\ | |_"); Video_printStrAt(43, 4, n, "|___ |_| | _|"); Video_printStrAt(10, 5, VIDEO_FGND_BLUE, "_____________________________________________________"); Video_printStrAt(10, 6, VIDEO_FGND_RED, "i n n o v a t i n g e m b e d d e d s y s t e m s"); Video_printStrAt(18, 7, VIDEO_FGND_WHITE, "Dining Philosophers Example"); Video_printStrAt(18, 8, VIDEO_FGND_WHITE, "QEP/C"); Video_printStrAt(28, 8, VIDEO_FGND_YELLOW, QEP_getVersion()); Video_printStrAt(18, 9, VIDEO_FGND_WHITE, "QF/C"); Video_printStrAt(28, 9, VIDEO_FGND_YELLOW, QF_getVersion()); Video_printStrAt(18, 10, VIDEO_FGND_WHITE, "uC/OS-II"); /* uC/OS-II version is returned as an integer value multiplied by 100 */ Video_printNumAt(29, 10, VIDEO_FGND_YELLOW, OSVersion()%100); Video_printStrAt(28, 10, VIDEO_FGND_YELLOW, "2."); Video_printStrAt( 1, 11, VIDEO_FGND_BLUE, "Active Object State Data"); for (n = 0; n < N_PHILO; ++n) { Video_printStrAt( 1, 12 + n, VIDEO_FGND_WHITE, "Philosopher"); Video_printNumAt(12, 12 + n, VIDEO_FGND_WHITE, n + 1); } Video_printStrAt( 1, 12 + N_PHILO, VIDEO_FGND_WHITE, "Table"); Video_printStrAt(17, 12 + N_PHILO, VIDEO_FGND_YELLOW, "serving"); Video_printStrAt( 1, 12 + N_PHILO + 1, VIDEO_FGND_WHITE, "ucosTask"); Video_printStrAt(17, 12 + N_PHILO + 1, VIDEO_FGND_YELLOW, "active"); Video_printStrAt(4, 23, VIDEO_FGND_BLUE, "* Copyright (c) Quantum Leaps, LLC * www.state-machine.com *"); Video_printStrAt(28, 24, VIDEO_FGND_LIGHT_RED, "<< Press Esc to quit >>"); }
/* ********************************************************************************************************* * 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 */ ; } }
ADI_OSAL_STATUS adi_osal_ThreadGetName(ADI_OSAL_THREAD_HANDLE const hThread, char_t *pTaskName, uint32_t nNumBytesToCopy) { char_t *sThreadName = NULL; INT8U nErr; INT8U nUcosNameSize; ADI_OSAL_STATUS eRetStatus; #pragma diag(push) #pragma diag(suppress:misra_rule_11_4 : "typecasting is necessary to convert the handle type into a useful type") ADI_OSAL_THREAD_INFO_PTR hThreadNode = (ADI_OSAL_THREAD_INFO_PTR) hThread; #pragma diag(pop) INT16U nUcosVersion = OSVersion(); #ifdef OSAL_DEBUG /* check validity of the handle */ if ((hThreadNode==NULL) || (hThread==ADI_OSAL_INVALID_THREAD)) { return (ADI_OSAL_BAD_HANDLE); } if (hThreadNode->pThreadLocalStorageBuffer==NULL) { return (ADI_OSAL_BAD_HANDLE); } #endif /* In version 2.92 or later the task stores a pointer and GetName returns it * so we don't need to allocate memory for this variable because the uCOS * code does not copy the string to it, it simply sets the pointer * * In older versions the maximum Task name size (OSTaskNameSize) is only set * in uCOS in debug mode so we cannot use it. We use UCHAR_MAX as the max * length because the return value is an INT8U. * * Note that the prototype of OSTaskNameGet has changed and the pointer is * different. */ #pragma diag(push) #pragma diag(suppress:misra_rule_11_4 : "typecasting is necessary to convert the char_t type into INT8U type") if (nUcosVersion < 292u) { /* allocate memory to get the task name based on the maximum task name size */ if (ADI_OSAL_SUCCESS != _adi_osal_MemAlloc((void*) &sThreadName, UCHAR_MAX)) { return (ADI_OSAL_MEM_ALLOC_FAILED); } PAUSE_PROFILING(); nUcosNameSize = OSTaskNameGet(hThreadNode->nThreadPrio, (void*) sThreadName, &nErr); RESUME_PROFILING(); } else { PAUSE_PROFILING(); nUcosNameSize = OSTaskNameGet(hThreadNode->nThreadPrio, (void*) &sThreadName, &nErr); RESUME_PROFILING(); } #pragma diag(pop) switch(nErr) { case OS_ERR_NONE: strncpy(pTaskName, sThreadName, nNumBytesToCopy - 1u); /* We zero-terminate the string in either the last element or where the uCOS name finished */ if (nUcosNameSize < (nNumBytesToCopy) ) { pTaskName[nUcosNameSize + 1u] ='\0'; } else { pTaskName[nNumBytesToCopy] ='\0'; } eRetStatus = ADI_OSAL_SUCCESS; break; case OS_ERR_TASK_NOT_EXIST: case OS_ERR_PRIO_INVALID: eRetStatus = ADI_OSAL_BAD_HANDLE; break; case OS_ERR_NAME_GET_ISR: eRetStatus = ADI_OSAL_CALLER_ERROR; break; case OS_ERR_PNAME_NULL: default: eRetStatus = ADI_OSAL_FAILED; break; } if (nUcosVersion < 292u) { _adi_osal_MemFree(sThreadName); } return (eRetStatus); }
/* ********************************************************************************************************* * 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) ; }
void VIDEODRIVER::VIDEODRIVER_start(int x,int y,int w,int h) { blocked=true; oldaantal=1; mypVideoMemory=NULL; OSVER=OSVersion(); if (OSVER==OSWIN2000||OSVER==OSWIN2003||OSVER==OSWINXP) { if (Mirror_driver_attach_XP(x,y,w,h)) { if (GetDcMirror()!=NULL) { mypVideoMemory=VideoMemory_GetSharedMemory(); mypchangebuf=(PCHANGES_BUF)mypVideoMemory; myframebuffer=mypVideoMemory+sizeof(CHANGES_BUF); } else { mypVideoMemory=NULL; } } else { mypVideoMemory=NULL; } } if (OSVER==OSVISTA) { if (Mirror_driver_Vista(1,x,y,w,h)) { if (GetDcMirror()!=NULL) { mypVideoMemory=VideoMemory_GetSharedMemory(); mypchangebuf=(PCHANGES_BUF)mypVideoMemory; myframebuffer=mypVideoMemory+sizeof(CHANGES_BUF); //if (mypVideoMemory==NULL) MessageBox(NULL,"MVideo driver failed", NULL, MB_OK); } else { // MessageBox(NULL,"Video driver failed", NULL, MB_OK); //////////////////////////////////////////////////////////////////////////////// if (Mirror_driver_attach_XP(x,y,w,h)) { if (GetDcMirror()!=NULL) { mypVideoMemory=VideoMemory_GetSharedMemory(); mypchangebuf=(PCHANGES_BUF)mypVideoMemory; myframebuffer=mypVideoMemory+sizeof(CHANGES_BUF); } else { mypVideoMemory=NULL; } } else { mypVideoMemory=NULL; } //////////////////////////////////////////////////////////////////////////////// //mypVideoMemory=NULL; } } else { mypVideoMemory=NULL; } } blocked=false; }
ADI_OSAL_STATUS adi_osal_Config( const ADI_OSAL_CONFIG *pConfig) { uint32_t* pHeapMemory = NULL; /*ptr to the memory to use for the heap */ uint32_t nHeapMemorySize = 0u;/*size of memory pointed by pHeapMemory */ /*! @internal @var snOsalConfigurationState Static variable to record if OSAL has already been configured @endinternal */ #ifdef OSAL_DEBUG static uint32_t snOsalConfigurationState = 0u ; #endif /* Checks that the version of uC/OS is compatible with this version of OSAL */ if (OSVersion() < COMPATIBLE_OS_VERSION) { return (ADI_OSAL_OS_ERROR); } #ifdef OSAL_DEBUG /* Check if already configured. If the parameters are the same then the * call succeeds. Otherwise the call fails. The priority inheritance * setting is not recorded so we cannot check it */ if (OSAL_INITIALIZED == snOsalConfigurationState) { if (NULL == pConfig) { return (ADI_OSAL_SUCCESS); } else { if ( (pConfig->nNumTLSSlots != _adi_osal_gnNumSlots) || (pConfig->nSysTimerPeriodInUsec != _adi_osal_gnTickPeriod) || (pConfig->pHeap != pHeapMemory) || (pConfig->nHeapSizeBytes != nHeapMemorySize)) { return (ADI_OSAL_FAILED); } else { return (ADI_OSAL_SUCCESS); } } } #endif /* checks that arguments are all valid */ if (NULL != pConfig) { #ifdef OSAL_DEBUG if ( (ADI_OSAL_PRIO_INHERIT_ENABLED != pConfig->eEnablePrioInherit) && (ADI_OSAL_PRIO_INHERIT_AUTO != pConfig->eEnablePrioInherit)) { /* incorrect value for priority inheritance */ return(ADI_OSAL_BAD_PRIO_INHERIT); } if (pConfig->nNumTLSSlots > (uint32_t) ADI_OSAL_MAX_NUM_TLS_SLOTS) { return (ADI_OSAL_BAD_SLOT_KEY); } #endif if (pConfig->nSysTimerPeriodInUsec != (uint32_t) 0) { _adi_osal_gnTickPeriod = pConfig->nSysTimerPeriodInUsec; } _adi_osal_gnNumSlots = pConfig->nNumTLSSlots; pHeapMemory = pConfig->pHeap; nHeapMemorySize = pConfig->nHeapSizeBytes; } /* Create a heap with the information provided. If pHeapMemory was NULL then _adi_osal_HeapInstall will set its heap to the default */ if ((NULL != pHeapMemory) && (0u == nHeapMemorySize)) { return (ADI_OSAL_INVALID_ARGS); } if (ADI_OSAL_SUCCESS != _adi_osal_HeapInstall(pHeapMemory,nHeapMemorySize)) { return (ADI_OSAL_MEM_ALLOC_FAILED); } #ifdef OSAL_DEBUG snOsalConfigurationState = OSAL_INITIALIZED; #endif return( ADI_OSAL_SUCCESS); }
/* ********************************************************************************************************* * 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 */ ; } }
BOOL CALLBACK vncPropertiesPoll::DialogProcPoll(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { // We use the dialog-box's USERDATA to store a _this pointer // This is set only once WM_INITDIALOG has been recieved, though! vncPropertiesPoll *_this = (vncPropertiesPoll *) GetWindowLong(hwnd, GWL_USERDATA); switch (uMsg) { case WM_INITDIALOG: { // Retrieve the Dialog box parameter and use it as a pointer // to the calling vncPropertiesPoll object SetWindowLong(hwnd, GWL_USERDATA, lParam); _this = (vncPropertiesPoll *) lParam; _this->m_dlgvisible = TRUE; // Set the dialog box's title to indicate which Properties we're editting if (_this->m_usersettings) { SetWindowText(hwnd, sz_ID_CURRENT_USER_PROP); } else { SetWindowText(hwnd, sz_ID_DEFAULT_SYST_PROP); } // Modif sf@2002 HWND hTurboMode = GetDlgItem(hwnd, IDC_TURBOMODE); SendMessage(hTurboMode, BM_SETCHECK, _this->m_server->TurboMode(), 0); // Set the polling options HWND hDriver = GetDlgItem(hwnd, IDC_DRIVER); SendMessage(hDriver, BM_SETCHECK, _this->m_server->Driver(),0); if (OSVersion()==3) // If NT4 or below, no driver { SendMessage(hDriver,BM_SETCHECK,false,0); _this->m_server->Driver(false); EnableWindow(hDriver, false); } HWND hHook = GetDlgItem(hwnd, IDC_HOOK); SendMessage(hHook, BM_SETCHECK, _this->m_server->Hook(), 0); HWND hPollFullScreen = GetDlgItem(hwnd, IDC_POLL_FULLSCREEN); SendMessage(hPollFullScreen, BM_SETCHECK, _this->m_server->PollFullScreen(), 0); HWND hPollForeground = GetDlgItem(hwnd, IDC_POLL_FOREGROUND); SendMessage(hPollForeground, BM_SETCHECK, _this->m_server->PollForeground(), 0); HWND hPollUnderCursor = GetDlgItem(hwnd, IDC_POLL_UNDER_CURSOR); SendMessage(hPollUnderCursor, BM_SETCHECK, _this->m_server->PollUnderCursor(), 0); HWND hPollConsoleOnly = GetDlgItem(hwnd, IDC_CONSOLE_ONLY); SendMessage(hPollConsoleOnly, BM_SETCHECK, _this->m_server->PollConsoleOnly(), 0); EnableWindow(hPollConsoleOnly, _this->m_server->PollUnderCursor() || _this->m_server->PollForeground() ); HWND hPollOnEventOnly = GetDlgItem(hwnd, IDC_ONEVENT_ONLY); SendMessage(hPollOnEventOnly, BM_SETCHECK, _this->m_server->PollOnEventOnly(), 0); EnableWindow(hPollOnEventOnly, _this->m_server->PollUnderCursor() || _this->m_server->PollForeground() ); SetForegroundWindow(hwnd); return FALSE; // Because we've set the focus } case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: case IDC_APPLY: { // Modif sf@2002 HWND hTurboMode = GetDlgItem(hwnd, IDC_TURBOMODE); _this->m_server->TurboMode(SendMessage(hTurboMode, BM_GETCHECK, 0, 0) == BST_CHECKED); // Handle the polling stuff HWND hDriver = GetDlgItem(hwnd, IDC_DRIVER); bool result=(SendMessage(hDriver, BM_GETCHECK, 0, 0) == BST_CHECKED); if (result) { #ifdef DRIVER _this->m_server->Driver(CheckVideoDriver(0)); #endif } else _this->m_server->Driver(false); HWND hHook = GetDlgItem(hwnd, IDC_HOOK); _this->m_server->Hook( SendMessage(hHook, BM_GETCHECK, 0, 0) == BST_CHECKED ); HWND hPollFullScreen = GetDlgItem(hwnd, IDC_POLL_FULLSCREEN); _this->m_server->PollFullScreen( SendMessage(hPollFullScreen, BM_GETCHECK, 0, 0) == BST_CHECKED ); HWND hPollForeground = GetDlgItem(hwnd, IDC_POLL_FOREGROUND); _this->m_server->PollForeground( SendMessage(hPollForeground, BM_GETCHECK, 0, 0) == BST_CHECKED ); HWND hPollUnderCursor = GetDlgItem(hwnd, IDC_POLL_UNDER_CURSOR); _this->m_server->PollUnderCursor( SendMessage(hPollUnderCursor, BM_GETCHECK, 0, 0) == BST_CHECKED ); HWND hPollConsoleOnly = GetDlgItem(hwnd, IDC_CONSOLE_ONLY); _this->m_server->PollConsoleOnly( SendMessage(hPollConsoleOnly, BM_GETCHECK, 0, 0) == BST_CHECKED ); HWND hPollOnEventOnly = GetDlgItem(hwnd, IDC_ONEVENT_ONLY); _this->m_server->PollOnEventOnly( SendMessage(hPollOnEventOnly, BM_GETCHECK, 0, 0) == BST_CHECKED ); // Was ok pressed? if (LOWORD(wParam) == IDOK) { // Yes, so close the dialog vnclog.Print(LL_INTINFO, VNCLOG("enddialog (OK)\n")); _this->m_returncode_valid = TRUE; EndDialog(hwnd, IDOK); _this->m_dlgvisible = FALSE; } _this->m_server->SetHookings(); return TRUE; } case IDCANCEL: vnclog.Print(LL_INTINFO, VNCLOG("enddialog (CANCEL)\n")); _this->m_returncode_valid = TRUE; EndDialog(hwnd, IDCANCEL); _this->m_dlgvisible = FALSE; return TRUE; case IDC_POLL_FOREGROUND: case IDC_POLL_UNDER_CURSOR: // User has clicked on one of the polling mode buttons // affected by the pollconsole and pollonevent options { // Get the poll-mode buttons HWND hPollForeground = GetDlgItem(hwnd, IDC_POLL_FOREGROUND); HWND hPollUnderCursor = GetDlgItem(hwnd, IDC_POLL_UNDER_CURSOR); // Determine whether to enable the modifier options BOOL enabled = (SendMessage(hPollForeground, BM_GETCHECK, 0, 0) == BST_CHECKED) || (SendMessage(hPollUnderCursor, BM_GETCHECK, 0, 0) == BST_CHECKED); HWND hPollConsoleOnly = GetDlgItem(hwnd, IDC_CONSOLE_ONLY); EnableWindow(hPollConsoleOnly, enabled); HWND hPollOnEventOnly = GetDlgItem(hwnd, IDC_ONEVENT_ONLY); EnableWindow(hPollOnEventOnly, enabled); } return TRUE; case IDC_CHECKDRIVER: { #ifdef DRIVER CheckVideoDriver(1); #endif } return TRUE; } break; } return 0; }
/* ********************************************************************************************************* * 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 */ ; } }