Merge pull request #4423 from mysterywolf/examples

[example] 格式化整理
This commit is contained in:
Bernard Xiong 2021-03-07 21:47:49 +08:00 committed by GitHub
commit db9b5fb5aa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
30 changed files with 1063 additions and 1063 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2006-2020, RT-Thread Development Team * Copyright (c) 2006-2021, RT-Thread Development Team
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2006-2020, RT-Thread Development Team * Copyright (c) 2006-2021, RT-Thread Development Team
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
* *
@ -46,9 +46,9 @@ void readspeed(const char* filename, int block_size)
} }
tick = rt_tick_get() - tick; tick = rt_tick_get() - tick;
/* close file and release memory */ /* close file and release memory */
close(fd); close(fd);
rt_free(buff_ptr); rt_free(buff_ptr);
/* calculate read speed */ /* calculate read speed */
rt_kprintf("File read speed: %d byte/s\n", total_length /tick * RT_TICK_PER_SECOND); rt_kprintf("File read speed: %d byte/s\n", total_length /tick * RT_TICK_PER_SECOND);

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2006-2020, RT-Thread Development Team * Copyright (c) 2006-2021, RT-Thread Development Team
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
* *
@ -17,21 +17,21 @@
/* file read write test */ /* file read write test */
void readwrite(const char* filename) void readwrite(const char* filename)
{ {
int fd; int fd;
int index, length; int index, length;
char* test_data; char* test_data;
char* buffer; char* buffer;
int block_size = TEST_DATA_LEN; int block_size = TEST_DATA_LEN;
/* open with write only & create */ /* open with write only & create */
fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0); fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0);
if (fd < 0) if (fd < 0)
{ {
rt_kprintf("open file for write failed\n"); rt_kprintf("open file for write failed\n");
return; return;
} }
test_data = rt_malloc(block_size); test_data = rt_malloc(block_size);
if (test_data == RT_NULL) if (test_data == RT_NULL)
{ {
rt_kprintf("no memory\n"); rt_kprintf("no memory\n");
@ -48,94 +48,94 @@ void readwrite(const char* filename)
return; return;
} }
/* prepare some data */ /* prepare some data */
for (index = 0; index < block_size; index ++) for (index = 0; index < block_size; index ++)
{ {
test_data[index] = index + 27; test_data[index] = index + 27;
} }
/* write to file */ /* write to file */
length = write(fd, test_data, block_size); length = write(fd, test_data, block_size);
if (length != block_size) if (length != block_size)
{ {
rt_kprintf("write data failed\n"); rt_kprintf("write data failed\n");
close(fd); close(fd);
goto __exit; goto __exit;
} }
/* close file */ /* close file */
close(fd); close(fd);
/* reopen the file with append to the end */ /* reopen the file with append to the end */
fd = open(filename, O_WRONLY | O_CREAT | O_APPEND, 0); fd = open(filename, O_WRONLY | O_CREAT | O_APPEND, 0);
if (fd < 0) if (fd < 0)
{ {
rt_kprintf("open file for append write failed\n"); rt_kprintf("open file for append write failed\n");
goto __exit;; goto __exit;;
} }
length = write(fd, test_data, block_size); length = write(fd, test_data, block_size);
if (length != block_size) if (length != block_size)
{ {
rt_kprintf("append write data failed\n"); rt_kprintf("append write data failed\n");
close(fd); close(fd);
goto __exit; goto __exit;
} }
/* close the file */ /* close the file */
close(fd); close(fd);
/* open the file for data validation. */ /* open the file for data validation. */
fd = open(filename, O_RDONLY, 0); fd = open(filename, O_RDONLY, 0);
if (fd < 0) if (fd < 0)
{ {
rt_kprintf("check: open file for read failed\n"); rt_kprintf("check: open file for read failed\n");
goto __exit; goto __exit;
} }
/* read the data (should be the data written by the first time ) */ /* read the data (should be the data written by the first time ) */
length = read(fd, buffer, block_size); length = read(fd, buffer, block_size);
if (length != block_size) if (length != block_size)
{ {
rt_kprintf("check: read file failed\n"); rt_kprintf("check: read file failed\n");
close(fd); close(fd);
goto __exit; goto __exit;
} }
/* validate */ /* validate */
for (index = 0; index < block_size; index ++) for (index = 0; index < block_size; index ++)
{ {
if (test_data[index] != buffer[index]) if (test_data[index] != buffer[index])
{ {
rt_kprintf("check: check data failed at %d\n", index); rt_kprintf("check: check data failed at %d\n", index);
close(fd); close(fd);
goto __exit; goto __exit;
} }
} }
/* read the data (should be the second time data) */ /* read the data (should be the second time data) */
length = read(fd, buffer, block_size); length = read(fd, buffer, block_size);
if (length != block_size) if (length != block_size)
{ {
rt_kprintf("check: read file failed\n"); rt_kprintf("check: read file failed\n");
close(fd); close(fd);
goto __exit; goto __exit;
} }
/* validate */ /* validate */
for (index = 0; index < block_size; index ++) for (index = 0; index < block_size; index ++)
{ {
if (test_data[index] != buffer[index]) if (test_data[index] != buffer[index])
{ {
rt_kprintf("check: check data failed at %d\n", index); rt_kprintf("check: check data failed at %d\n", index);
close(fd); close(fd);
goto __exit; goto __exit;
} }
} }
/* close the file */ /* close the file */
close(fd); close(fd);
/* print result */ /* print result */
rt_kprintf("read/write test successful!\n"); rt_kprintf("read/write test successful!\n");
__exit: __exit:
rt_free(test_data); rt_free(test_data);

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2006-2020, RT-Thread Development Team * Copyright (c) 2006-2021, RT-Thread Development Team
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
* *
@ -12,34 +12,34 @@
void seekdir_test(void) void seekdir_test(void)
{ {
DIR * dirp; DIR * dirp;
long save3 = 0; long save3 = 0;
int i = 0; int i = 0;
struct dirent *dp; struct dirent *dp;
dirp = opendir ("/"); dirp = opendir ("/");
save3 = telldir(dirp); save3 = telldir(dirp);
for (dp = readdir(dirp); dp != RT_NULL; dp = readdir(dirp)) for (dp = readdir(dirp); dp != RT_NULL; dp = readdir(dirp))
{ {
rt_kprintf("direntry: %s\n", dp->d_name); rt_kprintf("direntry: %s\n", dp->d_name);
/* save the pointer of the third directory */ /* save the pointer of the third directory */
if (i++ == 3) if (i++ == 3)
{ {
save3 = telldir(dirp); save3 = telldir(dirp);
} }
} }
/* get back to the third directory */ /* get back to the third directory */
seekdir (dirp, save3); seekdir (dirp, save3);
rt_kprintf("seek dientry to: %d\n", save3); rt_kprintf("seek dientry to: %d\n", save3);
for (dp = readdir(dirp); dp != RT_NULL; dp = readdir(dirp)) for (dp = readdir(dirp); dp != RT_NULL; dp = readdir(dirp))
{ {
rt_kprintf("direntry: %s\n", dp->d_name); rt_kprintf("direntry: %s\n", dp->d_name);
} }
/* close the directory */ /* close the directory */
closedir (dirp); closedir (dirp);
} }
#ifdef RT_USING_FINSH #ifdef RT_USING_FINSH

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2006-2020, RT-Thread Development Team * Copyright (c) 2006-2021, RT-Thread Development Team
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
* *

View File

