存储测试通过
This commit is contained in:
126
Src/freertos.c
126
Src/freertos.c
@@ -45,30 +45,6 @@
|
||||
|
||||
/* Private define ------------------------------------------------------------*/
|
||||
/* USER CODE BEGIN PD */
|
||||
|
||||
/* 存储测试统计 */
|
||||
typedef struct {
|
||||
uint16_t total;
|
||||
uint16_t passed;
|
||||
uint16_t failed;
|
||||
} storage_test_stats_t;
|
||||
|
||||
#define STORAGE_TEST_CHECK(cond, fmt, ...) do { \
|
||||
g_storage_stats.total++; \
|
||||
if (cond) { \
|
||||
g_storage_stats.passed++; \
|
||||
DBG_INFO(" [PASS] " fmt, ##__VA_ARGS__); \
|
||||
} else { \
|
||||
g_storage_stats.failed++; \
|
||||
DBG_ERROR(" [FAIL] " fmt, ##__VA_ARGS__); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define STORAGE_TEST_REPORT(name) do { \
|
||||
DBG_INFO("=== %s: %d/%d PASSED (failed=%d) ===", \
|
||||
name, g_storage_stats.passed, g_storage_stats.total, g_storage_stats.failed); \
|
||||
} while (0)
|
||||
|
||||
/* USER CODE END PD */
|
||||
|
||||
/* Private macro -------------------------------------------------------------*/
|
||||
@@ -78,8 +54,7 @@ typedef struct {
|
||||
|
||||
/* Private variables ---------------------------------------------------------*/
|
||||
/* USER CODE BEGIN Variables */
|
||||
static storage_test_stats_t g_storage_stats;
|
||||
static uint8_t s_perf_buf[4096];
|
||||
/* 存储测试变量(g_storage_stats / s_perf_buf)已迁至 test/storage_test_task.c */
|
||||
/* USER CODE END Variables */
|
||||
/* Definitions for defaultTask */
|
||||
osThreadId_t defaultTaskHandle;
|
||||
@@ -162,10 +137,10 @@ void MX_FREERTOS_Init(void) {
|
||||
defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
|
||||
|
||||
/* creation of netTask */
|
||||
//netTaskHandle = osThreadNew(StartNetTask, NULL, &netTask_attributes);
|
||||
netTaskHandle = osThreadNew(StartNetTask, NULL, &netTask_attributes);
|
||||
|
||||
/* creation of ftpTask */
|
||||
//ftpTaskHandle = osThreadNew(StartFtpTask, NULL, &ftpTask_attributes);
|
||||
ftpTaskHandle = osThreadNew(StartFtpTask, NULL, &ftpTask_attributes);
|
||||
|
||||
/* creation of ch395fTestTask */
|
||||
ch395fTestTaskHandle = osThreadNew(StartCh395fTestTask, NULL, &ch395fTestTask_attributes);
|
||||
@@ -193,99 +168,8 @@ void MX_FREERTOS_Init(void) {
|
||||
void StartDefaultTask(void *argument)
|
||||
{
|
||||
/* USER CODE BEGIN StartDefaultTask */
|
||||
|
||||
static FATFS fs;
|
||||
static FIL fil;
|
||||
static uint8_t work[FF_MAX_SS];
|
||||
char read_buf[64];
|
||||
const char *test_str = "Hello FatFS + dhara FTL!";
|
||||
|
||||
memset(&g_storage_stats, 0, sizeof(g_storage_stats));
|
||||
|
||||
/* ==================== FTL + FatFS 文件系统测试 ==================== */
|
||||
|
||||
FRESULT res = f_mount(&fs, "", 1);
|
||||
if (res == FR_NO_FILESYSTEM) {
|
||||
MKFS_PARM opts = {FM_FAT32, 0, 0, 0, 0};
|
||||
res = f_mkfs("", &opts, work, sizeof(work));
|
||||
STORAGE_TEST_CHECK(res == FR_OK, "f_mkfs");
|
||||
res = f_mount(&fs, "", 1);
|
||||
}
|
||||
STORAGE_TEST_CHECK(res == FR_OK, "f_mount");
|
||||
|
||||
if (res == FR_OK) {
|
||||
UINT bw, br;
|
||||
|
||||
res = f_open(&fil, "test.txt", FA_CREATE_ALWAYS | FA_WRITE);
|
||||
STORAGE_TEST_CHECK(res == FR_OK, "f_open(write)");
|
||||
if (res == FR_OK) {
|
||||
f_write(&fil, test_str, strlen(test_str), &bw);
|
||||
STORAGE_TEST_CHECK(bw == strlen(test_str), "f_write (%u bytes)", bw);
|
||||
f_close(&fil);
|
||||
|
||||
res = f_open(&fil, "test.txt", FA_READ);
|
||||
STORAGE_TEST_CHECK(res == FR_OK, "f_open(read)");
|
||||
if (res == FR_OK) {
|
||||
f_read(&fil, read_buf, sizeof(read_buf) - 1, &br);
|
||||
f_close(&fil);
|
||||
read_buf[br] = '\0';
|
||||
STORAGE_TEST_CHECK(br == strlen(test_str) && memcmp(test_str, read_buf, br) == 0,
|
||||
"data verify \"%s\"", read_buf);
|
||||
}
|
||||
}
|
||||
f_unlink("test.txt");
|
||||
}
|
||||
|
||||
/* ==================== FTL + FatFS 性能测试 ==================== */
|
||||
|
||||
DBG_INFO("=== Storage Test: Performance ===");
|
||||
|
||||
{
|
||||
FIL pfile;
|
||||
UINT pw, pr;
|
||||
uint32_t t0, tw, tr;
|
||||
uint32_t i;
|
||||
uint32_t total_kb = 128;
|
||||
uint32_t chunk = sizeof(s_perf_buf);
|
||||
uint32_t count = (total_kb * 1024) / chunk;
|
||||
|
||||
memset(s_perf_buf, 0xA5, sizeof(s_perf_buf));
|
||||
|
||||
/* 写入 */
|
||||
t0 = HAL_GetTick();
|
||||
if (f_open(&pfile, "perf.dat", FA_CREATE_ALWAYS | FA_WRITE) == FR_OK) {
|
||||
for (i = 0; i < count; i++) {
|
||||
f_write(&pfile, s_perf_buf, chunk, &pw);
|
||||
}
|
||||
f_close(&pfile);
|
||||
}
|
||||
tw = HAL_GetTick() - t0;
|
||||
|
||||
/* 读取 */
|
||||
t0 = HAL_GetTick();
|
||||
if (f_open(&pfile, "perf.dat", FA_READ) == FR_OK) {
|
||||
for (i = 0; i < count; i++) {
|
||||
f_read(&pfile, s_perf_buf, chunk, &pr);
|
||||
}
|
||||
f_close(&pfile);
|
||||
}
|
||||
tr = HAL_GetTick() - t0;
|
||||
|
||||
f_unlink("perf.dat");
|
||||
|
||||
if (tw > 0) {
|
||||
DBG_INFO(" Write: %lu KB in %lu ms = %lu KB/s",
|
||||
total_kb, tw, (total_kb * 1000) / tw);
|
||||
}
|
||||
if (tr > 0) {
|
||||
DBG_INFO(" Read: %lu KB in %lu ms = %lu KB/s",
|
||||
total_kb, tr, (total_kb * 1000) / tr);
|
||||
}
|
||||
}
|
||||
|
||||
/* ==================== 汇总报告 ==================== */
|
||||
|
||||
STORAGE_TEST_REPORT("Storage Tests");
|
||||
/* 测试任务已全部收归 ch395fTestTask 统一调度,本任务不再承担任何测试 */
|
||||
(void)argument;
|
||||
|
||||
for (;;) {
|
||||
osDelay(1000);
|
||||
|
||||
Reference in New Issue
Block a user