//****************************************************************************************** // dsPIC33FJ256GP506 Sample Program // Project : // Program Name : // Programer : // Create date : Version 1.0 H22.10.26 // Replace date : // History : // Laungage : FreeRTOS ( MPLAB C30 ) //****************************************************************************************** // Description // //****************************************************************************************** /* Scheduler include files. */ #include "FreeRTOS.h" #include "task.h" #include "semphr.h" #include "serial.h" void User_Confugration( void ); void Put_PORT(unsigned short int ); static void User_TASK_1( void *pvParameters ); static void User_TASK_2( void *pvParameters ); void Move_LED( unsigned short int *); void Conv_str( unsigned char *, unsigned char); unsigned char Conv_str_1(unsigned char); // #define mainCOMMS_QUEUE_LENGTH ( ( unsigned portBASE_TYPE ) 5 ) #define mainNO_BLOCK ( ( portTickType ) 0 ) #define PI_BUFRER_SIZE ( ( unsigned int ) 10 ) #define PI_ITEM_NUMBER ( ( unsigned int ) 3 ) #define mainBAUD_RATE ( ( unsigned long ) 9600 ) xQueueHandle Ind_Queue; volatile unsigned short int TASK1_LED = 0x0001; int main( void ) { // ***************** // 1.Initalized // ***************** User_Confugration (); xSerialPortInitMinimal( mainBAUD_RATE, mainCOMMS_QUEUE_LENGTH ); // Initalized UART // Initalized UART Ind_Queue = xQueueCreate(PI_ITEM_NUMBER, PI_BUFRER_SIZE); // Initalized Queue // ***************** // 2.Create Task // ***************** xTaskCreate( User_TASK_1, ( const char * const ) "User_Task_1", 100, NULL, 1, NULL ); xTaskCreate( User_TASK_2, ( const char * const ) "User_Task_2", 100, NULL, 1, NULL ); // ***************** // 3.Start Scheduler // ***************** vTaskStartScheduler(); } //****************************************************************************************** // Function Name : User_TASK_1 // Title : // Input : // Output : //****************************************************************************************** static void User_TASK_1( void *pvParameters ) { unsigned char que_buffer[PI_BUFRER_SIZE]; while(1){ Move_LED(&TASK1_LED); Put_PORT(TASK1_LED ); Conv_str( que_buffer, TASK1_LED ); xQueueSend(Ind_Queue, que_buffer, portMAX_DELAY); vTaskDelay(1000 / portTICK_RATE_MS); } } //****************************************************************************************** // Function Name : User_TASK_2 // Title : // Input : // Output : //****************************************************************************************** static void User_TASK_2( void *pvParameters ) { unsigned char que_buffer[PI_BUFRER_SIZE]; while(1){ xQueueReceive(Ind_Queue, que_buffer, portMAX_DELAY); xSerialPutChar( NULL, que_buffer[1], mainNO_BLOCK ); xSerialPutChar( NULL, que_buffer[0], mainNO_BLOCK ); xSerialPutChar( NULL, ' ' , mainNO_BLOCK ); } } //****************************************************************************************** // Function Name : Move_LED // Title : // Input : // Output : //****************************************************************************************** void Move_LED( unsigned short int *led_lst ) { if((*led_lst & 0b10000000) != 0 ){ *led_lst = ( *led_lst << 1 ) | 0b00000001; }else{ *led_lst = ( *led_lst << 1 ) & 0b11111110; } } //****************************************************************************************** // Function Name : Conv_str // Title : // Input : // Output : //****************************************************************************************** void Conv_str( unsigned char out_s[], unsigned char in_c ) { out_s[0] = Conv_str_1((in_c & 0x0F)); out_s[1] = Conv_str_1(((in_c & 0xF0)>>4)); out_s[2] = 0x00; } unsigned char Conv_str_1(unsigned char in_c) { switch(in_c){ case 0 : return('0'); case 1 : return('1'); case 2 : return('2'); case 3 : return('3'); case 4 : return('4'); case 5 : return('5'); case 6 : return('6'); case 7 : return('7'); case 8 : return('8'); case 9 : return('9'); case 10 : return('A'); case 11 : return('B'); case 12 : return('C'); case 13 : return('D'); case 14 : return('E'); case 15 : return('F'); default : return(' '); } } //****************************************************************************************** // // Confugration // // //****************************************************************************************** void User_Confugration( void ) { // (1)Set All Digital Port AD1PCFGH = 0xffff; AD1PCFGL = 0xffff; // (2)Define PortB TRISB = 0xFF00; PORTB = 0x0000; } void Put_PORT(unsigned short int put_data ) { PORTB = put_data; } //****************************************************************************************** // // Dummy Function // // //****************************************************************************************** void vApplicationIdleHook( void ){} void vParTestToggleLED( void ){} void vParTestSetLED( void ){}