@ -1,21 +1,21 @@
/* /*
* *
* *
* 3线线线 * 3线线线
* 线 * 线
*/ */
#include <rtthread.h> #include <rtthread.h>
#include "tc_comm.h" #include "tc_comm.h"
/* 指向线程控制块的指针 */ /* 指向线程控制块的指针 */
static rt_thread_t tid = RT_NULL; static rt_thread_t tid = RT_NULL;
/* 消息队列控制块 */ /* 消息队列控制块 */
static struct rt_messagequeue mq; static struct rt_messagequeue mq;
/* 消息队列中用到的放置消息的内存池 */ /* 消息队列中用到的放置消息的内存池 */
static char msg_pool[2048]; static char msg_pool[2048];
/* 定时器的控制块 */ /* 定时器的控制块 */
static struct rt_timer timer; static struct rt_timer timer;
static rt_uint16_t no = 0; static rt_uint16_t no = 0;
static void timer_timeout(void* parameter) static void timer_timeout(void* parameter)
@ -27,24 +27,24 @@ static void timer_timeout(void* parameter)
rt_mq_send(&mq, &buf[0], length); rt_mq_send(&mq, &buf[0], length);
} }
/* 线程入口函数 */ /* 线程入口函数 */
static void thread_entry(void* parameter) static void thread_entry(void* parameter)
{ {
char buf[64]; char buf[64];
rt_err_t result; rt_err_t result;
/* 初始化定时器 */ /* 初始化定时器 */
rt_timer_init(&timer, "timer", /* 定时器名字是 timer1 */ rt_timer_init(&timer, "timer", /* 定时器名字是 timer1 */
timer_timeout, /* 超时时回调的处理函数 */ timer_timeout, /* 超时时回调的处理函数 */
RT_NULL, /* 超时函数的入口参数 */ RT_NULL, /* 超时函数的入口参数 */
1, /* 定时长度以OS Tick为单位即1个OS Tick */ 1, /* 定时长度以OS Tick为单位即1个OS Tick */
RT_TIMER_FLAG_PERIODIC); /* 周期性定时器 */ RT_TIMER_FLAG_PERIODIC); /* 周期性定时器 */
while (1) while (1)
{ {
rt_memset(&buf[0], 0, sizeof(buf)); rt_memset(&buf[0], 0, sizeof(buf));
/* 从消息队列中接收消息 */ /* 从消息队列中接收消息 */
result = rt_mq_recv(&mq, &buf[0], sizeof(buf), 1); result = rt_mq_recv(&mq, &buf[0], sizeof(buf), 1);
if (result == RT_EOK) if (result == RT_EOK)
{ {
@ -59,16 +59,16 @@ static void thread_entry(void* parameter)
int timer_timeout_init() int timer_timeout_init()
{ {
/* 初始化消息队列 */ /* 初始化消息队列 */
rt_mq_init(&mq, "mqt", rt_mq_init(&mq, "mqt",
&msg_pool[0], /* 内存池指向msg_pool */ &msg_pool[0], /* 内存池指向msg_pool */
128 - sizeof(void*), /* 每个消息的大小是 128 - void* */ 128 - sizeof(void*), /* 每个消息的大小是 128 - void* */
sizeof(msg_pool), /* 内存池的大小是msg_pool的大小 */ sizeof(msg_pool), /* 内存池的大小是msg_pool的大小 */
RT_IPC_FLAG_FIFO); /* 如果有多个线程等待,按照先来先得到的方法分配消息 */ RT_IPC_FLAG_FIFO); /* 如果有多个线程等待,按照先来先得到的方法分配消息 */
/* 创建线程 */ /* 创建线程 */
tid = rt_thread_create("t", tid = rt_thread_create("t",
thread_entry, RT_NULL, /* 线程入口是thread_entry, 入口参数是RT_NULL */ thread_entry, RT_NULL, /* 线程入口是thread_entry, 入口参数是RT_NULL */
THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE); THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE);
if (tid != RT_NULL) if (tid != RT_NULL)
rt_thread_startup(tid); rt_thread_startup(tid);
@ -81,38 +81,38 @@ int timer_timeout_init()
#ifdef RT_USING_TC #ifdef RT_USING_TC
static void _tc_cleanup() static void _tc_cleanup()
{ {
/* 调度器上锁,上锁后,将不再切换到其他线程,仅响应中断 */ /* 调度器上锁,上锁后,将不再切换到其他线程,仅响应中断 */
rt_enter_critical(); rt_enter_critical();
/* 删除线程 */ /* 删除线程 */
if (tid != RT_NULL && tid->stat != RT_THREAD_CLOSE) if (tid != RT_NULL && tid->stat != RT_THREAD_CLOSE)
rt_thread_delete(tid); rt_thread_delete(tid);
/* 执行消息队列对象脱离 */ /* 执行消息队列对象脱离 */
rt_mq_detach(&mq); rt_mq_detach(&mq);
/* 执行定时器脱离 */ /* 执行定时器脱离 */
rt_timer_detach(&timer); rt_timer_detach(&timer);
/* 调度器解锁 */ /* 调度器解锁 */
rt_exit_critical(); rt_exit_critical();
/* 设置TestCase状态 */ /* 设置TestCase状态 */
tc_done(TC_STAT_PASSED); tc_done(TC_STAT_PASSED);
} }
int _tc_timer_timeout() int _tc_timer_timeout()
{ {
/* 设置TestCase清理回调函数 */ /* 设置TestCase清理回调函数 */
tc_cleanup(_tc_cleanup); tc_cleanup(_tc_cleanup);
timer_timeout_init(); timer_timeout_init();
/* 返回TestCase运行的最长时间 */ /* 返回TestCase运行的最长时间 */
return 100; return 100;
} }
/* 输出函数命令到finsh shell中 */ /* 输出函数命令到finsh shell中 */
FINSH_FUNCTION_EXPORT(_tc_timer_timeout, a thread timer testcase); FINSH_FUNCTION_EXPORT(_tc_timer_timeout, a thread timer testcase);
#else #else
/* 用户应用入口 */ /* 用户应用入口 */
int rt_application_init() int rt_application_init()
{ {
timer_timeout_init(); timer_timeout_init();

View File

@ -11,46 +11,46 @@
#include <dirent.h> #include <dirent.h>
int libc_dirent() int libc_dirent()
{ {
DIR * dirp; DIR * dirp;
long int save3 = 0; long int save3 = 0;
long int cur; long int cur;
int i = 0; int i = 0;
int result = 0; int result = 0;
struct dirent *dp; struct dirent *dp;
dirp = opendir("/"); dirp = opendir("/");
for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp))
{ {
/* save position 3 (after fourth entry) */ /* save position 3 (after fourth entry) */
if (i++ == 3) if (i++ == 3)
save3 = telldir(dirp); save3 = telldir(dirp);
printf("%s\n", dp->d_name); printf("%s\n", dp->d_name);
/* stop at 400 (just to make sure dirp->__offset and dirp->__size are /* stop at 400 (just to make sure dirp->__offset and dirp->__size are
scrambled */ scrambled */
if (i == 400) if (i == 400)
break; break;
} }
printf("going back past 4-th entry...\n"); printf("going back past 4-th entry...\n");
/* go back to saved entry */ /* go back to saved entry */
seekdir(dirp, save3); seekdir(dirp, save3);
/* Check whether telldir equals to save3 now. */ /* Check whether telldir equals to save3 now. */
cur = telldir(dirp); cur = telldir(dirp);
if (cur != save3) if (cur != save3)
{ {
printf("seekdir (d, %ld); telldir (d) == %ld\n", save3, cur); printf("seekdir (d, %ld); telldir (d) == %ld\n", save3, cur);
result = 1; result = 1;
} }
/* print remaining files (3-last) */ /* print remaining files (3-last) */
for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp))
printf("%s\n", dp->d_name); printf("%s\n", dp->d_name);
closedir(dirp); closedir(dirp);
return result; return result;
} }
FINSH_FUNCTION_EXPORT(libc_dirent, dirent test for libc); FINSH_FUNCTION_EXPORT(libc_dirent, dirent test for libc);

View File

@ -10,9 +10,9 @@
int libc_env() int libc_env()
{ {
printf("PATH=%s\n", getenv("PATH")); printf("PATH=%s\n", getenv("PATH"));
putenv("foo=bar"); putenv("foo=bar");
printf("foo=%s\n", getenv("foo")); printf("foo=%s\n", getenv("foo"));
return 0; return 0;
} }
FINSH_FUNCTION_EXPORT(libc_env, get/set_env test); FINSH_FUNCTION_EXPORT(libc_env, get/set_env test);

View File

@ -9,29 +9,29 @@
static void *process(void * arg) static void *process(void * arg)
{ {
int i; int i;
printf("Starting process %s\n", (char *)arg); printf("Starting process %s\n", (char *)arg);
for (i = 0; i < 10000; i++) for (i = 0; i < 10000; i++)
write(1, (char *) arg, 1); write(1, (char *) arg, 1);
return NULL; return NULL;
} }
#define sucfail(r) (r != 0 ? "failed" : "succeeded") #define sucfail(r) (r != 0 ? "failed" : "succeeded")
int libc_ex1(void) int libc_ex1(void)
{ {
int pret, ret = 0; int pret, ret = 0;
pthread_t th_a, th_b; pthread_t th_a, th_b;
void *retval; void *retval;
ret += (pret = pthread_create(&th_a, NULL, process, (void *)"a")); ret += (pret = pthread_create(&th_a, NULL, process, (void *)"a"));
printf("create a %s %d\n", sucfail(pret), pret); printf("create a %s %d\n", sucfail(pret), pret);
ret += (pret = pthread_create(&th_b, NULL, process, (void *)"b")); ret += (pret = pthread_create(&th_b, NULL, process, (void *)"b"));
printf("create b %s %d\n", sucfail(pret), pret); printf("create b %s %d\n", sucfail(pret), pret);
ret += (pret = pthread_join(th_a, &retval)); ret += (pret = pthread_join(th_a, &retval));
printf("join a %s %d\n", sucfail(pret), pret); printf("join a %s %d\n", sucfail(pret), pret);
ret += (pret = pthread_join(th_b, &retval)); ret += (pret = pthread_join(th_b, &retval));
printf("join b %s %d\n", sucfail(pret), pret); printf("join b %s %d\n", sucfail(pret), pret);
return ret; return ret;
} }
#include <finsh.h> #include <finsh.h>
FINSH_FUNCTION_EXPORT(libc_ex1, example 1 for libc); FINSH_FUNCTION_EXPORT(libc_ex1, example 1 for libc);

View File

@ -7,31 +7,31 @@
#define usleep rt_thread_sleep #define usleep rt_thread_sleep
static void *test_thread(void *v_param) { static void *test_thread(void *v_param) {
return NULL; return NULL;
} }
int libc_ex6(void) { int libc_ex6(void) {
unsigned long count; unsigned long count;
setvbuf(stdout, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0);
for (count = 0; count < 2000; ++count) { for (count = 0; count < 2000; ++count) {
pthread_t thread; pthread_t thread;
int status; int status;
status = pthread_create(&thread, NULL, test_thread, NULL); status = pthread_create(&thread, NULL, test_thread, NULL);
if (status != 0) { if (status != 0) {
printf("status = %d, count = %lu: %s\n", status, count, strerror( printf("status = %d, count = %lu: %s\n", status, count, strerror(
errno)); errno));
return 1; return 1;
} else { } else {
printf("count = %lu\n", count); printf("count = %lu\n", count);
} }
/* pthread_detach (thread); */ /* pthread_detach (thread); */
pthread_join(thread, NULL); pthread_join(thread, NULL);
usleep(10); usleep(10);
} }
return 0; return 0;
} }
#include <finsh.h> #include <finsh.h>
FINSH_FUNCTION_EXPORT(libc_ex6, example 6 for libc); FINSH_FUNCTION_EXPORT(libc_ex6, example 6 for libc);

View File

@ -14,88 +14,88 @@
/* Our event variable using a condition variable contruct. */ /* Our event variable using a condition variable contruct. */
typedef struct { typedef struct {
pthread_mutex_t mutex; pthread_mutex_t mutex;
pthread_cond_t cond; pthread_cond_t cond;
int flag; int flag;
} event_t; } event_t;
/* Global event to signal main thread the timeout of the child thread. */ /* Global event to signal main thread the timeout of the child thread. */
event_t main_event; event_t main_event;
static void *test_thread(void *ms_param) { static void *test_thread(void *ms_param) {
int status = 0; int status = 0;
event_t foo; event_t foo;
struct timespec time; struct timespec time;
struct timeval now; struct timeval now;
long ms = (long) ms_param; long ms = (long) ms_param;
/* initialize cond var */ /* initialize cond var */
pthread_cond_init(&foo.cond, NULL); pthread_cond_init(&foo.cond, NULL);
pthread_mutex_init(&foo.mutex, NULL); pthread_mutex_init(&foo.mutex, NULL);
foo.flag = 0; foo.flag = 0;
/* set the time out value */ /* set the time out value */
printf("waiting %ld ms ...\n", ms); printf("waiting %ld ms ...\n", ms);
gettimeofday(&now, NULL); gettimeofday(&now, NULL);
time.tv_sec = now.tv_sec + ms / 1000 + (now.tv_usec + (ms % 1000) * 1000) time.tv_sec = now.tv_sec + ms / 1000 + (now.tv_usec + (ms % 1000) * 1000)
/ 1000000; / 1000000;
time.tv_nsec = ((now.tv_usec + (ms % 1000) * 1000) % 1000000) * 1000; time.tv_nsec = ((now.tv_usec + (ms % 1000) * 1000) % 1000000) * 1000;
/* Just use this to test the time out. The cond var is never signaled. */ /* Just use this to test the time out. The cond var is never signaled. */
pthread_mutex_lock(&foo.mutex); pthread_mutex_lock(&foo.mutex);
while (foo.flag == 0 && status != ETIMEDOUT) { while (foo.flag == 0 && status != ETIMEDOUT) {
status = pthread_cond_timedwait(&foo.cond, &foo.mutex, &time); status = pthread_cond_timedwait(&foo.cond, &foo.mutex, &time);
} }
pthread_mutex_unlock(&foo.mutex); pthread_mutex_unlock(&foo.mutex);
/* post the main event */ /* post the main event */
pthread_mutex_lock(&main_event.mutex); pthread_mutex_lock(&main_event.mutex);
main_event.flag = 1; main_event.flag = 1;
pthread_cond_signal(&main_event.cond); pthread_cond_signal(&main_event.cond);
pthread_mutex_unlock(&main_event.mutex); pthread_mutex_unlock(&main_event.mutex);
/* that's it, bye */ /* that's it, bye */
return (void*) status; return (void*) status;
} }
int libc_ex7(void) { int libc_ex7(void) {
unsigned long count; unsigned long count;
setvbuf(stdout, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0);
/* initialize main event cond var */ /* initialize main event cond var */
pthread_cond_init(&main_event.cond, NULL); pthread_cond_init(&main_event.cond, NULL);
pthread_mutex_init(&main_event.mutex, NULL); pthread_mutex_init(&main_event.mutex, NULL);
main_event.flag = 0; main_event.flag = 0;
for (count = 0; count < 20; ++count) { for (count = 0; count < 20; ++count) {
pthread_t thread; pthread_t thread;
int status; int status;
/* pass down the milli-second timeout in the void* param */ /* pass down the milli-second timeout in the void* param */
status = pthread_create(&thread, NULL, test_thread, (void*) (count status = pthread_create(&thread, NULL, test_thread, (void*) (count
* 100)); * 100));
if (status != 0) { if (status != 0) {
printf("status = %d, count = %lu: %s\n", status, count, strerror( printf("status = %d, count = %lu: %s\n", status, count, strerror(
errno)); errno));
return 1; return 1;
} else { } else {
/* wait for the event posted by the child thread */ /* wait for the event posted by the child thread */
pthread_mutex_lock(&main_event.mutex); pthread_mutex_lock(&main_event.mutex);
while (main_event.flag == 0) { while (main_event.flag == 0) {
pthread_cond_wait(&main_event.cond, &main_event.mutex); pthread_cond_wait(&main_event.cond, &main_event.mutex);
} }
main_event.flag = 0; main_event.flag = 0;
pthread_mutex_unlock(&main_event.mutex); pthread_mutex_unlock(&main_event.mutex);
printf("count = %lu\n", count); printf("count = %lu\n", count);
} }
usleep(10); usleep(10);
} }
return 0; return 0;
} }
#include <finsh.h> #include <finsh.h>
FINSH_FUNCTION_EXPORT(libc_ex7, example 7 for libc); FINSH_FUNCTION_EXPORT(libc_ex7, example 7 for libc);

View File

@ -14,503 +14,503 @@
const char* text = "this is a test string\n"; const char* text = "this is a test string\n";
void libc_fstat() void libc_fstat()
{ {
int fd; int fd;
struct stat s; struct stat s;
fd = open("/tmp/tt.txt", O_WRONLY | O_CREAT, 0); fd = open("/tmp/tt.txt", O_WRONLY | O_CREAT, 0);
if (fd < 0) if (fd < 0)
{ {
printf("open failed\n"); printf("open failed\n");
return; return;
} }
write(fd, text, strlen(text) + 1); write(fd, text, strlen(text) + 1);
printf("begin: %d\n", lseek(fd, 0, SEEK_SET)); printf("begin: %d\n", lseek(fd, 0, SEEK_SET));
printf("end: %d\n", lseek(fd, 0, SEEK_END)); printf("end: %d\n", lseek(fd, 0, SEEK_END));
printf("fstat result: %d\n", fstat(fd, &s)); printf("fstat result: %d\n", fstat(fd, &s));
close(fd); close(fd);
} }
FINSH_FUNCTION_EXPORT(libc_fstat, fstat test for libc); FINSH_FUNCTION_EXPORT(libc_fstat, fstat test for libc);
void libc_lseek() void libc_lseek()
{ {
int fd; int fd;
fd = open("/tmp/tt.txt", O_WRONLY | O_CREAT, 0); fd = open("/tmp/tt.txt", O_WRONLY | O_CREAT, 0);
if (fd < 0) if (fd < 0)
{ {
printf("open failed\n"); printf("open failed\n");
return; return;
} }
write(fd, text, strlen(text) + 1); write(fd, text, strlen(text) + 1);
printf("begin: %d\n", lseek(fd, 0, SEEK_SET)); printf("begin: %d\n", lseek(fd, 0, SEEK_SET));
printf("end: %d\n", lseek(fd, 0, SEEK_END)); printf("end: %d\n", lseek(fd, 0, SEEK_END));
close(fd); close(fd);
} }
FINSH_FUNCTION_EXPORT(libc_lseek, lseek test for libc); FINSH_FUNCTION_EXPORT(libc_lseek, lseek test for libc);
void sleep(int tick) void sleep(int tick)
{ {
rt_thread_sleep(tick); rt_thread_sleep(tick);
} }
int libc_fseek(void) int libc_fseek(void)
{ {
const char *tmpdir; const char *tmpdir;
char *fname; char *fname;
int fd; int fd;
FILE *fp; FILE *fp;
const char outstr[] = "hello world!\n"; const char outstr[] = "hello world!\n";
char strbuf[sizeof outstr]; char strbuf[sizeof outstr];
char buf[200]; char buf[200];
struct stat st1; struct stat st1;
struct stat st2; struct stat st2;
int result = 0; int result = 0;
tmpdir = getenv("TMPDIR"); tmpdir = getenv("TMPDIR");
if (tmpdir == NULL || tmpdir[0] == '\0') if (tmpdir == NULL || tmpdir[0] == '\0')
tmpdir = "/tmp"; tmpdir = "/tmp";
asprintf(&fname, "%s/tst-fseek.XXXXXX", tmpdir); asprintf(&fname, "%s/tst-fseek.XXXXXX", tmpdir);
if (fname == NULL) if (fname == NULL)
{ {
fprintf(stderr, "cannot generate name for temporary file: %s\n", fprintf(stderr, "cannot generate name for temporary file: %s\n",
strerror(errno)); strerror(errno));
return 1; return 1;
} }
/* Create a temporary file. */ /* Create a temporary file. */
fd = mkstemp(fname); fd = mkstemp(fname);
if (fd == -1) if (fd == -1)
{ {
fprintf(stderr, "cannot open temporary file: %s\n", strerror(errno)); fprintf(stderr, "cannot open temporary file: %s\n", strerror(errno));
return 1; return 1;
} }
fp = fdopen(fd, "w+"); fp = fdopen(fd, "w+");
if (fp == NULL) if (fp == NULL)
{ {
fprintf(stderr, "cannot get FILE for temporary file: %s\n", strerror( fprintf(stderr, "cannot get FILE for temporary file: %s\n", strerror(
errno)); errno));
return 1; return 1;
} }
setbuffer(fp, strbuf, sizeof(outstr) - 1); setbuffer(fp, strbuf, sizeof(outstr) - 1);
if (fwrite(outstr, sizeof(outstr) - 1, 1, fp) != 1) if (fwrite(outstr, sizeof(outstr) - 1, 1, fp) != 1)
{ {
printf("%d: write error\n", __LINE__); printf("%d: write error\n", __LINE__);
result = 1; result = 1;
goto out; goto out;
} }
/* The EOF flag must be reset. */ /* The EOF flag must be reset. */
if (fgetc(fp) != EOF) if (fgetc(fp) != EOF)
{ {
printf("%d: managed to read at end of file\n", __LINE__); printf("%d: managed to read at end of file\n", __LINE__);
result = 1; result = 1;
} }
else if (!feof(fp)) else if (!feof(fp))
{ {
printf("%d: EOF flag not set\n", __LINE__); printf("%d: EOF flag not set\n", __LINE__);
result = 1; result = 1;
} }
if (fseek(fp, 0, SEEK_CUR) != 0) if (fseek(fp, 0, SEEK_CUR) != 0)
{ {
printf("%d: fseek(fp, 0, SEEK_CUR) failed\n", __LINE__); printf("%d: fseek(fp, 0, SEEK_CUR) failed\n", __LINE__);
result = 1; result = 1;
} }
else if (feof(fp)) else if (feof(fp))
{ {
printf("%d: fseek() didn't reset EOF flag\n", __LINE__); printf("%d: fseek() didn't reset EOF flag\n", __LINE__);
result = 1; result = 1;
} }
/* Do the same for fseeko(). */ /* Do the same for fseeko(). */
if (fgetc(fp) != EOF) if (fgetc(fp) != EOF)
{ {
printf("%d: managed to read at end of file\n", __LINE__); printf("%d: managed to read at end of file\n", __LINE__);
result = 1; result = 1;
} }
else if (!feof(fp)) else if (!feof(fp))
{ {
printf("%d: EOF flag not set\n", __LINE__); printf("%d: EOF flag not set\n", __LINE__);
result = 1; result = 1;
} }
if (fseeko(fp, 0, SEEK_CUR) != 0) if (fseeko(fp, 0, SEEK_CUR) != 0)
{ {
printf("%d: fseek(fp, 0, SEEK_CUR) failed\n", __LINE__); printf("%d: fseek(fp, 0, SEEK_CUR) failed\n", __LINE__);
result = 1; result = 1;
} }
else if (feof(fp)) else if (feof(fp))
{ {
printf("%d: fseek() didn't reset EOF flag\n", __LINE__); printf("%d: fseek() didn't reset EOF flag\n", __LINE__);
result = 1; result = 1;
} }
/* Go back to the beginning of the file: absolute. */ /* Go back to the beginning of the file: absolute. */
if (fseek(fp, 0, SEEK_SET) != 0) if (fseek(fp, 0, SEEK_SET) != 0)
{ {
printf("%d: fseek(fp, 0, SEEK_SET) failed\n", __LINE__); printf("%d: fseek(fp, 0, SEEK_SET) failed\n", __LINE__);
result = 1; result = 1;
} }
else if (fflush(fp) != 0) else if (fflush(fp) != 0)
{ {
printf("%d: fflush() failed\n", __LINE__); printf("%d: fflush() failed\n", __LINE__);
result = 1; result = 1;
} }
else if (lseek(fd, 0, SEEK_CUR) != 0) else if (lseek(fd, 0, SEEK_CUR) != 0)
{ {
int pos = lseek(fd, 0, SEEK_CUR); int pos = lseek(fd, 0, SEEK_CUR);
printf("%d: lseek() returned different position, pos %d\n", __LINE__, printf("%d: lseek() returned different position, pos %d\n", __LINE__,
pos); pos);
result = 1; result = 1;
} }
else if (fread(buf, sizeof(outstr) - 1, 1, fp) != 1) else if (fread(buf, sizeof(outstr) - 1, 1, fp) != 1)
{ {
printf("%d: fread() failed\n", __LINE__); printf("%d: fread() failed\n", __LINE__);
result = 1; result = 1;
} }
else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0) else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0)
{ {
printf("%d: content after fseek(,,SEEK_SET) wrong\n", __LINE__); printf("%d: content after fseek(,,SEEK_SET) wrong\n", __LINE__);
result = 1; result = 1;
} }
/* Now with fseeko. */ /* Now with fseeko. */
if (fseeko(fp, 0, SEEK_SET) != 0) if (fseeko(fp, 0, SEEK_SET) != 0)
{ {
printf("%d: fseeko(fp, 0, SEEK_SET) failed\n", __LINE__); printf("%d: fseeko(fp, 0, SEEK_SET) failed\n", __LINE__);
result = 1; result = 1;
} }
else if (fflush(fp) != 0) else if (fflush(fp) != 0)
{ {
printf("%d: fflush() failed\n", __LINE__); printf("%d: fflush() failed\n", __LINE__);
result = 1; result = 1;
} }
else if (lseek(fd, 0, SEEK_CUR) != 0) else if (lseek(fd, 0, SEEK_CUR) != 0)
{ {
printf("%d: lseek() returned different position\n", __LINE__); printf("%d: lseek() returned different position\n", __LINE__);
result = 1; result = 1;
} }
else if (fread(buf, sizeof(outstr) - 1, 1, fp) != 1) else if (fread(buf, sizeof(outstr) - 1, 1, fp) != 1)
{ {
printf("%d: fread() failed\n", __LINE__); printf("%d: fread() failed\n", __LINE__);
result = 1; result = 1;
} }
else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0) else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0)
{ {
printf("%d: content after fseeko(,,SEEK_SET) wrong\n", __LINE__); printf("%d: content after fseeko(,,SEEK_SET) wrong\n", __LINE__);
result = 1; result = 1;
} }
/* Go back to the beginning of the file: relative. */ /* Go back to the beginning of the file: relative. */
if (fseek(fp, -((int) sizeof(outstr) - 1), SEEK_CUR) != 0) if (fseek(fp, -((int) sizeof(outstr) - 1), SEEK_CUR) != 0)
{ {
printf("%d: fseek(fp, 0, SEEK_SET) failed\n", __LINE__); printf("%d: fseek(fp, 0, SEEK_SET) failed\n", __LINE__);
result = 1; result = 1;
} }
else if (fflush(fp) != 0) else if (fflush(fp) != 0)
{ {
printf("%d: fflush() failed\n", __LINE__); printf("%d: fflush() failed\n", __LINE__);
result = 1; result = 1;
} }
else if (lseek(fd, 0, SEEK_CUR) != 0) else if (lseek(fd, 0, SEEK_CUR) != 0)
{ {
printf("%d: lseek() returned different position\n", __LINE__); printf("%d: lseek() returned different position\n", __LINE__);
result = 1; result = 1;
} }
else if (fread(buf, sizeof(outstr) - 1, 1, fp) != 1) else if (fread(buf, sizeof(outstr) - 1, 1, fp) != 1)
{ {
printf("%d: fread() failed\n", __LINE__); printf("%d: fread() failed\n", __LINE__);
result = 1; result = 1;
} }
else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0) else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0)
{ {
printf("%d: content after fseek(,,SEEK_SET) wrong\n", __LINE__); printf("%d: content after fseek(,,SEEK_SET) wrong\n", __LINE__);
result = 1; result = 1;
} }
/* Now with fseeko. */ /* Now with fseeko. */
if (fseeko(fp, -((int) sizeof(outstr) - 1), SEEK_CUR) != 0) if (fseeko(fp, -((int) sizeof(outstr) - 1), SEEK_CUR) != 0)
{ {
printf("%d: fseeko(fp, 0, SEEK_SET) failed\n", __LINE__); printf("%d: fseeko(fp, 0, SEEK_SET) failed\n", __LINE__);
result = 1; result = 1;
} }
else if (fflush(fp) != 0) else if (fflush(fp) != 0)
{ {
printf("%d: fflush() failed\n", __LINE__); printf("%d: fflush() failed\n", __LINE__);
result = 1; result = 1;
} }
else if (lseek(fd, 0, SEEK_CUR) != 0) else if (lseek(fd, 0, SEEK_CUR) != 0)
{ {
printf("%d: lseek() returned different position\n", __LINE__); printf("%d: lseek() returned different position\n", __LINE__);
result = 1; result = 1;
} }
else if (fread(buf, sizeof(outstr) - 1, 1, fp) != 1) else if (fread(buf, sizeof(outstr) - 1, 1, fp) != 1)
{ {
printf("%d: fread() failed\n", __LINE__); printf("%d: fread() failed\n", __LINE__);
result = 1; result = 1;
} }
else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0) else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0)
{ {
printf("%d: content after fseeko(,,SEEK_SET) wrong\n", __LINE__); printf("%d: content after fseeko(,,SEEK_SET) wrong\n", __LINE__);
result = 1; result = 1;
} }
/* Go back to the beginning of the file: from the end. */ /* Go back to the beginning of the file: from the end. */
if (fseek(fp, -((int) sizeof(outstr) - 1), SEEK_END) != 0) if (fseek(fp, -((int) sizeof(outstr) - 1), SEEK_END) != 0)
{ {
printf("%d: fseek(fp, 0, SEEK_SET) failed\n", __LINE__); printf("%d: fseek(fp, 0, SEEK_SET) failed\n", __LINE__);
result = 1; result = 1;
} }
else if (fflush(fp) != 0) else if (fflush(fp) != 0)
{ {
printf("%d: fflush() failed\n", __LINE__); printf("%d: fflush() failed\n", __LINE__);
result = 1; result = 1;
} }
else if (lseek(fd, 0, SEEK_CUR) != 0) else if (lseek(fd, 0, SEEK_CUR) != 0)
{ {
printf("%d: lseek() returned different position\n", __LINE__); printf("%d: lseek() returned different position\n", __LINE__);
result = 1; result = 1;
} }
else if (fread(buf, sizeof(outstr) - 1, 1, fp) != 1) else if (fread(buf, sizeof(outstr) - 1, 1, fp) != 1)
{ {
printf("%d: fread() failed\n", __LINE__); printf("%d: fread() failed\n", __LINE__);
result = 1; result = 1;
} }
else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0) else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0)
{ {
printf("%d: content after fseek(,,SEEK_SET) wrong\n", __LINE__); printf("%d: content after fseek(,,SEEK_SET) wrong\n", __LINE__);
result = 1; result = 1;
} }
/* Now with fseeko. */ /* Now with fseeko. */
if (fseeko(fp, -((int) sizeof(outstr) - 1), SEEK_END) != 0) if (fseeko(fp, -((int) sizeof(outstr) - 1), SEEK_END) != 0)
{ {
printf("%d: fseeko(fp, 0, SEEK_SET) failed\n", __LINE__); printf("%d: fseeko(fp, 0, SEEK_SET) failed\n", __LINE__);
result = 1; result = 1;
} }
else if (fflush(fp) != 0) else if (fflush(fp) != 0)
{ {
printf("%d: fflush() failed\n", __LINE__); printf("%d: fflush() failed\n", __LINE__);
result = 1; result = 1;
} }
else if (lseek(fd, 0, SEEK_CUR) != 0) else if (lseek(fd, 0, SEEK_CUR) != 0)
{ {
printf("%d: lseek() returned different position\n", __LINE__); printf("%d: lseek() returned different position\n", __LINE__);
result = 1; result = 1;
} }
else if (fread(buf, sizeof(outstr) - 1, 1, fp) != 1) else if (fread(buf, sizeof(outstr) - 1, 1, fp) != 1)
{ {
printf("%d: fread() failed\n", __LINE__); printf("%d: fread() failed\n", __LINE__);
result = 1; result = 1;
} }
else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0) else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0)
{ {
printf("%d: content after fseeko(,,SEEK_SET) wrong\n", __LINE__); printf("%d: content after fseeko(,,SEEK_SET) wrong\n", __LINE__);
result = 1; result = 1;
} }
if (fwrite(outstr, sizeof(outstr) - 1, 1, fp) != 1) if (fwrite(outstr, sizeof(outstr) - 1, 1, fp) != 1)
{ {
printf("%d: write error 2\n", __LINE__); printf("%d: write error 2\n", __LINE__);
result = 1; result = 1;
goto out; goto out;
} }
if (fwrite(outstr, sizeof(outstr) - 1, 1, fp) != 1) if (fwrite(outstr, sizeof(outstr) - 1, 1, fp) != 1)
{ {
printf("%d: write error 3\n", __LINE__); printf("%d: write error 3\n", __LINE__);
result = 1; result = 1;
goto out; goto out;
} }
if (fwrite(outstr, sizeof(outstr) - 1, 1, fp) != 1) if (fwrite(outstr, sizeof(outstr) - 1, 1, fp) != 1)
{ {
printf("%d: write error 4\n", __LINE__); printf("%d: write error 4\n", __LINE__);
result = 1; result = 1;
goto out; goto out;
} }
if (fwrite(outstr, sizeof(outstr) - 1, 1, fp) != 1) if (fwrite(outstr, sizeof(outstr) - 1, 1, fp) != 1)
{ {
printf("%d: write error 5\n", __LINE__); printf("%d: write error 5\n", __LINE__);
result = 1; result = 1;
goto out; goto out;
} }
if (fputc('1', fp) == EOF || fputc('2', fp) == EOF) if (fputc('1', fp) == EOF || fputc('2', fp) == EOF)
{ {
printf("%d: cannot add characters at the end\n", __LINE__); printf("%d: cannot add characters at the end\n", __LINE__);
result = 1; result = 1;
goto out; goto out;
} }
/* Check the access time. */ /* Check the access time. */
if (fstat(fd, &st1) < 0) if (fstat(fd, &st1) < 0)
{ {
printf("%d: fstat64() before fseeko() failed\n\n", __LINE__); printf("%d: fstat64() before fseeko() failed\n\n", __LINE__);
result = 1; result = 1;
} }
else else
{ {
sleep(1); sleep(1);
if (fseek(fp, -(2 + 2 * (sizeof(outstr) - 1)), SEEK_CUR) != 0) if (fseek(fp, -(2 + 2 * (sizeof(outstr) - 1)), SEEK_CUR) != 0)
{ {
printf("%d: fseek() after write characters failed\n", __LINE__); printf("%d: fseek() after write characters failed\n", __LINE__);
result = 1; result = 1;
goto out; goto out;
} }
else else
{ {
time_t t; time_t t;
/* Make sure the timestamp actually can be different. */ /* Make sure the timestamp actually can be different. */
sleep(1); sleep(1);
t = time(NULL); t = time(NULL);
if (fstat(fd, &st2) < 0) if (fstat(fd, &st2) < 0)
{ {
printf("%d: fstat64() after fseeko() failed\n\n", __LINE__); printf("%d: fstat64() after fseeko() failed\n\n", __LINE__);
result = 1; result = 1;
} }
if (st1.st_ctime >= t) if (st1.st_ctime >= t)
{ {
printf("%d: st_ctime not updated\n", __LINE__); printf("%d: st_ctime not updated\n", __LINE__);
result = 1; result = 1;
} }
if (st1.st_mtime >= t) if (st1.st_mtime >= t)
{ {
printf("%d: st_mtime not updated\n", __LINE__); printf("%d: st_mtime not updated\n", __LINE__);
result = 1; result = 1;
} }
if (st1.st_ctime >= st2.st_ctime) if (st1.st_ctime >= st2.st_ctime)
{ {
printf("%d: st_ctime not changed\n", __LINE__); printf("%d: st_ctime not changed\n", __LINE__);
result = 1; result = 1;
} }
if (st1.st_mtime >= st2.st_mtime) if (st1.st_mtime >= st2.st_mtime)
{ {
printf("%d: st_mtime not changed\n", __LINE__); printf("%d: st_mtime not changed\n", __LINE__);
result = 1; result = 1;
} }
} }
} }
if (fread(buf, 1, 2 + 2 * (sizeof(outstr) - 1), fp) != 2 + 2 if (fread(buf, 1, 2 + 2 * (sizeof(outstr) - 1), fp) != 2 + 2
* (sizeof(outstr) - 1)) * (sizeof(outstr) - 1))
{ {
printf("%d: reading 2 records plus bits failed\n", __LINE__); printf("%d: reading 2 records plus bits failed\n", __LINE__);
result = 1; result = 1;
} }
else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0 || memcmp( else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0 || memcmp(
&buf[sizeof(outstr) - 1], outstr, sizeof(outstr) - 1) != 0 || buf[2 &buf[sizeof(outstr) - 1], outstr, sizeof(outstr) - 1) != 0 || buf[2
* (sizeof(outstr) - 1)] != '1' || buf[2 * (sizeof(outstr) - 1) + 1] * (sizeof(outstr) - 1)] != '1' || buf[2 * (sizeof(outstr) - 1) + 1]
!= '2') != '2')
{ {
printf("%d: reading records failed\n", __LINE__); printf("%d: reading records failed\n", __LINE__);
result = 1; result = 1;
} }
else if (ungetc('9', fp) == EOF) else if (ungetc('9', fp) == EOF)
{ {
printf("%d: ungetc() failed\n", __LINE__); printf("%d: ungetc() failed\n", __LINE__);
result = 1; result = 1;
} }
else if (fseek(fp, -(2 + 2 * (sizeof(outstr) - 1)), SEEK_END) != 0) else if (fseek(fp, -(2 + 2 * (sizeof(outstr) - 1)), SEEK_END) != 0)
{ {
printf("%d: fseek after ungetc failed\n", __LINE__); printf("%d: fseek after ungetc failed\n", __LINE__);
result = 1; result = 1;
} }
else if (fread(buf, 1, 2 + 2 * (sizeof(outstr) - 1), fp) != 2 + 2 else if (fread(buf, 1, 2 + 2 * (sizeof(outstr) - 1), fp) != 2 + 2
* (sizeof(outstr) - 1)) * (sizeof(outstr) - 1))
{ {
printf("%d: reading 2 records plus bits failed\n", __LINE__); printf("%d: reading 2 records plus bits failed\n", __LINE__);
result = 1; result = 1;
} }
else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0 || memcmp( else if (memcmp(buf, outstr, sizeof(outstr) - 1) != 0 || memcmp(
&buf[sizeof(outstr) - 1], outstr, sizeof(outstr) - 1) != 0 || buf[2 &buf[sizeof(outstr) - 1], outstr, sizeof(outstr) - 1) != 0 || buf[2
* (sizeof(outstr) - 1)] != '1') * (sizeof(outstr) - 1)] != '1')
{ {
printf("%d: reading records for the second time failed\n", __LINE__); printf("%d: reading records for the second time failed\n", __LINE__);
result = 1; result = 1;
} }
else if (buf[2 * (sizeof(outstr) - 1) + 1] == '9') else if (buf[2 * (sizeof(outstr) - 1) + 1] == '9')
{ {
printf("%d: unget character not ignored\n", __LINE__); printf("%d: unget character not ignored\n", __LINE__);
result = 1; result = 1;
} }
else if (buf[2 * (sizeof(outstr) - 1) + 1] != '2') else if (buf[2 * (sizeof(outstr) - 1) + 1] != '2')
{ {
printf("%d: unget somehow changed character\n", __LINE__); printf("%d: unget somehow changed character\n", __LINE__);
result = 1; result = 1;
} }
fclose(fp); fclose(fp);
fp = fopen(fname, "r"); fp = fopen(fname, "r");
if (fp == NULL) if (fp == NULL)
{ {
printf("%d: fopen() failed\n\n", __LINE__); printf("%d: fopen() failed\n\n", __LINE__);
result = 1; result = 1;
} }
else if (fstat(fileno(fp), &st1) < 0) else if (fstat(fileno(fp), &st1) < 0)
{ {
printf("%d: fstat64() before fseeko() failed\n\n", __LINE__); printf("%d: fstat64() before fseeko() failed\n\n", __LINE__);
result = 1; result = 1;
} }
else if (fseeko(fp, 0, SEEK_END) != 0) else if (fseeko(fp, 0, SEEK_END) != 0)
{ {
printf("%d: fseeko(fp, 0, SEEK_END) failed\n", __LINE__); printf("%d: fseeko(fp, 0, SEEK_END) failed\n", __LINE__);
result = 1; result = 1;
} }
else if (ftello(fp) != st1.st_size) else if (ftello(fp) != st1.st_size)
{ {
printf("%d: fstat64 st_size %zd ftello %zd\n", __LINE__, printf("%d: fstat64 st_size %zd ftello %zd\n", __LINE__,
(size_t) st1.st_size, (size_t) ftello(fp)); (size_t) st1.st_size, (size_t) ftello(fp));
result = 1; result = 1;
} }
else else
printf("%d: SEEK_END works\n", __LINE__); printf("%d: SEEK_END works\n", __LINE__);
if (fp != NULL) if (fp != NULL)
fclose(fp); fclose(fp);
fp = fopen(fname, "r"); fp = fopen(fname, "r");
if (fp == NULL) if (fp == NULL)
{ {
printf("%d: fopen() failed\n\n", __LINE__); printf("%d: fopen() failed\n\n", __LINE__);
result = 1; result = 1;
} }
else if (fstat(fileno(fp), &st1) < 0) else if (fstat(fileno(fp), &st1) < 0)
{ {
printf("%d: fstat64() before fgetc() failed\n\n", __LINE__); printf("%d: fstat64() before fgetc() failed\n\n", __LINE__);
result = 1; result = 1;
} }
else if (fgetc(fp) == EOF) else if (fgetc(fp) == EOF)
{ {
printf("%d: fgetc() before fseeko() failed\n\n", __LINE__); printf("%d: fgetc() before fseeko() failed\n\n", __LINE__);
result = 1; result = 1;
} }
else if (fseeko(fp, 0, SEEK_END) != 0) else if (fseeko(fp, 0, SEEK_END) != 0)
{ {
printf("%d: fseeko(fp, 0, SEEK_END) failed\n", __LINE__); printf("%d: fseeko(fp, 0, SEEK_END) failed\n", __LINE__);
result = 1; result = 1;
} }
else if (ftello(fp) != st1.st_size) else if (ftello(fp) != st1.st_size)
{ {
printf("%d: fstat64 st_size %zd ftello %zd\n", __LINE__, printf("%d: fstat64 st_size %zd ftello %zd\n", __LINE__,
(size_t) st1.st_size, (size_t) ftello(fp)); (size_t) st1.st_size, (size_t) ftello(fp));
result = 1; result = 1;
} }
else else
printf("%d: SEEK_END works\n", __LINE__); printf("%d: SEEK_END works\n", __LINE__);
if (fp != NULL) if (fp != NULL)
fclose(fp); fclose(fp);
out: unlink(fname); out: unlink(fname);
return result; return result;
} }
FINSH_FUNCTION_EXPORT(libc_fseek, lseek test for libc); FINSH_FUNCTION_EXPORT(libc_fseek, lseek test for libc);

