1 /*
2 * File : writespeed.c
3 * This file is part of RT-TestCase in RT-Thread RTOS
4 * COPYRIGHT (C) 2010, RT-Thread Development Team
5 *
6 * The license and distribution terms for this file may be
7 * found in the file LICENSE in this distribution or at
8 * http://www.rt-thread.org/license/LICENSE
9 *
10 * Change Logs:
11 * Date Author Notes
12 * 2010-02-10 Bernard first version
13 */
14 #include <rtthread.h>
15 #include <dfs_posix.h>
16
writespeed(const char * filename,int total_length,int block_size)17 void writespeed(const char* filename, int total_length, int block_size)
18 {
19 int fd, index, length;
20 char *buff_ptr;
21 rt_tick_t tick;
22
23 fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0);
24 if (fd < 0)
25 {
26 rt_kprintf("open file:%s failed\n", filename);
27 return;
28 }
29
30 buff_ptr = rt_malloc(block_size);
31 if (buff_ptr == RT_NULL)
32 {
33 rt_kprintf("no memory\n");
34 close(fd);
35
36 return;
37 }
38
39 /* prepare write data */
40 for (index = 0; index < block_size; index++)
41 {
42 buff_ptr[index] = index;
43 }
44 index = 0;
45
46 /* get the beginning tick */
47 tick = rt_tick_get();
48 while (index < total_length / block_size)
49 {
50 length = write(fd, buff_ptr, block_size);
51 if (length != block_size)
52 {
53 rt_kprintf("write failed\n");
54 break;
55 }
56
57 index ++;
58 }
59 tick = rt_tick_get() - tick;
60
61 /* close file and release memory */
62 close(fd);
63 rt_free(buff_ptr);
64
65 /* calculate write speed */
66 rt_kprintf("File write speed: %d byte/s\n", total_length / tick * RT_TICK_PER_SECOND);
67 }
68
69 #ifdef RT_USING_FINSH
70 #include <finsh.h>
71 FINSH_FUNCTION_EXPORT(writespeed, perform file write test);
72 #endif
73