|

楼主 |
发表于 2025-8-26 15:21:58
|
显示全部楼层
// 6. 写入数据(支持超过512字节的分批写入)
write_res = FR_OK;
bytes_remaining = offset;
while (bytes_remaining > 0 && write_res == FR_OK)
{
// 计算本次要写入的字节数
bytes_to_write = (bytes_remaining > 511) ? 511 : bytes_remaining;
// 执行写入操作
write_res = f_write(&SDFile, write_ptr, bytes_to_write, &bytes_written);
// 检查写入结果
if (write_res != FR_OK)
{
USR_DEBUG("[SD] Write error: %d at attempt %lu, offset %lu\r\n", write_res, write_attempt, sd_total_bytes_written);
break;
}
if (bytes_written != bytes_to_write)
{
USR_DEBUG("[SD] Write incomplete: %lu/%lu bytes written\r\n", bytes_written, bytes_to_write);
write_res = FR_DISK_ERR;
break;
}
// 更新指针和计数器
write_ptr += bytes_written;
bytes_remaining -= bytes_written;
sd_total_bytes_written += bytes_written;
write_attempt++;
// 对于大文件写入,可以适当让出CPU时间
if (write_attempt % 8 == 0)
{
// taskYIELD();
}
osDelay(5);
}
// 检查最终写入结果
if (write_res != FR_OK || sd_total_bytes_written != offset)
{
USR_DEBUG("[SD] Final write error: res=%d, written=%lu/%lu\r\n", write_res, sd_total_bytes_written, offset);
f_close(&SDFile);
ret_val = USR_SD_WRITE_ERROR;
write_err_and_reset(&g_sd_config);
goto FAIL;
}
1.改成511正常了,还在找原因 |
|