View File

@ -12,45 +12,45 @@
static int errors = 0; static int errors = 0;
static void merror(const char *msg) static void merror(const char *msg)
{ {
++errors; ++errors;
printf("Error: %s\n", msg); printf("Error: %s\n", msg);
} }
int libc_mem(void) int libc_mem(void)
{ {
void *p; void *p;
int save; int save;
errno = 0; errno = 0;
p = malloc(-1); p = malloc(-1);
save = errno; save = errno;
if (p != NULL) if (p != NULL)
merror("malloc (-1) succeeded."); merror("malloc (-1) succeeded.");
if (p == NULL && save != ENOMEM) if (p == NULL && save != ENOMEM)
merror("errno is not set correctly"); merror("errno is not set correctly");
p = malloc(10); p = malloc(10);
if (p == NULL) if (p == NULL)
merror("malloc (10) failed."); merror("malloc (10) failed.");
/* realloc (p, 0) == free (p). */ /* realloc (p, 0) == free (p). */
p = realloc(p, 0); p = realloc(p, 0);
if (p != NULL) if (p != NULL)
merror("realloc (p, 0) failed."); merror("realloc (p, 0) failed.");
p = malloc(0); p = malloc(0);
if (p == NULL) if (p == NULL)
{ {
printf("malloc(0) returns NULL\n"); printf("malloc(0) returns NULL\n");
} }
p = realloc(p, 0); p = realloc(p, 0);
if (p != NULL) if (p != NULL)
merror("realloc (p, 0) failed."); merror("realloc (p, 0) failed.");
return errors != 0; return errors != 0;
} }
FINSH_FUNCTION_EXPORT(libc_mem, memory test for libc); FINSH_FUNCTION_EXPORT(libc_mem, memory test for libc);

