|
2012 级嵌入式上考试参考程序之一
/*注:部分程序代码来自于互联网,本人将此整理,仅用于学习交流,请下载之后于 24 小时内删除详见附件*/
/*实验内容:
(1) 设计一个具有一个整形参数的子函数,取出参数的低 16 位并且把低 8 位置一,将结果返回;
(2) f2.c:设计一个具有两个参数的 子函数,子函数将 2 参数值互换;
(3)实现主函数,主函数中创建 2 个进程,进程 1 定义一个整形变量,调用文件 f1 中定义的函数求取结果并将结果和进程 ID 输出;进程 2 定义 2 个整形变量,调用文件 f2 中定义的函数将两变量的值进行互换并将结果和进程 ID 输出;*/
//主函数 maain.c
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/wait.h>
#include"f1.h"
#include"f2.h"
int main(int argc ,char**argv)
{
unsigned int FinalNumber,p=0xffff5689;
unsigned int p1 = 30,p2 = 50;
char i = 0;
char pid;
pid = fork();
if(pid == -1)
{
printf("Fork error\n");
}
else if(pid == 0)
{
FinalNumber = NumberExtract(p);
printf("before extract the number is %x \n" ,p);
printf("after extract the numberis %x \n",FinalNumber);
printf("I am child1 process ,my pid is %d.\n",getpid());
}
else
{
printf("I'm father process,my ppid is %d.\n ",getppid());
pid = fork();
if(pid == 0)
{
printf("I am child2 process ,my pid is %d.\n",getpid());
printf("before exchange The Number p1,p2 is %d,%d.\n",p1,p2);
ExchangeNumber(&p1,&p2);
printf("after exchange The Number p1,p2 is %d,%d.\n",p1,p2);
}
}
}
//子函数 f1.c
#include<stdio.h>
#include<stdlib.h>
#include"f1.h"
unsigned int NumberExtract(unsigned int parg)
{
unsigned int FinalValue;
FinalValue=(parg&0x0000ffff)|0x00ff;
return FinalValue;
}
//头文件 f1.h
unsigned int NumberExtract(unsigned int parg);
//子函数 f2.c
#include<stdio.h>
#include<stdlib.h>
#include"f2.h"
void ExchangeNumber(unsigned int*parg1,unsigned
int*parg2)
{
unsigned int parg;
parg = *parg1;
*parg1 = *parg2;
*parg2 = parg;
}
//头文件 f2.h
void ExchangeNumber(unsigned int*parg1,unsigned
int*parg2);
Makefile
Love: maain.o f1.o f2.o
gcc -o Love maain.o f1.o f2.o
maain.o: maain.c f1.h f2.h
gcc -c maain.c
f1.o: f1.c f1.h
gcc -c f1.c
f2.o: f2.c f2.h
文件夹具体文件构成
编译时图片
后续还会再上传,仅供参考。
|
评分
-
查看全部评分
|