给任务添加适当的freertos延迟

main
Zeng wei (曾威) 2 years ago
parent e26d42517e
commit a7b735786a

@ -42,9 +42,9 @@ void send_speed_signal(int speed) {
rs485speed[5] = speed % 256; rs485speed[5] = speed % 256;
RS485_3_Init(9600); RS485_3_Init(9600);
delay_xms(100); // delay_xms(100);
RS485_3_Send_Data(rs485speed, 8); RS485_3_Send_Data(rs485speed, 8);
delay_xms(100); // delay_xms(100);
RS485_1_Init(9600); RS485_1_Init(9600);
} }

@ -41,16 +41,19 @@ void RX_BUF_Transfer(u8 zero,u8 transfer_num)//
for (i = zero; i < 128 - transfer_num; i++) for (i = zero; i < 128 - transfer_num; i++)
{ {
// RS485_RX_BUF[i] = RS485_RX_BUF[i + transfer_num]; RS485_RX_BUF[i] = RS485_RX_BUF[i + transfer_num];
RS485_RX_BUF_COPY[i] = RS485_RX_BUF_COPY[i + transfer_num]; RS485_RX_BUF_COPY[i] = RS485_RX_BUF_COPY[i + transfer_num];
} }
for (i = 128 - transfer_num; i < 128; i++) for (i = 128 - transfer_num; i < 128; i++)
{ {
// RS485_RX_BUF[i] = 0; RS485_RX_BUF[i] = 0;
RS485_RX_BUF_COPY[i] = 0; RS485_RX_BUF_COPY[i] = 0;
} }
// RS485_RX_CNT -= transfer_num; RS485_RX_CNT -= transfer_num;
if (RS485_RX_CNT < 0) {
RS485_RX_CNT = 0;
}
} }