View File

@ -7,8 +7,8 @@
#define MQ_NAME_1 "testmsg1" #define MQ_NAME_1 "testmsg1"
#define MQ_NAME_2 "testmsg2" #define MQ_NAME_2 "testmsg2"
#define MSG_SIZE 128 #define MSG_SIZE 128
#define MAX_MSG 3 #define MAX_MSG 3
const char *s_msg_ptr[] = {"msg test 1", "msg test 2", "msg test 3"}; const char *s_msg_ptr[] = {"msg test 1", "msg test 2", "msg test 3"};
char r_msg_ptr_1[MAX_MSG][MSG_SIZE]; char r_msg_ptr_1[MAX_MSG][MSG_SIZE];
@ -17,103 +17,103 @@ pthread_t send1, send2, rev1, rev2;
int * send_1(void * mq) int * send_1(void * mq)
{ {
int i; int i;
mqd_t mq1 = *(mqd_t *)mq; mqd_t mq1 = *(mqd_t *)mq;
printf("Enter into send_1 \n"); printf("Enter into send_1 \n");
for (i = 0; i < MAX_MSG; i++ ) { for (i = 0; i < MAX_MSG; i++ ) {
if ( -1 == mq_send(mq1, s_msg_ptr[i], MSG_SIZE, i)) { if ( -1 == mq_send(mq1, s_msg_ptr[i], MSG_SIZE, i)) {
perror("mq_send doesn't return success \n"); perror("mq_send doesn't return success \n");
pthread_exit((void *)1); pthread_exit((void *)1);
} }
printf("[%d] send '%s' in thread send_1. \n", i+1, s_msg_ptr[i]); printf("[%d] send '%s' in thread send_1. \n", i+1, s_msg_ptr[i]);
} }
pthread_exit((void *)0); pthread_exit((void *)0);
} }
int * send_2(void * mq) int * send_2(void * mq)
{ {
int i; int i;
mqd_t mq2 = *(mqd_t *)mq; mqd_t mq2 = *(mqd_t *)mq;
printf("Enter into send_2 \n"); printf("Enter into send_2 \n");
for (i = 0; i < MAX_MSG; i++ ) { for (i = 0; i < MAX_MSG; i++ ) {
if ( -1 == mq_send(mq2, s_msg_ptr[i], MSG_SIZE, i)) { if ( -1 == mq_send(mq2, s_msg_ptr[i], MSG_SIZE, i)) {
perror("mq_send doesn't return success \n"); perror("mq_send doesn't return success \n");
pthread_exit((void *)1); pthread_exit((void *)1);
} }
printf("[%d] send '%s' in thread send_2. \n", i+1, s_msg_ptr[i]); printf("[%d] send '%s' in thread send_2. \n", i+1, s_msg_ptr[i]);
} }
pthread_exit((void *)0); pthread_exit((void *)0);
} }
int * receive_1(void * mq) int * receive_1(void * mq)
{ {
int i; int i;
mqd_t mq1 = *(mqd_t *)mq; mqd_t mq1 = *(mqd_t *)mq;
printf("Enter into receive_1 \n"); printf("Enter into receive_1 \n");
for (i = 0; i< MAX_MSG; i++) { for (i = 0; i< MAX_MSG; i++) {
if ( -1 == mq_receive(mq1, r_msg_ptr_1[i], MSG_SIZE, NULL) ) { if ( -1 == mq_receive(mq1, r_msg_ptr_1[i], MSG_SIZE, NULL) ) {
perror("mq_receive doesn't return success \n"); perror("mq_receive doesn't return success \n");
pthread_exit((void *)1); pthread_exit((void *)1);
} }
printf("[%d] receive '%s' in thread receive_1. \n", i+1, r_msg_ptr_1[i]); printf("[%d] receive '%s' in thread receive_1. \n", i+1, r_msg_ptr_1[i]);
} }
pthread_exit((void *)0); pthread_exit((void *)0);
} }
int * receive_2(void * mq) int * receive_2(void * mq)
{ {
int i; int i;
mqd_t mq2 = *(mqd_t *)mq; mqd_t mq2 = *(mqd_t *)mq;
printf("Enter into receive_2 \n"); printf("Enter into receive_2 \n");
for (i = 0; i< MAX_MSG; i++) { for (i = 0; i< MAX_MSG; i++) {
if ( -1 == mq_receive(mq2, r_msg_ptr_2[i], MSG_SIZE, NULL) ) { if ( -1 == mq_receive(mq2, r_msg_ptr_2[i], MSG_SIZE, NULL) ) {
perror("mq_receive doesn't return success \n"); perror("mq_receive doesn't return success \n");
pthread_exit((void *)1); pthread_exit((void *)1);
} }
printf("[%d] receive '%s' in thread receive_2. \n", i+1, r_msg_ptr_2[i]); printf("[%d] receive '%s' in thread receive_2. \n", i+1, r_msg_ptr_2[i]);
} }
pthread_exit((void *)0); pthread_exit((void *)0);
} }
int libc_mq() int libc_mq()
{ {
mqd_t mq1 = 0, mq2 = 0; mqd_t mq1 = 0, mq2 = 0;
struct mq_attr mqstat; struct mq_attr mqstat;
int oflag = O_CREAT|O_RDWR; int oflag = O_CREAT|O_RDWR;
memset(&mqstat, 0, sizeof(mqstat)); memset(&mqstat, 0, sizeof(mqstat));
mqstat.mq_maxmsg = MAX_MSG; mqstat.mq_maxmsg = MAX_MSG;
mqstat.mq_msgsize = MSG_SIZE; mqstat.mq_msgsize = MSG_SIZE;
mqstat.mq_flags = 0; mqstat.mq_flags = 0;
if( ((mqd_t) -1) == (mq1 = mq_open(MQ_NAME_1,oflag,0777, &mqstat)) ) { if( ((mqd_t) -1) == (mq1 = mq_open(MQ_NAME_1,oflag,0777, &mqstat)) ) {
printf("mq_open doesn't return success \n"); printf("mq_open doesn't return success \n");
return -1; return -1;
} }
if( ((mqd_t) -1) == (mq2 = mq_open(MQ_NAME_2,oflag,0777, &mqstat)) ) { if( ((mqd_t) -1) == (mq2 = mq_open(MQ_NAME_2,oflag,0777, &mqstat)) ) {
printf("mq_open doesn't return success \n"); printf("mq_open doesn't return success \n");
return -1; return -1;
} }
pthread_create(&send1, NULL, (void *)send_1, (void *)&mq1); pthread_create(&send1, NULL, (void *)send_1, (void *)&mq1);
pthread_create(&send2, NULL, (void *)send_2, (void *)&mq2); pthread_create(&send2, NULL, (void *)send_2, (void *)&mq2);
pthread_create(&rev1, NULL, (void *)receive_1, (void *)&mq1); pthread_create(&rev1, NULL, (void *)receive_1, (void *)&mq1);
pthread_create(&rev2, NULL, (void *)receive_2, (void *)&mq2); pthread_create(&rev2, NULL, (void *)receive_2, (void *)&mq2);
pthread_join(send1, NULL); pthread_join(send1, NULL);
pthread_join(send2, NULL); pthread_join(send2, NULL);
pthread_join(rev1, NULL); pthread_join(rev1, NULL);
pthread_join(rev2, NULL); pthread_join(rev2, NULL);
mq_close(mq1); mq_close(mq1);
mq_close(mq2); mq_close(mq2);
mq_unlink(MQ_NAME_1); mq_unlink(MQ_NAME_1);
mq_unlink(MQ_NAME_2); mq_unlink(MQ_NAME_2);
printf("PASSED\n"); printf("PASSED\n");
return 0; return 0;
} }
#include <finsh.h> #include <finsh.h>
FINSH_FUNCTION_EXPORT(libc_mq, posix mqueue test); FINSH_FUNCTION_EXPORT(libc_mq, posix mqueue test);

