C语言嵌入式编程

1. static全局便娘与普通全局变量有什么区别?static局部变量和普通局部变量有什么区别?satic函数与普通函数有什么区别?

static全局变量只初使化一次,防止在其他文件单元中被引用(修改链接属性);

static局部变量只被初始化一次,下一次依据上一次结果值(延长生命期);

static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝


2.有双向循环链表节点定义为

<span style="font-size:18px;">struct node
{
	int data;
	struct nod *front, *next;
};</span>
有两个双向链表A,B,知道其头指针为:pHeadA,pHeadB,请写一个函数将两个链表中的data值相同的节点删除



3. 使用自旋锁时应注意哪些方面

1). 自旋锁保护的临界区里,不能有引起睡眠的函数,如kmalloc,copy_from_user等。

        因为如果某进(线)程获得锁并进入了临界区,但它却在临界区里睡着了,那么别的需要这把锁的进(线)程将可能要等待一段很久的时间,最坏的情况是死锁。

        所以,在自旋锁里的临界区代码应是原子性的,不可睡眠的。

2). 在LDD3里说到这样的一种情况:

        在单CPU环境里,如果某进(线)程获得了锁并准备对它的设备进行存取,此时发生了中断,而中断处理也要对该设备进行存取所以中断处理程序也要获得那个锁,但现在锁被刚才某进(线)程得了,所以当中继处理程序在自旋,而在单CPU环境里, 非中断代码又不能运行来释放锁,那么这个CPU将永远自旋。

3). 自旋锁的持有时间应尽可能的短。因为临界区太大,持有时间太长,其他进程可能面临长时间等待,降低了系统性能。



4.字符串倒序程序,类似将"innos"倒序后变为"sonni",请指出下面代码有哪些错误并修正:

#include<stdio.h>//要包含这两个头文件
#include<stdlib.h>
#include "string.h"
int main(void)
{
	char *pDest, *pSrc;
	char *src = "neoway";
	char *dest = NULL;
	int length = strlen(src);

	<span style="color:#FF0000;"><u><strong>dest = (char *)malloc(length + 1);//多一个空间存储字符串结束符</strong></u></span>
	pDest = dest;
	pSrc = src + length - 1;//注意下表从0开始src[length]的值为'\0'

<span style="font-family:Arial, Verdana;">                </span> while(length-- != 0)
		*pDest++ = *pSrc--;//掉了*
	*pDest = '\0';
	printf("%s", dest);
	<span style="color:#FF0000;"><u><strong>free(dest);//这里要释放一下</strong></u></span>
<span style="font-family:Arial, Verdana;">               </span> return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值