主题中讨论的其他器件: HALCOGEN
你(们)好。
我在嵌入式项目中使用的是 TMS570LS1227。 我在其中使用 FreeRTOS V8.2.0。
该项目主要由3个任务组成:
int main (void) { /*用户代码 begin (3)*/ //初始化 DES 模块 gioInit(); spiInit(); sciInit(); vimInit(); adcInit(); TI_FEE (); _enable_interrupt_(); _enable_IRQ (); xTaskHandle xAcqTaskHandle、xAppeComTaskHandle、xSyncComTaskHandle、xSetResetTaskHandle; if (xTaskCreate (vAcqTask、"vAcqTaskHandle"、configMINIMAL_STACK_SIZE * 4、NULL、1、&xAcqTaskHandle)!= pdTRUE) { while (1);//无法创建任务 } if (xTaskCreate (vOxomTask、"vOxOxComTask"、configMINIMAL_STACK_SIZE*2、NULL、1、&xOxComTaskHandle)!= pdTRUE) { while (1);//无法创建任务 } if (xTaskCreate (vSyncComTask、"vSyncComTask"、configMINIMAL_STACK_SIZE * 5、NULL、1|portPRIVILEGE_BIT、&xSyncComTaskHandle)!= pdTRUE)//portPRIVILEGE_BIT { while (1);//无法创建任务 } //启动调度程序 vTaskStartScheduler(); //永久运行 while (1); /*用户代码结束*/ 返回0; }
Acq 任务负责从传感器获取数据。
已将数据 发送到 PC。
SyncCom 任务、负责接收来自 PC 的消息、更新 EEPROM 中的参数和应答 PC。
您可以看到、所有3个任务具有相同的优先级、但我向 SyncCom 任务添加了 portPRIVILEGE_BIT、因为需要使 EEPROM 写入函数正常工作。
使用我编写的以下函数修改 EEPROM:
void delay (void) { unsigned int dummycnt=0x000FFFU; 操作 { dummycnt--; } while (dummycnt>0); } void EEPROM_readValue (uint8_t* buffer_o、unsigned int length、uint8_t block 编号){ TI_fee_ReadSync (block_number、0、buffer_o、length); delay(); } void EEPROM_writeValue (uint8_t* buffer_I、uint8_t block 编号){ TI_fee_WriteSync (block_number、buffer_i); delay(); TI_fee_MainFunction (); } uint8_t tmp[576];//使用的最大块大小为576字节 void EEPROM_modifyParameter (uint8_t*参数、unsigned int parameter_size、unsigned int offset、uint8_t block_number){ const unsigned int max_block_size = 576; //1)从 EEPROM 获取相应的块并复制到 tmp EEPROM_readValue (tmp、max_block_size、block_number); //2)修改 tmp memcpy (tmp+offset* sizeof (double)、参数、parameter_size); //3)用 tmp 重新 wrtie 块 EEPROM_writeValue (tmp、block_number); }
我所面临的问题如下:一切都运行良好一段时间(我可以从 PC 发送参数、这些参数是在 EEPROM 中写入的。 断电后无问题:在 EEPROM 中正确读取参数、数据 perspers立场 正常)
但昨天、它突然停止工作:TI_FEE 写入同步函数不再工作(卡在模块状态=忙状态中)。 这种情况发生在 PCB 原生电路板上。 我在评估 HerculeLaunchpad 上尝试了相同的代码、结果相同:一段时间内工作正常、但在多次写入参数后、TI_FEE WriteSync 中断。
我使用 CCS 加载程序、"debug"选项卡中的选项指定不擦除 FlashBank 7、以便在2个程序加载之间保存参数。
通过重置此参数来擦除所有闪存扇区、解决了问题、但这并不令人满意:我希望产品能够使用、而无需重新刷写代码即可"修复"闪存...
我完全不知道这里有什么触觉。
最后一段信息、以防它有助于:
-当 SyncCom 任务在 EEPROM 中执行读/写操作时、中断(Gio、UART Rx)可触发。 但是、此任务是访问 EEPROM 的唯一任务。
-由于 SPI 问题的原因、我不得不通过将分频器增加到7来降低 VCLCK1。
已连接相应的 halcogen 配置