View File

@ -142,59 +142,59 @@ int printf_test()
int i; int i;
printf ("snprintf (\"%%30s\", \"foo\") == %d, \"%.*s\"\n", printf ("snprintf (\"%%30s\", \"foo\") == %d, \"%.*s\"\n",
snprintf (buf, sizeof (buf), "%30s", "foo"), (int) sizeof (buf), snprintf (buf, sizeof (buf), "%30s", "foo"), (int) sizeof (buf),
buf); buf);
memset(buf2,0,sizeof(buf)); memset(buf2,0,sizeof(buf));
i=snprintf(buf2, 256, "%.9999u", 10); i=snprintf(buf2, 256, "%.9999u", 10);
printf("%i %i\n",i,strlen(buf2)); printf("%i %i\n",i,strlen(buf2));
printf ("snprintf (\"%%.999999u\", 10) == %d\n", printf ("snprintf (\"%%.999999u\", 10) == %d\n",
snprintf(buf2, sizeof(buf2), "%.999999u", 10)); snprintf(buf2, sizeof(buf2), "%.999999u", 10));
} }
return 0; return 0;
} }
void libc_printf() void libc_printf()
{ {
printf("stdout test!!\n"); printf("stdout test!!\n");
fprintf(stdout, "fprintf test!!\n"); fprintf(stdout, "fprintf test!!\n");
fprintf(stderr, "fprintf test!!\n"); fprintf(stderr, "fprintf test!!\n");
puts("puts test!!\n"); puts("puts test!!\n");
putc('1', stderr); putc('1', stderr);
putc('2', stderr); putc('2', stderr);
putc('\n', stderr); putc('\n', stderr);
printf_test(); printf_test();
} }
FINSH_FUNCTION_EXPORT(libc_printf, printf test in libc); FINSH_FUNCTION_EXPORT(libc_printf, printf test in libc);
void libc_dprintf() void libc_dprintf()
{ {
int fd; int fd;
fd = open("/dev/console", O_WRONLY, 0); fd = open("/dev/console", O_WRONLY, 0);
if (fd >0) if (fd >0)
{ {
dprintf(fd, "fd:%d printf test!!\n", fd); dprintf(fd, "fd:%d printf test!!\n", fd);
close(fd); close(fd);
} }
} }
FINSH_FUNCTION_EXPORT(libc_dprintf, dprintf test); FINSH_FUNCTION_EXPORT(libc_dprintf, dprintf test);
void libc_fdopen() void libc_fdopen()
{ {
int fd; int fd;
FILE* fp; FILE* fp;
fd = open("/dev/console", O_WRONLY, 0); fd = open("/dev/console", O_WRONLY, 0);
if (fd >0) if (fd >0)
{ {
fp = fdopen(fd, "w"); fp = fdopen(fd, "w");
fprintf(fp, "fdopen test, fd %d!!\n", fileno(fp)); fprintf(fp, "fdopen test, fd %d!!\n", fileno(fp));
fclose(fp); fclose(fp);
} }
} }
FINSH_FUNCTION_EXPORT(libc_fdopen, fdopen test); FINSH_FUNCTION_EXPORT(libc_fdopen, fdopen test);

