2016 년 11 월 문제 기록 과 총화
2.#define PCIE_BASE 0x60000000 과 포인터 가 정의 하 는*base=(void*)0x60000000 은 주소+i 일 때 어떤 차이 가 있 습 니까?
전자 주소+1,후자 주소+4
3.하 드 인 터 럽 트 와 소프트 인 터 럽 트 의 이해
이들 의 가장 큰 차 이 는 하 드 인 터 럽 트 는 하드웨어 외부 장치 에서 자동 으로 발생 하고 소프트 인 터 럽 트 는 명령 을 통 해 촉발 된다 는 것 이다.하 드 인 터 럽 트 의 인 터 럽 트 번 호 는 일반적으로 하드웨어 가 결정 하 는데 인 터 럽 트 컨트롤 러 라 고 하고 소프트 인 터 럽 트 는 명령 이 내 린 것 이다.소프트 인 터 럽 트 는 끼 워 넣 을 수 없고,하 드 인 터 럽 트 는 끼 워 넣 거나 끊 길 수 있 습 니 다.
4.C 언어 가 순환 대기 열 을 실현 하 는 간단 한 예.
my_queue.h
#ifndef __MY_QUEUE_H_
#define __MY_QUEUE_H_
#define u32 unsigned int
#define u16 unsigned short
#define TRUE 1
#define FALSE 0
typedef struct queue
{
u32 *q_base;//
u32 front;//
u32 rear;//
u32 max_size;//
}my_queue,*p_queue;
typedef enum
{
FULL=0,
EMPTY,
NOT_EMPTY
}q_status;
u16 create_queue(p_queue Q,u32 max_size);
q_status check_q(p_queue Q);
void traverse_q(p_queue Q);
u16 enter_q(p_queue Q,int value);
#endif
my_queue.c
#include <stdio.h>
#include <string.h>
#include <memory.h>
#include <stdlib.h>
#include "my_queue.h"
/* */
u16 create_queue(p_queue Q,u32 max_size)
{
Q->q_base=(u32 *)malloc(sizeof(int)*max_size);
if(Q->q_base==NULL)
{
printf("malloc error!
");
return FALSE;
}
Q->front=0;
Q->rear=0;
Q->max_size=max_size;
return TRUE;
}
/* */
q_status check_q(p_queue Q)
{
if(Q->front==Q->rear)
{
return EMPTY;
}
else if(Q->front==(Q->rear+1)%Q->max_size)
{
return FULL;
}
else
{
return NOT_EMPTY;
}
}
/* , */
void traverse_q(p_queue Q)
{
u32 i;
i=Q->front;
while((i%Q->max_size)!=Q->rear)
{
printf("Q[%d] value is:%d
",i,Q->q_base[i]);
i++;
}
}
/* */
u16 enter_q(p_queue Q,int value)
{
if(check_q(Q)==FULL)
{
printf("The queue is full!
");
return FALSE;
}
Q->q_base[Q->rear]=value;
Q->rear=(Q->rear+1)%Q->max_size;
return TRUE;
}
/* */
u16 exit_q(p_queue Q,int* value)
{
if(check_q(Q)==EMPTY)
{
printf("The queue is empty!
");
return FALSE;
}
*value=Q->q_base[Q->front];
Q->front=(Q->front+1)%Q->max_size;
return TRUE;
}
p_queue test_queue;
int main(void)
{
u32 a,i;
memset(&test_queue,0,sizeof(my_queue));//
if(create_queue(&test_queue,20)!=TRUE)//
{
printf("create queue failed!
");
exit(-1);
}
for(i=0;i<20;i++)//
{
enter_q(&test_queue,i);
}
while(check_q(&test_queue)!=FULL);//
traverse_q(&test_queue);// ,
for(i=0;i<20;i++)// ,
{
exit_q(&test_queue,&a);
printf("exit[%d]
",a);
}
while(check_q(&test_queue)!=EMPTY);//
a=getch();
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.