1.Flash在使用之前需要格式化成想要的文件系统,比如要使用dosfs或者ext4,linux下使用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:%d\n",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;
}