|
版主救命啊,
型号 stm 32 f103r8
系统 freertos 申请12k内存
任务建了5个
问题,现在LogThread里面有个方法 :ExistAlarm( MAIN_CONTROL_TEMP_HandleType *pAllRegister, LOG_SAVE_HandleType *pSavedata)
这个里面有个一大堆的if语句,其中最后三个if就是下面贴过来的,但是只要加上这三个if,系统在运行到 AppTaskCreate (void)之前
在创建增值信号量的时候就hard fault了,但是屏蔽这三个if,就好了,
在写LogThread时,我一开始调试的时候就把 Main_Control_Communication_Thread 屏蔽了,因为此任务里有较多打印,为了使打印清晰,我就直接把
他屏蔽了,后来调好之后,我把 Main_Control_Communication_Thread 的屏蔽取消了(声明 Main_Control_Communication_Thread 此前运行正常),系统一运行就hard fault,、
把LogThread里下面的三个if屏蔽掉就可以正常运行了。
这个到底什么问题,如何调试。
{
#if 1
if((pAllRegister->heat2.alarm2 & BIT(2))&&(!alarmFlag.heater2_heat1WaterSwtichNOAlarm))
{
//printf("++++++++++++++++++++++pAllRegister->heat2.alarm2 & BIT(2) \r\n");
alarmFlag.heater2_heat1WaterSwtichNOAlarm = TRUE;
/*save to normal area*/
GetSaveData(pSavedata);
SPI_Flash_Write((u8 *)pSavedata, WriteAddr_normal, sizeof(LOG_SAVE_HandleType));
WriteAddr_normal += sizeof(LOG_SAVE_HandleType);
if(WriteAddr_normal == WriteAddr_NORMAL_END)
WriteAddr_normal = 0;
/*save to alarm area*/
SPI_Flash_Write((u8 *)pSavedata, WriteAddr_alarm, sizeof(LOG_SAVE_HandleType));
WriteAddr_alarm += sizeof(LOG_SAVE_HandleType);
if(WriteAddr_alarm == WriteAddr_ALARM_END)
WriteAddr_alarm = WriteAddr_ALARM_START;
}
if((pAllRegister->heat2.alarm2& BIT(3))&&(!alarmFlag.heater2_heat2WaterSwtichNOAlarm))
{
alarmFlag.heater2_heat2WaterSwtichNOAlarm = TRUE;
/*save to normal area*/
GetSaveData(pSavedata);
SPI_Flash_Write((u8 *)pSavedata, WriteAddr_normal, sizeof(LOG_SAVE_HandleType));
WriteAddr_normal += sizeof(LOG_SAVE_HandleType);
if(WriteAddr_normal == WriteAddr_NORMAL_END)
WriteAddr_normal = 0;
/*save to alarm area*/
SPI_Flash_Write((u8 *)pSavedata, WriteAddr_alarm, sizeof(LOG_SAVE_HandleType));
WriteAddr_alarm += sizeof(LOG_SAVE_HandleType);
if(WriteAddr_alarm == WriteAddr_ALARM_END)
WriteAddr_alarm = WriteAddr_ALARM_START;
}
if((pAllRegister->heat2.alarm2& BIT(4))&&(!alarmFlag.heater2_heat3WaterSwtichNOAlarm))
{
alarmFlag.heater2_heat3WaterSwtichNOAlarm = TRUE;
/*save to normal area*/
GetSaveData(pSavedata);
SPI_Flash_Write((u8 *)pSavedata, WriteAddr_normal, sizeof(LOG_SAVE_HandleType));
WriteAddr_normal += sizeof(LOG_SAVE_HandleType);
if(WriteAddr_normal == WriteAddr_NORMAL_END)
WriteAddr_normal = 0;
/*save to alarm area*/
SPI_Flash_Write((u8 *)pSavedata, WriteAddr_alarm, sizeof(LOG_SAVE_HandleType));
WriteAddr_alarm += sizeof(LOG_SAVE_HandleType);
if(WriteAddr_alarm == WriteAddr_ALARM_END)
WriteAddr_alarm = WriteAddr_ALARM_START;
}
#endif
任务列表
static void AppTaskCreate (void)
{
task1 = xTaskCreate( (TaskFunction_t )Usart_thread, /* 任务函数 */
"communication", /* 任务名 */
256, /* 任务栈大小,单位word,也就是4字节 */
NULL, /* 任务参数 */
3, /* 任务优先级*/
&xHandleCommunicationTask ); /* 任务句柄 */
task2 = xTaskCreate( (TaskFunction_t )Main_Control_Communication_Thread,
"mainCommuni",
512,
NULL,
3,
&xHandleMainCommuniTask );
task3 = xTaskCreate( (TaskFunction_t )MainControlTempThread,
"mainControlTemp",
256,
NULL,
3,
&xHandleMainControlTempTask);
task4 = xTaskCreate( (TaskFunction_t )vTaskGUI,
"GuiThread",
256,
NULL,
4,
&xHandleTaskGUI);
task5 = xTaskCreate( (TaskFunction_t )LogThread,
"logThread",
512,
NULL,
3,
&xHandleLogTask);
}
|
|