<meta name="keywords" content="庄家克星时时彩,嵌入式C语言" />

嵌入式工程师,耍起C语言的万能“三板斧”!

宣布时间:2019年03月24日 11:03    宣布者:xyd2018
要害词: 嵌入式C语言
作为嵌入式工程师,写一个效力高效,思绪清晰的C语言法式模范模范是我们的事实目的,那么,怎样才干写好这样的法式模范模范呢?首先,我们要用C语言的头脑要领来阻拦法式模范模范的构架构建;其次,要有优胜的C语言算法基础,以此来完成法式模范模范的逻辑构架;最后,无邪应用C语言的指针操作。

虽然看起来以上的说法很笼统,给人如坠雾里的感应,着实就是用C语言阻拦遇到效果、剖析效果和处置赏罚赏罚效果的历程。那么,下文将给你简介若何耍这“三板斧”。

嵌入式工程师在编写C语言法式模范模范的时间,要针对遇到的效果阻拦法式模范模范构架构建。

好比我们要处置赏罚赏罚“猴子选年夜王”的经典效果:一群猴子,手拉手排成一个圆,从随便任性一只猴子泉源从1泉源报数,当遇到要扫除的数(事后设定)时该猴子加入该圈,从下一只猴子泉源一连从1报数,云云重复,事实剩下的猴子就是猴子的年夜王。那么,这“三板斧”该若何应用呢?


第一板斧,用C语言的头脑要领阻拦法式模范模范构架构建
法式模范模范分为三年夜部门:
a、数据取得,为了法式模范模范的运转,下面的效果要取得猴子的总数,从那只猴子泉源和剔除的个数;
b、数据运算,须要从一堆数据中剔除照顾的数据,重视逻辑的准确;
c、前进法式模范模范的运转速率,少用循环多用指针。


第二板斧,用C语言阻拦逻辑完成

a、 数据取得,经由历程printf和scanf阻拦参数的取得。

/* 读入效果条件 */
printf("input total num:");
scanf("%d", &n);
printf("from which num begin:");
scanf("%d", &k);
if(k>n||k==0)
{printf("please input the right begin num");
return 1; }
printf("input the out num:");
scanf("%d", &m);
if(m>n||m==0)
{ printf("please input the right del num");
return 2; }

同时重视异常时的处置赏罚赏罚,比以下面两个if语句就是异常情形的断定,每种异常情形对应不合的前往值,这样便于法式模范模范历程的调试和数据的正当性。

b、 /* 界说链表节点类型 */
typedef struct node
{
int data;
struct node *next;
}linklist;
构建循环链表阻拦“猴子”的圆圈作育。
/* 培植循环链表,头节点也存信息 */
head = (linklist*) malloc(sizeof(linklist));
p = head;
p->data = 1;
p->next = p;
/* 初始化循环链表 */
for (i = 2; i <= n; i++)
{
s = (linklist*) malloc(sizeof(linklist));
s->data = i;
s->next = p->next;
p->next = s;
p = p->next;
}

经由历程该法式模范后,head和p(present)都成了一个“猴子圈”的链表。在该链表的构建历程当中须要重视一下几点:内存的开发,此时遵守应用若干开发若干的准绳。

假定一下开发过量,会惹起内存走漏的效果,然则,这个小法式模范模范是不会遇到这类效果了。其次是熟悉循环链表的构建措施:链表的尾巴指向链表的头。这个时间有心的话还会遐想到双向链表的情形。

c、 /* 找到第 k 个节点 */
p = head;
for (i = 1; i <= k; i++)
{
p = p->next;
}

找到从第几个职位泉源计数。此时,p指向开真个“猴子”。由于接纳了链表措施,这个历程只须要关注p指针的next指向便可。

a、 生涯初始的“猴子”圆圈参数。
/* 生涯节点总数 */
total = n;
printf("\nthe out num:");
q = head;

为甚么要生涯这个呢?起主要控制猴子数目,以是生涯了一切的数目。其次用q(qurry)来生涯剔除猴子前面的链表,并毗连剔除猴子后的链表。这样,完成了循环链表的元素删除。

b、 猴子查数。
猴子查数是一切法式模范模范的要害,须要完成以下义务:a、找到开真个“猴子”数;b、删除该“猴子”;c、将删除掉落落的循环链表首尾毗连起来。

/* 只剩一个节点时阻拦循环 */
while (total != 1)
{
/* 报数历程,p指向要删除的节点 */
for (i = 1; i < m; i++)
{
p = p->next;
}
/* 打印要删除的节点序号 */
printf("[%d] ", p->data);
/* q 指向 p 节点的先驱 */
while (q->next != p)
{
q = q->next;
}
/* 删除 p 节点 */
q->next = p->next;
/* 生涯被删除节点指针 */
s = p;
/* p 指向被删除节点的后继 */
p = p->next;
/* 释放被删除的节点 */
free(s);
/* 节点个数减一 */
total--;
}
/* 打印最后剩下的节点序号 */
printf("\n\nthe last num:[%d] \n\n", p->data);
free(p);
}

经由历程以上数据运算,可以完成照顾链表元素的删除,这或许就是C语言法式模范模范的魅力所在。


第三把斧,应用C语言的指针

好比本法式模范模范的链表指针的界说,p,s,q。
linklist *head, *p, *s, *q;

我们知道,指针操作不只可以增添数据操作须要的内存,还可以前进法式模范模范的运转速率,这在此外一方面到达了我们的“第三把斧”的目的。

指针的优势,或许在本法式模范模范中体现的不显着,在年夜量数据和对操作速率请求较量敏感的情形下会很显着,好比Linux内核中,就会有很好的体现。

总之,关于嵌入式工程师,不只能设计出好的硬件电路,假定也能写出好的软件法式模范模范就会让我们的生涯加倍优美。工程师们,耍起这“C语言的三把斧”!


嵌入式手艺学习,联系宋师长教员企鹅号:3524-6590-88   Tel/WX:173--1795--1908
以下课程可收费试听C语言、电子PCBSTM32、Linux、FPGA、JAVA、安卓等。
想学习的你和我联系预定便可以收费听课了。



迎接分享本文,转载请生涯出处:http://badahub.com/thread-561682-1-1.html     【打印本页】
您须要登录后才可以揭晓议论 登录 | 急速注册

厂商推荐

相关文章

关于我们  -  服务条目  -  应用指南  -  站点舆图  -  友谊链接  -  联系我们
庄家克星时时彩-时时彩qq群-时时彩平台推荐 © 版权一切   | 京公网安备110108881021702
回顶部