给任务添加适当的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;
RS485_3_Init(9600);
delay_xms(100);
// delay_xms(100);
RS485_3_Send_Data(rs485speed, 8);
delay_xms(100);
// delay_xms(100);
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++)
{
// 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];
}
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_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;
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
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_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //???????2??
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
// // NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //???????2??
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
@ -273,7 +274,7 @@ void RS485_2_Init(u32 bound)
;
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_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
@ -384,6 +385,7 @@ void RS485_1_Send_Data_2(void)
sendbuf[2] = 0x05;
sendbuf[37] = 0xFF;
sendbuf[38] = 0xFC;
sendbuf[39] = 0xFF;
sendbuf[40] = 0xFF;
// u8 a;
@ -493,6 +495,8 @@ void RS485_1_Send_Data_2(void)
sendbuf[35] = crc_num1;
sendbuf[36] = crc_num2;
// u8 tmpabc[] = {0xAA, 0xBB, 0xCC};
// RS485_1_Send_Data(tmpabc, 3);
// only when modify happen, then send
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
#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
*/
@ -215,37 +219,17 @@ void Sensor_Communication_task(void *pvParameters)
// time=0;
// pingMqtt(MQTT_SOCK);
// }
now_stage = timelong_Compare(); //
// printf("%d %d\r\n",chour,cminute);
now_stage = timelong_Compare();
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);
// RX_BUF_Printf(128);
// if (RS485_RX_CNT == 0) {
// continue;
// }
bufcut_Init(RS485_RX_BUF_COPY, RS485_RX_BUF, 0, 128);
u8 c = 0;
RS485_RX_CNT = 0;
while (isAllZeros(RS485_RX_BUF_COPY, 128) == 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)
{
c++;
@ -267,8 +251,12 @@ void Sensor_Communication_task(void *pvParameters)
Batch_synchronization(&n, RS485_RX_BUF_COPY);
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 + 8, RS485_SUFFIX, 18, 22);
// RS485_1_Send_Data_1(RS485_DATA_TMP, 22);
RS485_DATA_TMP[18] = 0xFF;
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);
}
@ -344,7 +332,11 @@ void Sensor_Communication_task(void *pvParameters)
}
Write_Init();
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);
RX_BUF_Transfer(0, 8);
}
@ -382,16 +374,16 @@ void Sensor_Communication_task(void *pvParameters)
}
}
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
}
// 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
// }
RS485_RX_CNT = 0;
vTaskDelay(MAIN_TASK_PERIOD);
}
}

Loading…
Cancel
Save