View File

@ -10,34 +10,34 @@
int libc_rand(void) int libc_rand(void)
{ {
int i1, i2; int i1, i2;
int j1, j2; int j1, j2;
/* The C standard says that "If rand is called before any calls to /* The C standard says that "If rand is called before any calls to
srand have been made, the same sequence shall be generated as srand have been made, the same sequence shall be generated as
when srand is first called with a seed value of 1." */ when srand is first called with a seed value of 1." */
i1 = rand(); i1 = rand();
i2 = rand(); i2 = rand();
srand(1); srand(1);
j1 = rand(); j1 = rand();
j2 = rand(); j2 = rand();
if (i1 < 0 || i2 < 0 || j1 < 0 || j2 < 0) if (i1 < 0 || i2 < 0 || j1 < 0 || j2 < 0)
{ {
puts("Test FAILED!"); puts("Test FAILED!");
} }
if (j1 == i1 && j2 == i2) if (j1 == i1 && j2 == i2)
{ {
puts("Test succeeded."); puts("Test succeeded.");
return 0; return 0;
} }
else else
{ {
if (j1 != i1) if (j1 != i1)
printf("%d != %d\n", j1, i1); printf("%d != %d\n", j1, i1);
if (j2 != i2) if (j2 != i2)
printf("%d != %d\n", j2, i2); printf("%d != %d\n", j2, i2);
puts("Test FAILED!"); puts("Test FAILED!");
return 1; return 1;
} }
} }
FINSH_FUNCTION_EXPORT(libc_rand, rand test for libc); FINSH_FUNCTION_EXPORT(libc_rand, rand test for libc);

