This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/TM4C1292NCPDT:闪存写入驱动程序问题

Guru**** 2391045 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/696466/rtos-tm4c1292ncpdt-flash-write-driver-issue

器件型号:TM4C1292NCPDT

工具/软件:TI-RTOS

您好!

我将 tirtos_tivac_2_16_01_14和 TivaWare_C_Series-2.1.4.178用于工程。 我正在使用其中一个闪存段来存储应用的非易失性数据、该数据将从应用中的任务之一写入。 在我的应用中、此闪存读取和写入将很频繁。

在闪存写入一段时间后、整个闪存被损坏、并读取0xFFFFFFFF 的所有值。

我认为在闪存擦除和闪存写入之间可能会有任务切换、这会导致闪存数据损坏。 然后、我将闪存写入任务的优先级更改为更高并进行了检查、但问题仍然存在。 有人能不能建议这里发生了什么以及为什么它在几次写入后被破坏?

FlashProgram()和 FlashEras()是否被抢先? 如果是、我们如何阻止 TI RTOS 中的抢占?

请查找代码片段。

/*闪存写入*/ 
void flashWrite (boot_struct * stFlashData) { int ret; Semaphore_pend (Sem_flash_handle、BIOS_wait_forever); ret = FlashErase ((uint32_t) flash_common_memory_address); if (ret!= NULL) { System_printf ("闪存未成功擦除)(uint32_memory_address ); if}(unical_stret (unt)(unt)(unt)!(unsignal_handle )(unt)

/*闪存读取*/
boot_struct flashRead (boot_struct * stFlashData)
{
Semaphore_pend (Sem_flash_handle、BIOS_wait_forever);

stFlashData =(boot_struct *) flash_common_memory_address);

semaphore_post (Sem_flash_handle);
return * stFlashData;
} 


此致

巴拉

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对抢先式操作系统中的闪存存储器进行编程和擦除会产生影响。 您不能从正在擦除或编程的闪存组中读取或执行(在编程或擦除操作完成之前、读取或取指令将被保持)。 由于该器件上的四个闪存组是双向交错、因此您实际上拥有两个512KB 的闪存组。 闪存扇区相对较长的擦除时间将在操作系统中引起问题、因为当从具有正在擦除的扇区的闪存组读取时 CPU 被阻止时、中断无法处理。 可能的解决方案包括:
    将变量存储在仿真 EEPROM 存储器中
    对代码进行分区、以便只有闪存变量存储在内存的上部512KB、并且在进行擦除或程序操作时永远不会访问这些变量。
    3.使用外部闪存
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Bob