⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_key_buffer.c

📁 sparc硬件平台上的键盘驱动
💻 C
字号:
/************************************************************  Copyright (C), 2007,DTK Computer.  FileName: test_key_buffer.c  Author:   rome              Version : 1.0.0         Date:2007.03.23  Description:     测试键盘缓冲操作,主要测试竞争条件的处理。        Version:         DTK-EMMI-1.0.0  Function List:       1.test_regular_get_and_put:测试键盘缓冲对象的正常读写。    2.regular_get_buffer:配合test_regular_get_and_put函数的读操作。    3.test_multi_get:测试多个读者一个写者的情况。    4.loop_get:配合test_multi_get函数的循环读操作函数。   History:               <author>   <time>    <version >    <desc>      rome      2007/03/23  1.0.0     build this moudle  ***********************************************************/#include <assert.h>#include <stdio.h>#include <unistd.h>#include <key_buffer.h>#include <mmi_lock.h>#define KEY_BUFFER_READWRITE_LEN 20KeyBuffer *key_buffer;static void test_regular_get_and_put(void);static void *regular_get_buffer(void *user_data);static void test_multi_get(void);static void *loop_get(void *user_data);int main(void){    key_buffer = key_buffer_new();    test_regular_get_and_put();    test_multi_get();    return 0;}static void test_regular_get_and_put(void){    int i;    mmi_thread_t test_get_thread;    if (mmi_thread_create(&test_get_thread, NULL, regular_get_buffer, NULL))    {        printf("test_regular_get_and_put: create thread error\n");        return;    }    for (i=0; i<KEY_BUFFER_READWRITE_LEN; i++)    {        key_buffer_put(key_buffer, 'a' + i);        /* 当键盘缓冲可能满时作延迟操作,以便读线程可以先把数据读走 */        if (i >= 15 - 1) /* 16 是 KEY_BUFFER_LEN */        {            sleep(2);        }    }    mmi_thread_join(test_get_thread, NULL);    assert(key_buffer_is_empty(key_buffer) != 0);    printf("%p thread test regular get/put success\n", mmi_thread_self());}static void *regular_get_buffer(void *user_data){    int i;    for (i=0; i<KEY_BUFFER_READWRITE_LEN; i++)    {        char ch;        ch = key_buffer_get(key_buffer, 0);        printf("the char is %c, the i is %d\n", ch, i);        assert(ch == ('a' + i));    }    printf("%p thread buffer get success\n", mmi_thread_self());    return NULL;}static void test_multi_get(void){    int i;    int timeout = 0;    mmi_thread_t loop_thread[3];    for (i=0; i<3; i++)    {        if (2 == i)        {            timeout = 1;        }        if (mmi_thread_create(&loop_thread[i], NULL, loop_get, &timeout))        {            printf("test_multi_get: create thread error\n");            return;        }    }    for (i=0; i<KEY_BUFFER_READWRITE_LEN; i++)    {        key_buffer_put(key_buffer, 'a' + i);        if (i == KEY_BUFFER_READWRITE_LEN - 1)         {            i = -1;            sleep(3);        }    }}static void *loop_get(void *user_data){    int ch;    while(1)    {        ch = key_buffer_get(key_buffer, (int)(*(int *)user_data));        printf("loop_get: %p thread get the char %c\n", mmi_thread_self(), ch);        if (0xFFFF == ch)        {            printf("loop_get: %p thread get the ##timeout## %x\n", mmi_thread_self(), ch);        }    }    return NULL;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -