We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I am trying to work on a project where I am using the MCB1700's display. Here, I get the joystick input and enter one of the apps that I display in the main screen. So, I have a Photo Gallery and a retro Game. For the game part, just to be creative I want the user to be able to choose a level: Easy or Hard and then he/she can enter the Game. I am trying to use multi-threading here in this instance with RTX v1 and CMSIS-RTOS v1 API. I am having some difficulty here, I basically have three functions here: joyStick, selLev and displayLev. When I run this code in debg mode, I see that all threads run but when I run it on display, I see only joyStick and selLev running but even here, I cannot toggle the joystick. I am also pasting the copy of the code. Any help would be great.
Code:#include <LPC17xx.H> /* NXP LPC17xx definitions */ #include "string.h" #include "GLCD.h" #include "stdio.h" //#include "LED.h" #include "gameview.h" #include "KBD.h" #define osObjectsPublic 1 #include "osObjects.h" #include "cmsis_os.h" #define __FI 1 /* Font index 16x24 */ #define __USE_LCD 0 void viewGame(void); void delay(int num); void selLev(void const *argument); void displayLev(void const *argument); void joyStick(void const * argument); //int level = 0; osThreadId tid_Thread; // thread id osThreadDef (selLev, osPriorityAboveNormal, 1, 0); // thread object osThreadId tid2_Thread; // thread id osThreadDef (displayLev, osPriorityAboveNormal, 1, 0); // thread object osThreadId tid3_Thread; // thread id osThreadDef (joyStick, osPriorityAboveNormal, 1, 0); // thread object int32_t res3 = 0; osSemaphoreDef(joyStickSemaphore); osSemaphoreId joyStickSemaphore; int level = 0; int level2 = 0; int ex = 0; /*---------------------------------------------------------------------------- Main Program *----------------------------------------------------------------------------*/ void viewGame (void) { /* Main Program */ GLCD_Clear(White); GLCD_SetBackColor(Blue); GLCD_SetTextColor(Yellow); GLCD_DisplayString(0, 0, __FI, " Game "); GLCD_SetTextColor(White); GLCD_DisplayString(1, 0, __FI, " Choose Level: "); GLCD_SetBackColor(White); GLCD_SetTextColor(Blue); GLCD_DisplayString(5, 0, __FI, " Easy "); GLCD_DisplayString(6, 0, __FI, " Hard "); osKernelInitialize(); tid3_Thread = osThreadCreate(osThread(joyStick), NULL); osThreadSetPriority(tid3_Thread,osPriorityHigh); tid_Thread = osThreadCreate (osThread(selLev), NULL); tid2_Thread = osThreadCreate (osThread(displayLev), NULL); osKernelStart(); for(;;); //This for loop acts like a blocking for the program to return to main screen. } void joyStick(void const *argument){ for(;;){ int32_t res = 0; res = get_button(); //int res = 0; if(res == KBD_DOWN){ level = 1; } if(res == KBD_UP){ level = 0;} osThreadSetPriority(tid3_Thread,osPriorityAboveNormal); osThreadSetPriority(tid_Thread,osPriorityHigh); osSignalSet(tid_Thread,0x01); } } void selLev(void const *argument){ for(;;){ osSignalWait(0x01, osWaitForever); if(level == 0){ GLCD_SetBackColor(Blue); GLCD_SetTextColor(Red); GLCD_DisplayString(5, 0, __FI, " Easy "); GLCD_SetBackColor(White); GLCD_SetTextColor(Blue); GLCD_DisplayString(6, 0, __FI, " Hard "); ex +=1; //osDelay(10); } if (level ==1 ){ GLCD_SetBackColor(White); GLCD_SetTextColor(Blue); GLCD_DisplayString(5, 0, __FI, " Easy "); GLCD_SetBackColor(Blue); GLCD_SetTextColor(Red); GLCD_DisplayString(6, 0, __FI, " Hard "); ex+=2; //osDelay(10); } osThreadSetPriority(tid_Thread,osPriorityAboveNormal); osThreadSetPriority(tid2_Thread,osPriorityHigh); osSignalSet(tid2_Thread,0x02); } } void displayLev(void const *argument){ for(;;){ osSignalWait(0x02,osWaitForever); int i = 0; if (level == 0) { for(i = 0;i<320;i++){ delay(20); GLCD_Bitmap(i,50,20,20,(unsigned char*)BLACKCIRCLE_pixel_data); //if(i == 320) i =0; } } if (level ==1){ for(i = 0;i<320;i++){ delay(2); GLCD_Bitmap(i,50,20,20,(unsigned char*)BLACKCIRCLE_pixel_data); //if(i == 320) i =0; } } osThreadSetPriority(tid2_Thread,osPriorityAboveNormal); } } void delay(int num){ int i,j; for ( i = 0;i<50000;i++); for ( j = 0;j<num*50000;j++); }
#include <LPC17xx.H> /* NXP LPC17xx definitions */ #include "string.h" #include "GLCD.h" #include "stdio.h" //#include "LED.h" #include "gameview.h" #include "KBD.h" #define osObjectsPublic 1 #include "osObjects.h" #include "cmsis_os.h" #define __FI 1 /* Font index 16x24 */ #define __USE_LCD 0 void viewGame(void); void delay(int num); void selLev(void const *argument); void displayLev(void const *argument); void joyStick(void const * argument); //int level = 0; osThreadId tid_Thread; // thread id osThreadDef (selLev, osPriorityAboveNormal, 1, 0); // thread object osThreadId tid2_Thread; // thread id osThreadDef (displayLev, osPriorityAboveNormal, 1, 0); // thread object osThreadId tid3_Thread; // thread id osThreadDef (joyStick, osPriorityAboveNormal, 1, 0); // thread object int32_t res3 = 0; osSemaphoreDef(joyStickSemaphore); osSemaphoreId joyStickSemaphore; int level = 0; int level2 = 0; int ex = 0; /*---------------------------------------------------------------------------- Main Program *----------------------------------------------------------------------------*/ void viewGame (void) { /* Main Program */ GLCD_Clear(White); GLCD_SetBackColor(Blue); GLCD_SetTextColor(Yellow); GLCD_DisplayString(0, 0, __FI, " Game "); GLCD_SetTextColor(White); GLCD_DisplayString(1, 0, __FI, " Choose Level: "); GLCD_SetBackColor(White); GLCD_SetTextColor(Blue); GLCD_DisplayString(5, 0, __FI, " Easy "); GLCD_DisplayString(6, 0, __FI, " Hard "); osKernelInitialize(); tid3_Thread = osThreadCreate(osThread(joyStick), NULL); osThreadSetPriority(tid3_Thread,osPriorityHigh); tid_Thread = osThreadCreate (osThread(selLev), NULL); tid2_Thread = osThreadCreate (osThread(displayLev), NULL); osKernelStart(); for(;;); //This for loop acts like a blocking for the program to return to main screen. } void joyStick(void const *argument){ for(;;){ int32_t res = 0; res = get_button(); //int res = 0; if(res == KBD_DOWN){ level = 1; } if(res == KBD_UP){ level = 0;} osThreadSetPriority(tid3_Thread,osPriorityAboveNormal); osThreadSetPriority(tid_Thread,osPriorityHigh); osSignalSet(tid_Thread,0x01); } } void selLev(void const *argument){ for(;;){ osSignalWait(0x01, osWaitForever); if(level == 0){ GLCD_SetBackColor(Blue); GLCD_SetTextColor(Red); GLCD_DisplayString(5, 0, __FI, " Easy "); GLCD_SetBackColor(White); GLCD_SetTextColor(Blue); GLCD_DisplayString(6, 0, __FI, " Hard "); ex +=1; //osDelay(10); } if (level ==1 ){ GLCD_SetBackColor(White); GLCD_SetTextColor(Blue); GLCD_DisplayString(5, 0, __FI, " Easy "); GLCD_SetBackColor(Blue); GLCD_SetTextColor(Red); GLCD_DisplayString(6, 0, __FI, " Hard "); ex+=2; //osDelay(10); } osThreadSetPriority(tid_Thread,osPriorityAboveNormal); osThreadSetPriority(tid2_Thread,osPriorityHigh); osSignalSet(tid2_Thread,0x02); } } void displayLev(void const *argument){ for(;;){ osSignalWait(0x02,osWaitForever); int i = 0; if (level == 0) { for(i = 0;i<320;i++){ delay(20); GLCD_Bitmap(i,50,20,20,(unsigned char*)BLACKCIRCLE_pixel_data); //if(i == 320) i =0; } } if (level ==1){ for(i = 0;i<320;i++){ delay(2); GLCD_Bitmap(i,50,20,20,(unsigned char*)BLACKCIRCLE_pixel_data); //if(i == 320) i =0; } } osThreadSetPriority(tid2_Thread,osPriorityAboveNormal); } } void delay(int num){ int i,j; for ( i = 0;i<50000;i++); for ( j = 0;j<num*50000;j++); }