2016 년 11 월 문제 기록 과 총화

1.Flash 를 사용 하기 전에 원 하 는 파일 시스템 으로 포맷 해 야 합 니 다.예 를 들 어 dosfs 나 ext 4 를 사용 하려 면 Liux 에서 mkfs 명령 을 사용 하여 파 티 션 된 파 티 션 을 포맷 한 다음 마 운 트 지점 까지 mount 하면 편리 하 게 사용 할 수 있 습 니 다.
 
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; }

좋은 웹페이지 즐겨찾기