View File

@ -5,61 +5,61 @@
static sem_t sema; static sem_t sema;
static void* other_thread() static void* other_thread()
{ {
printf("other_thread here!\n"); printf("other_thread here!\n");
sleep(1); sleep(1);
while (1) while (1)
{ {
printf("other_thread: sem_post...\n"); printf("other_thread: sem_post...\n");
if(sem_post(&sema) == -1) if(sem_post(&sema) == -1)
printf("sem_post failed\n"); printf("sem_post failed\n");
sleep(1); sleep(1);
} }
printf("other_thread dies!\n"); printf("other_thread dies!\n");
pthread_exit(0); pthread_exit(0);
} }
static void test_thread(void* parameter) static void test_thread(void* parameter)
{ {
pthread_t tid; pthread_t tid;
printf("main thread here!\n"); printf("main thread here!\n");
printf("sleep 5 seconds..."); printf("sleep 5 seconds...");
sleep(5); sleep(5);
printf("done\n"); printf("done\n");
sem_init(&sema, 0, 0); sem_init(&sema, 0, 0);
/* create the "other" thread */ /* create the "other" thread */
if(pthread_create(&tid, 0, &other_thread, 0)!=0) if(pthread_create(&tid, 0, &other_thread, 0)!=0)
/* error */ /* error */
printf("pthread_create OtherThread failed.\n"); printf("pthread_create OtherThread failed.\n");
else else
printf("created OtherThread=%x\n", tid); printf("created OtherThread=%x\n", tid);
/* let the other thread run */ /* let the other thread run */
while (1) while (1)
{ {
printf("Main: sem_wait...\n"); printf("Main: sem_wait...\n");
if(sem_wait(&sema) == -1) if(sem_wait(&sema) == -1)
printf("sem_wait failed\n"); printf("sem_wait failed\n");
printf("Main back.\n\n"); printf("Main back.\n\n");
} }
pthread_exit(0); pthread_exit(0);
} }
#include <finsh.h> #include <finsh.h>
void libc_sem() void libc_sem()
{ {
rt_thread_t tid; rt_thread_t tid;
tid = rt_thread_create("semtest", test_thread, RT_NULL, tid = rt_thread_create("semtest", test_thread, RT_NULL,
2048, 20, 5); 2048, 20, 5);
if (tid != RT_NULL) if (tid != RT_NULL)
{ {
rt_thread_startup(tid); rt_thread_startup(tid);
} }
} }
FINSH_FUNCTION_EXPORT(libc_sem, posix semaphore test); FINSH_FUNCTION_EXPORT(libc_sem, posix semaphore test);

