一些知识点

来源于一次契机,因此决定记录下。一方面很多知识都只是停留在表面阶段,没有深入理解。因此决定写技术博客来总结。
先说下几道面试题吧

1.使用一个宏实现输入两个参数并返回较小的一个

#define MIN(A,B) ((A)<=(B)?(A):(B)

2.嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务

int * ptr;
ptr=  (int *)0x67a9;
*ptr = 0xaa66;

3.在32位机器里运行,请问下面的结构体占多大空间

typedef struct  
{
  uint8_t  a[5];
  uint16_t b;
  uint32_t c;
  char * Ptr;
}AA

```c
答案是 16  4+4+4+4=16

4.堆栈的区别

堆:是自己分配的内存,主要用malloc函数创建和free函数销毁
栈:用作局部变量,形参

5.写个队列,包含入队和出队,判断队列满和空

#define QUEUE_MAXSIZE 5
typedef struct 
{
  uint8_t   front;
  uint8_t   rear;
  uint16_t   arrayBuffer[QUEUE_MAXSIZE];
}Queue_Typedef

/**
* @brief  初始化队列
* @param  None
* @retval None
* @note   None
*/
void InitQueue(Queue_Typedef* aa)
{
aa->front=0;
aa->rear=0;
}

/**
* @brief   判断队列是不是满
* @param   aa :结构体指针
* @retval  1:队列满  0:队列没有满
* @note    None
*/
uint8_t IsFullQueue(Queue_Typedef* aa)
{
  if((aa->rear+1%QUEUE_MAXSIZE==aa->front) //队列满
  {
    return 1;
  }
  else
  {
    return 0}
}

/**
* @brief   判断队列是不是满
* @param   aa :结构体指针
* @retval  1:队列满 0:队列没有满
* @note    None
*/
uint8_t IsEmptyQueue(Queue_Typedef* aa)
{
    if(aa->front==aa->rear)  //队列空
    {
        return  1;
    }
    else
    {
        return 0;
    }
}

/**
* @brief   入队列
* @param   aa :结构体指针
* @retval  None
* @note    None
*/
void EnQueue(Queue_Typedef* aa,uin16_t value)
{
  if(IsEmptyQueue(aa)==0) //如果队列不为满 
  {
    aa->arrayBuffer[aa->rear]=value; //赋值
    aa->rear=(aa->rear+1)%QUEUE_MAXSIZE; //移动队尾指针
  }
}

/**
* @brief   出队列
* @param   aa :结构体指针
* @retval  None
* @note    None
*/
void DeQueue(Queue_Typedef* aa uin16_t *e)
{
   if(IsFullQueue(aa)==0) //如果队列不为空 
  {
   *e=aa->arrayBuffer[aa->front]; //将队头元素赋值给e
    aa->front=(aa->front+1)%QUEUE_MAXSIZE; //移动队尾指针
  }
}

6.SPI的几种模式

SPI有4种模式,
CP是 空闲时刻的SCK高低电平。为0是低电平,为1是高电平
CL是奇数沿采样还是偶数沿采样。为0是奇数沿采样,为1是偶数沿采样

7.操作FLASH要注意的地方

1.尽可能减少擦除,在写内容到 FLASH之前,可以回读FLAH,比较回读内容和将要写的内容,要是一样的话那就没必要操作了
2.要及时加锁
3.写FLASH之前最好对内容做个CRC校验,写入FLASH后在回读内容计算校验码 ,判断是否正确写入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值