@ -151,7 +151,7 @@ void USART1_IRQHandler(void)
{ {
u8 res; u8 res;
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) // receive data while (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) // receive data
{ {
res = USART_ReceiveData(USART1); // read received data res = USART_ReceiveData(USART1); // read received data
if (RS485_RX_CNT < 128) if (RS485_RX_CNT < 128)
@ -218,11 +218,12 @@ void RS485_1_Init(u32 bound)
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure); USART_Init(USART1, &USART_InitStructure);
;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //???????2?? // // NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //???????2??
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure); NVIC_Init(&NVIC_InitStructure);
@ -273,7 +274,7 @@ void RS485_2_Init(u32 bound)
; ;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5;
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //???????2?? // NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //???????2??
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure); NVIC_Init(&NVIC_InitStructure);
@ -384,6 +385,7 @@ void RS485_1_Send_Data_2(void)
sendbuf[2] = 0x05; sendbuf[2] = 0x05;
sendbuf[37] = 0xFF; sendbuf[37] = 0xFF;
sendbuf[38] = 0xFC; sendbuf[38] = 0xFC;
sendbuf[39] = 0xFF; sendbuf[39] = 0xFF;
sendbuf[40] = 0xFF; sendbuf[40] = 0xFF;
// u8 a; // u8 a;
@ -493,6 +495,8 @@ void RS485_1_Send_Data_2(void)
sendbuf[35] = crc_num1; sendbuf[35] = crc_num1;
sendbuf[36] = crc_num2; sendbuf[36] = crc_num2;
// u8 tmpabc[] = {0xAA, 0xBB, 0xCC};
// RS485_1_Send_Data(tmpabc, 3);
// only when modify happen, then send // only when modify happen, then send
if (cmp_str(prev_sendbuf, sendbuf, 41) != 0) { if (cmp_str(prev_sendbuf, sendbuf, 41) != 0) {

File diff suppressed because it is too large Load Diff

@ -33,6 +33,10 @@ void Host_Computer_Communication(void);
// 60seconds delay // 60seconds delay
#define SYNC_ENVIRONMENT_DATA_REQUEST_PERIOD pdMS_TO_TICKS(60000) #define SYNC_ENVIRONMENT_DATA_REQUEST_PERIOD pdMS_TO_TICKS(60000)
// 2seconds delay
#define MAIN_TASK_PERIOD pdMS_TO_TICKS(1000)
/** /**
* sensor data request: 02 03 * sensor data request: 02 03
*/ */
@ -215,37 +219,17 @@ void Sensor_Communication_task(void *pvParameters)
// time=0; // time=0;
// pingMqtt(MQTT_SOCK); // pingMqtt(MQTT_SOCK);
// } // }
now_stage = timelong_Compare(); // now_stage = timelong_Compare();
// printf("%d %d\r\n",chour,cminute);
Array(&now_stage, &hour, &min, &tem, &hum, &red, &blue, &white); // ¸üжÔÓ¦½×¶ÎºÅµÄ²ÎÊý Array(&now_stage, &hour, &min, &tem, &hum, &red, &blue, &white); // ¸üжÔÓ¦½×¶ÎºÅµÄ²ÎÊý
// printf("current stage: %d\r\n",now_stage);
// RS485_1_Send_Data_1(rs485buf, 8); //(RS485_RX_CNT=0Òѱ»×¢ÊÍ)
// delay_xms(50);
// // RX_BUF_Printf(128);
// if (sync_cnt <= 0)
// {
// RS485_1_Send_Data_3();
// sync_cnt = 10;
// }
// else
// {
// sync_cnt--;
// }
delay_xms(50); delay_xms(50);
// RX_BUF_Printf(128);
// if (RS485_RX_CNT == 0) {
// continue;
// }
bufcut_Init(RS485_RX_BUF_COPY, RS485_RX_BUF, 0, 128); bufcut_Init(RS485_RX_BUF_COPY, RS485_RX_BUF, 0, 128);
u8 c = 0; u8 c = 0;
RS485_RX_CNT = 0; RS485_RX_CNT = 0;
while (isAllZeros(RS485_RX_BUF_COPY, 128) == 0) while (isAllZeros(RS485_RX_BUF_COPY, 128) == 0)
// while (RS485_RX_CNT > 0) // while (RS485_RX_CNT > 0)
{ {
// bufcut_Init(RS485_RX_BUF_COPY, RS485_RX_BUF, 0, 128);
if (RS485_RX_BUF_COPY[0] == 0x02 && RS485_RX_BUF_COPY[1] == 0x03 && CRC16_check(RS485_RX_BUF_COPY, 21) == 1) if (RS485_RX_BUF_COPY[0] == 0x02 && RS485_RX_BUF_COPY[1] == 0x03 && CRC16_check(RS485_RX_BUF_COPY, 21) == 1)
{ {
c++; c++;
@ -267,8 +251,12 @@ void Sensor_Communication_task(void *pvParameters)
Batch_synchronization(&n, RS485_RX_BUF_COPY); Batch_synchronization(&n, RS485_RX_BUF_COPY);
Array(&now_stage, &hour, &min, &tem, &hum, &red, &blue, &white); // update param correspond to current stage Array(&now_stage, &hour, &min, &tem, &hum, &red, &blue, &white); // update param correspond to current stage
bufcut_Init(RS485_DATA_TMP, RS485_RX_BUF_COPY, 0, 18); bufcut_Init(RS485_DATA_TMP, RS485_RX_BUF_COPY, 0, 18);
bufcut_Init(RS485_DATA_TMP + 8, RS485_SUFFIX, 18, 22); RS485_DATA_TMP[18] = 0xFF;
// RS485_1_Send_Data_1(RS485_DATA_TMP, 22); RS485_DATA_TMP[19] = 0xFC;
RS485_DATA_TMP[20] = 0xFF;
RS485_DATA_TMP[21] = 0xFF;
// bufcut_Init(RS485_DATA_TMP + 8, RS485_SUFFIX, 18, 22);
RS485_1_Send_Data_1(RS485_DATA_TMP, 22);
// } // }
RX_BUF_Transfer(0, 18); RX_BUF_Transfer(0, 18);
} }
@ -344,7 +332,11 @@ void Sensor_Communication_task(void *pvParameters)
} }
Write_Init(); Write_Init();
bufcut_Init(RS485_DATA_TMP, RS485_RX_BUF_COPY, 0, 8); bufcut_Init(RS485_DATA_TMP, RS485_RX_BUF_COPY, 0, 8);
bufcut_Init(RS485_DATA_TMP + 8, RS485_SUFFIX, 8, 12); // bufcut_Init(RS485_DATA_TMP + 8, RS485_SUFFIX, 8, 12);
RS485_DATA_TMP[8] = 0xFF;
RS485_DATA_TMP[9] = 0xFC;
RS485_DATA_TMP[10] = 0xFF;
RS485_DATA_TMP[11] = 0xFF;
RS485_1_Send_Data_1(RS485_DATA_TMP, 12); RS485_1_Send_Data_1(RS485_DATA_TMP, 12);
RX_BUF_Transfer(0, 8); RX_BUF_Transfer(0, 8);
} }
@ -382,16 +374,16 @@ void Sensor_Communication_task(void *pvParameters)
} }
} }
// if (red <= 1000 && blue <= 1000)
// {
if (red <= 1000 && blue <= 1000) // PWM_SetCompare1((red / 100.0 * 3.5 + 28)); // J9
{ // PWM_SetCompare2((blue / 100.0 * 3.5 + 28)); // J11
// PWM_SetCompare4((white / 100.0 * 3.5 + 28)); // J10
PWM_SetCompare1((red / 100.0 * 3.5 + 28)); // J9 // }
PWM_SetCompare2((blue / 100.0 * 3.5 + 28)); // J11
PWM_SetCompare4((white / 100.0 * 3.5 + 28)); // J10
}
RS485_RX_CNT = 0; RS485_RX_CNT = 0;
vTaskDelay(MAIN_TASK_PERIOD);
} }
} }

Loading…
Cancel
Save