View File

@ -11,14 +11,14 @@
int speed() int speed()
{ {
int i; int i;
time_t t; time_t t;
printf("%d\n", time(0)); printf("%d\n", time(0));
for (i = 0; i < 10000000; ++i) for (i = 0; i < 10000000; ++i)
t = time(0); t = time(0);
printf("%d\n", time(0)); printf("%d\n", time(0));
return 0; return 0;
} }
FINSH_FUNCTION_EXPORT(speed, speed test); FINSH_FUNCTION_EXPORT(speed, speed test);

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2006-2018, RT-Thread Development Team * Copyright (c) 2006-2021, RT-Thread Development Team
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2006-2018, RT-Thread Development Team * Copyright (c) 2006-2021, RT-Thread Development Team
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
* *

View File

@ -15,7 +15,7 @@
**************************************************************************** ****************************************************************************
*/ */
#define NUMBER_OF_RUNS 1000000 #define NUMBER_OF_RUNS 1000000
#include "dhry.h" #include "dhry.h"
#define printf rt_kprintf #define printf rt_kprintf
@ -169,7 +169,7 @@ void dhry_test(void)
/* Stop timer */ /* Stop timer */
/**************/ /**************/
End_Time = rt_tick_get(); // Get end tick End_Time = rt_tick_get(); // Get end tick
printf ("Execution ends\n"); printf ("Execution ends\n");
printf ("\n"); printf ("\n");

View File

@ -35,8 +35,8 @@ int hwtimer(void)
return -1; return -1;
} }
/* 时间测量 */ /* 时间测量 */
/* 计数时钟设置(默认1Mhz或支持的最小计数频率) */ /* 计数时钟设置(默认1Mhz或支持的最小计数频率) */
err = rt_device_control(dev, HWTIMER_CTRL_FREQ_SET, &freq); err = rt_device_control(dev, HWTIMER_CTRL_FREQ_SET, &freq);
if (err != RT_EOK) if (err != RT_EOK)
{ {
@ -44,13 +44,13 @@ int hwtimer(void)
goto EXIT; goto EXIT;
} }
/* 周期模式 */ /* 周期模式 */
mode = HWTIMER_MODE_PERIOD; mode = HWTIMER_MODE_PERIOD;
err = rt_device_control(dev, HWTIMER_CTRL_MODE_SET, &mode); err = rt_device_control(dev, HWTIMER_CTRL_MODE_SET, &mode);
tick = rt_tick_get(); tick = rt_tick_get();
rt_kprintf("Start Timer> Tick: %d\n", tick); rt_kprintf("Start Timer> Tick: %d\n", tick);
/* 设置定时器超时值并启动定时器 */ /* 设置定时器超时值并启动定时器 */
val.sec = t; val.sec = t;
val.usec = 0; val.usec = 0;
rt_kprintf("SetTime: Sec %d, Usec %d\n", val.sec, val.usec); rt_kprintf("SetTime: Sec %d, Usec %d\n", val.sec, val.usec);
@ -62,22 +62,22 @@ int hwtimer(void)
rt_kprintf("Sleep %d sec\n", t); rt_kprintf("Sleep %d sec\n", t);
rt_thread_delay(t*RT_TICK_PER_SECOND); rt_thread_delay(t*RT_TICK_PER_SECOND);
/* 停止定时器 */ /* 停止定时器 */
err = rt_device_control(dev, HWTIMER_CTRL_STOP, RT_NULL); err = rt_device_control(dev, HWTIMER_CTRL_STOP, RT_NULL);
rt_kprintf("Timer Stoped\n"); rt_kprintf("Timer Stoped\n");
/* 读取计数 */ /* 读取计数 */
rt_device_read(dev, 0, &val, sizeof(val)); rt_device_read(dev, 0, &val, sizeof(val));
rt_kprintf("Read: Sec = %d, Usec = %d\n", val.sec, val.usec); rt_kprintf("Read: Sec = %d, Usec = %d\n", val.sec, val.usec);
/* 定时执行回调函数 -- 单次模式 */ /* 定时执行回调函数 -- 单次模式 */
/* 设置超时回调函数 */ /* 设置超时回调函数 */
rt_device_set_rx_indicate(dev, timer_timeout_cb); rt_device_set_rx_indicate(dev, timer_timeout_cb);
/* 单次模式 */ /* 单次模式 */
mode = HWTIMER_MODE_PERIOD; mode = HWTIMER_MODE_PERIOD;
err = rt_device_control(dev, HWTIMER_CTRL_MODE_SET, &mode); err = rt_device_control(dev, HWTIMER_CTRL_MODE_SET, &mode);
/* 设置定时器超时值并启动定时器 */ /* 设置定时器超时值并启动定时器 */
val.sec = t; val.sec = t;
val.usec = 0; val.usec = 0;
rt_kprintf("SetTime: Sec %d, Usec %d\n", val.sec, val.usec); rt_kprintf("SetTime: Sec %d, Usec %d\n", val.sec, val.usec);
@ -87,7 +87,7 @@ int hwtimer(void)
goto EXIT; goto EXIT;
} }
/* 等待回调函数执行 */ /* 等待回调函数执行 */
rt_thread_delay((t + 1)*RT_TICK_PER_SECOND); rt_thread_delay((t + 1)*RT_TICK_PER_SECOND);
EXIT: EXIT:

View File

@ -63,8 +63,8 @@ void udpecho_entry(void *parameter)
/* /*
* UDP socket echo server * UDP socket echo server
*/ */
#define UDP_SOCKET_ECHO_PORT 700 #define UDP_SOCKET_ECHO_PORT 700
#define UDP_SOCKET_BUFFER_SIZE 4096 #define UDP_SOCKET_BUFFER_SIZE 4096
rt_thread_t udpecho_socket_tid = RT_NULL; rt_thread_t udpecho_socket_tid = RT_NULL;
void udpecho_socket_entry(void *parameter) void udpecho_socket_entry(void *parameter)
{ {
@ -189,8 +189,8 @@ void tcpecho_entry(void *parameter)
/* /*
* TCP socket echo server * TCP socket echo server
*/ */
#define TCP_SOCKET_ECHO_PORT 700 #define TCP_SOCKET_ECHO_PORT 700
#define TCP_SOCKET_BUFFER_SIZE 4096 #define TCP_SOCKET_BUFFER_SIZE 4096
rt_thread_t tcpecho_socket_tid = RT_NULL; rt_thread_t tcpecho_socket_tid = RT_NULL;
void tcpecho_socket_entry(void *parameter) void tcpecho_socket_entry(void *parameter)
{ {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2006-2018, RT-Thread Development Team * Copyright (c) 2006-2021, RT-Thread Development Team
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
* *