工具/软件:
大家好、
我们一段时间前开始测试 FAPI、当用于写入4096个扇区的256KB 闪存块的输入缓冲区中的结构成员数据类型发生变化时、数据缓冲区指针停止问题。
在添加 WA 调用来停止 Fapi\初始化随机故障 CPU、并授予 Flip DCSM 存储体1闪存访问权限以进行闪存存储体1写入之后。 现在、FAP 拒绝从与某些有效的代码非常相似的代码中将数据写入扇区地址、但其行为充其量也非常糟糕。
FapiAPI v1.56是否有任何调试修复、以便它处理实际的结构成员数据、而无需循环馈送数据地址输入读取数据缓冲区? 注意下面的两个捕获内容。
如果写入四个16位字64位段设置为对齐4、则从表面上看、提供给 Fapi_写入 地址的起始地址应自动递增指向用户数据缓冲区的指针、而无需 for 循环索引处理程序。 我们发现、当结构成员传递到写入闪存函数标头时、闪存写入能力糟糕地处理缓冲的不同数据类型。 或放置在函数中的缓冲区、用于将 Fapi_地址 数据写入给定起始地址处的256KB 闪存块。
一些问题似乎与 C2000编译器拒绝将结构成员数据类型(参数数据)链接到具有固定类型指针的缓冲区有关、例如{ ((uint16 *)&userParams) }。 当它链接复制缓冲区单元时、例如{(uint16 *) ReadBuffer[144])} Fapidata buffer 指针时、CCS v12.8.1调试显示缓冲区内容只是每个单元格中的地址、而不是结构成员数据。 从结构成员数据指针缓冲名称&userParams 复制的原始用户数据。
也许 是由编译器处理的一个简单任务。 然而,它拒绝将各种数据类型的结构成员数据复制到许多数组单元的缓冲区的固定指针中,所有这些都以整数形式结束。 或序列将缓冲区长度的写入地址提供给 Fapi_写入 地址数据。 如果针对不同的数据类型使用 Fapi_扼 流圈、则提供缓冲区长度的意义是什么? FAPI 可能不用于将用户数据存储到闪存扇区中、而主要是针对固件更新进行测试?
话虽如此、为什么 TI 没有为 C2000 MCU 类开发某种方法将用户数据写入所有示例中使用的结构成员数据指针的闪存? 不管 CCS、v7.2、v9.3还是 C2000编译器的版本如何、指向缓冲区的固定数据指针似乎都失败。 复制到 固定数据类型指向的用户定义缓冲区中的数据对于存储结构成员数据毫无用处。
// USER_Params float32_t sizeof = 286/2=144 (32bit) variables // Note: Since the TMS320C28x float is 32bits, // (to make it separately addressable), a byte is also 16 bits. // This yields results one may not expect. uint16_t ui16NumParameters = (sizeof(USER_Params)); float32_t * FapiUserParams[145]; //FAPI_FLASH_BUFFER // Get a pointer to the latest parameter block in flash. // pucBuffer = FlashPBGet(); // // See if a parameter block was found in flash. // if(pucBuffer || pucBuffer == NULL) { // // Loop through stored words of Fapi parameter block to copy its contents // from flash to SRAM. Roughly 144 parameters // for(ulIdx = 0; ulIdx < ui16NumParameters / 2; ulIdx++) { if(!bGetFapiReadData) { /* buffer stuct member user data */ *FapiUserParams[ulIdx] = ((float32_t *)&userParams_M1)[ulIdx]; } /* Get Fapi flash block data */ if(bGetFapiReadData) { ((uint8_t *)&userParams_M1)[ulIdx] = ((uint8_t *)pucBuffer)[ulIdx]; } } }