华中科技大学嵌入式实验源码+报告


包含代码和文档 实验一 实验内容 编写程序,演示多进程并发执行和进程软中断、管道通信。 父进程使用系统调用pipe( )建立一个管道,然后使用系统调用fork()创建两个子进程,子进程1和子进程2; 子进程1每隔1秒通过管道向子进程2发送数据: I send you x times. (x初值为1,每次发送后做加一操作) 子进程2从管道读出信息,并显示在屏幕上。 父进程用系统调用signal()捕捉来自键盘的中断信号(即按Ctrl+C键);当捕捉到中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child Process l is Killed by Parent! Child Process 2 is Killed by Parent! 父进程等待两个子进程终止后,释放管道并输出如下的信息后终止 Parent Process is Killed! 实验二 实验内容 过Linux多线程与信号灯机制,设计并实现计算机线程与I/O线程共享缓冲区的同步与通信。 程序要求:两个线程,共享公共变量a 线程1负责计算(1到100的累加,每次加一个数) 线程2负责打印(输出累加的中间结果) 实验三 实验内容 利用多个共享内存(有限空间)构成的环形缓冲,将源文件复制到目标文件,实现两个进程的誊抄。 实验四 实验内容 1、(1)Blink程序的编译和下载 (2)给Blink程序加入printf,在每次定时器事件触发点亮LED的同时通过串口显示信息 (3)修改BLink程序,只使用一个Timer,三个LED灯作为3位的二进制数表示(亮灯为1,不亮为0),按照0-7的顺序循环显示,同时将数值显示在终端上。
资源截图
代码片段和文件信息
#include 
#include 
#include 
#include 
#include 


//声明全局变量
int p1p2;
int fd[2];

//中断信号处理函数
void sig_handler(int sig_no)
{
    if(sig_no == SIGINT)
    {
        kill(p1SIGUSR1);//给子进程p1发信号
        kill(p2SIGUSR1);//给子进程p2发信号
    }
}
void sh(int sig_no)
{
    close(fd[0]);
    close(fd[1]);
    if(p1 == 0 && sig_no == SIGUSR1)//子进程p1退出
    {
        printf(“Child Process1 is killed by Parent!
“);
        exit(0);
    }
    if(p2 == 0 && sig_no == SIGUSR1)//子进程p2退出
    {
        printf(“Child Process2 is killed by Parent!
“);
        exit(0);
    }
}

int main(void)
{
    char buf[100];
    char recive[100];
    int x = 1;//计数变量
    if(pipe(fd) < 0)//创建无名管道
    {
        perror(“Fail to create pipe.
“);
        exit(0);
    }
    signal(SIGINTsig_handler);//中断信号
    while((p1 = fork())==-1);//创建子进程p1
    if(p1 == 0)//子进程p1
    {
        signal(SIGINTSIG_IGN);
        signal(SIGUSR1sh);
        while(1){
            close(fd[0]);
            sprintf(recive“I send you %d times.“x);
            write(fd[1]recive30);
            x++;
            sleep(1);
        }
    }
    else if(p1 >0)//返回父进程
    {
        while((p2 = fork())==-1);
        if(p2 == 0)//子进程p2
        {
  
            signal(SIGINTSIG_IGN);
            signal(SIGUSR1sh);
            while(1){
                close(fd[1]);
                read(fd[0]buf40);
                printf(“%s
“buf);
            }
        }
//父进程等待子进程p1p2退出
        waitpid(p1NULL0);
        waitpid(p2NULL0);

        close(fd[0]);
        close(fd[1]);
        printf(“Parent Process is killed!
“);
    }
    return 0;
}



 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-04-13 07:48  X201605005+覃家旺
     目录           0  2017-06-16 17:24  X201605005+覃家旺lib1
     文件        1818  2017-04-13 07:48  X201605005+覃家旺lib1lib1.c
     目录           0  2017-06-16 17:26  X201605005+覃家旺lib2
     文件        2441  2017-04-19 15:03  X201605005+覃家旺lib2lib2.c
     目录           0  2017-06-16 17:32  X201605005+覃家旺lib3
     文件        1631  2017-05-10 17:27  X201605005+覃家旺lib3copy.c
     文件        1597  2017-05-10 16:59  X201605005+覃家旺lib3get.c
     文件        2003  2017-05-10 17:25  X201605005+覃家旺lib3main.c
     文件        1479  2017-05-10 17:36  X201605005+覃家旺lib3put.c
     目录           0  2017-05-24 15:06  X201605005+覃家旺lib4
     目录           0  2017-05-24 14:41  X201605005+覃家旺lib41
     文件        2673  2017-05-21 22:19  X201605005+覃家旺lib41linkAppC.nc
     文件        3297  2017-05-24 14:41  X201605005+覃家旺lib41linkC.nc
     文件         108  2017-05-21 22:09  X201605005+覃家旺lib41Makefile
     文件         678  2012-08-21 02:28  X201605005+覃家旺lib41README.txt
     目录           0  2017-05-21 22:02  X201605005+覃家旺lib41uild
     目录           0  2017-05-24 15:01  X201605005+覃家旺lib41uild elosb
     文件      372883  2017-05-24 15:00  X201605005+覃家旺lib41uild elosbapp.c
     文件         180  2017-05-24 15:00  X201605005+覃家旺lib41uild elosbident_flags.txt
     文件       30915  2017-05-24 15:00  X201605005+覃家旺lib41uild elosbmain.exe
     文件       25039  2017-05-24 15:00  X201605005+覃家旺lib41uild elosbmain.ihex
     文件       25401  2017-05-24 15:00  X201605005+覃家旺lib41uild elosb os_image.xml
     目录           0  2017-05-24 14:39  X201605005+覃家旺lib42
     文件        2673  2017-05-24 11:54  X201605005+覃家旺lib42linkAppC.nc
     文件        3094  2017-05-24 14:39  X201605005+覃家旺lib42linkC.nc
     文件         108  2017-05-21 22:09  X201605005+覃家旺lib42Makefile
     文件         678  2012-08-21 02:28  X201605005+覃家旺lib42README.txt
     目录           0  2017-05-21 22:34  X201605005+覃家旺lib42uild
     目录           0  2017-05-24 15:03  X201605005+覃家旺lib42uild elosb
     文件      372434  2017-05-24 15:03  X201605005+覃家旺lib42uild elosbapp.c
............此处省略88个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)