文件系统随机打开文件

File System Open Files Randomly

我的一位客户要求我播放 SD 卡中的声音。但是文件 selection 应该是随机的,因为该设备是用来吓唬野外动物的(动物不应该习惯声音模式)。我可以通过

生成随机数
void RNG_Generate_Numbers()
{
    HAL_RNG_GenerateRandomNumber(&hrng, &random_number.random_number1);
    HAL_RNG_GenerateRandomNumber(&hrng, &random_number.random_number2);
}

而且我可以通过

统计文件
void File_Find_File(file_manager_t *file_manage)
{

    file_manage->file_result = f_readdir(&file_manage->file_direction, &file_manage->file_info);

    if( (file_manage->file_result != FR_OK) || (file_manage->file_info.fname[0] == '[=11=]')  )
    {
        file_manage->file_counter = 0;
    }
    else
    {
    ++file_manage->file_counter;
    }

}

到这里为止一切都很好。但是当它随机涉及 select 个文件时,我找不到任何方法来做到这一点。感谢任何帮助。

编辑:这是 file_manager 结构;

typedef struct __file_manager /* struct tag */
{
FATFS drive_handler;
FIL file_handler;
FRESULT file_result;
uint8_t file_disk_status;
DIR file_direction;
FILINFO file_info;
uint8_t file_rx_buffer[512];
char file_current_dir[256];
uint32_t file_bytes_read;
uint32_t file_bytes_write;
size_t file_counter;
}file_manager_t ;

最简单的解决方案是将所有文件移动到一个目录中,并按从零开始的顺序命名每个文件。获得一个随机文件名就很简单了:

sprintf(file_name, "%d.mp3", rand() % my_files);