加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

2016年11月问题记录与总结

发布时间:2020-12-15 19:58:02 所属栏目:百科 来源:网络整理
导读:1.Flash 在使用之前需要格式化成想要的文件系统,比如要使用 dosfs 或者 ext4 , linux 下使用 mkfs 指令先对已经分区好的分区进行格式化,然后再 mount 到挂载点,这样就可以方便的使用了。 ? 2.#define PCIE_BASE 0x60000000 和指针定义的 *base = (void *

1.Flash在使用之前需要格式化成想要的文件系统,比如要使用dosfs或者ext4linux下使用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!n");
		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:%dn",i,Q->q_base[i]);
		i++;
	}

}



/*进队列*/
u16 enter_q(p_queue Q,int value)
{
	if(check_q(Q)==FULL)
	{
		printf("The queue is full!n");		
		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!n");		
		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,sizeof(my_queue));//初始化

	if(create_queue(&test_queue,20)!=TRUE)//创建队列并判断是是否创建成功
	{
		printf("create queue failed!n");
		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]n",a);
	}

	while(check_q(&test_queue)!=EMPTY);//判断是否为空


	a=getch();

	return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读