首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

嵌入式 C 语言(下)

#if和#elif #if指令很想C语言if。...因为计算机或者嵌入式设备硬件指令非常依赖地址,指针在某种程度上把程序员想要表达指令以更接近机器方式表达,因此,使用指针程序更有效率。...这仅仅是指针简单使用,实际指针世界千变万化,丰富多彩,纵使多年C语言开发老手,有时在面对指针使用也会出错,后继者更应谨慎求索,后面将会对指针常见应用和注意事项进行介绍。...指针应用基本原则: 首先必须要指定指针类型; 如果是普通指针变量,非函数形参或者函数指针,必须要给指针变量指定地址,避免成为一个“野指针”; 回调函数 在C语言中回调函数是函数指针高级应用。...清零或置1 在嵌入式中,经常使用位预算符实现清零或置1。 例如,MCUODR寄存器控制引脚输出电平高低,寄存器为32位,每位控制一个引脚电平。

1K20

嵌入式 C 语言(上)

目录 基础知识 数据类型 const 用法 作用域与 static 用法 extern 用法 基础知识 嵌入式C语言和普通C语言在语法上几乎没有差别,其主要差别在于普通C语言运行环境是OS之上,有很多标准库函数支撑调用...,分配内存是电脑内存,其处理器就是电脑CPU;而在嵌入式环境中,会涉及到底层硬件,而硬件本身是没有标准库可以调用,因而就需要开发者使用C语言编程调试硬件,使其可以工作,对于开发某一款芯片,有针对编译器...,在普通C语言编程中,直接调用printf()函数即可在PC上打印出;而在嵌入式中,则需要开发者使用C语言去将芯片串口调试成功,然后将printf()函数重新实现,方可调用打印。...嵌入式C语言基本结构及其特点: 所有的C语言程序都需要包含main()函数,代码从main()函数开始执行;这一条在嵌入式中不一定完 全正确,在执行main()函数之前也有开发者可以操纵空间,因而开始函数可以不是...在嵌入式C语言编程中,static是一个非常灵活非常好用关键字,它可以让程序更简洁、更安全、更具有可移植性,在嵌入式系统中这三点都是非常重要编程思想,需要认真掌握。

1.3K30
您找到你想要的搜索结果了吗?
是的
没有找到

嵌入式 C 语言(中)

在有操作系统工程中修饰会被多个任务修改变量 在嵌入式开发中,不仅仅有单片机裸机开发,也有带有操作系统开发,通常两者使用C语言开发较多。...enum 用法 enum是C语言中用来修饰枚举类型变量关键字。...使用typdef时要记住,typedef并没有创建任何新类型,它只是为某个已有的类型增加了一个方便使用标签。 预处理器与预处理指令 本节将简单介绍C语言预处理器及其预处理指令。...C语言建立在适当关键字、表达式、语句以及使用他们规则上。然而C标准不仅描述C语言,还描述如何执行C预处理器。 C预处理器在执行程序之前查看程序,因而被称之为预处理器。...C语言习惯用.h后缀表示头文件,这些文件包含需要放在程序顶部信息。头文件经常包含一些预处理指令,有些头文件由系统提供,也可以自定义。

1.3K20

嵌入式C语言面试题_c语言基础面试题

预处理器标识#error目的是什么? 如果你不知道答案,请看参考文献1。这问题对区分一个正常伙计和一个书呆子是很有用。只有书呆子才会读C语言课本附录去找出象这种问题答案。...goto Loop 用法: 基本上c语言中不推荐goto使用,不符合程序化设计理念,呵呵。...Bit fields是被扔到C语言死角东西,它保证你代码在不同编译器之间是不可移植,同时也保证了代码是不可 重用。...15 Typedef 在C语言中频繁用以声明一个已经存在数据类型同义字。也可以用预处理器做类似的事。...C语言同意一些令人震惊结构,下面的结构是合法吗,如果是它做些什么? int a = 5, b = 7, c; c = a+++b; 这个问题将做为这个测验一个愉快结尾。

80210

总结嵌入式C语言知识点

福利干货,第一时间送达 引言 怎么才能做好嵌入式开发?学好C语言吧!今天就来推荐一篇大佬写嵌入式C语言知识点总结。...#endif等), 平台扩展关键字(__asm, __inline,__syscall) 这些关键字共同构成了嵌入式平台C语言语法。...波占空比等 对于数据管理就贯穿着整个嵌入式应用开发,它包含数据类型,存储空间管理,位和逻辑操作,以及数据结构,C语言从语法上支撑上述功能实现,并提供相应优化机制,以应对嵌入式下更受限资源环境...在嵌入式底层中十分重要,也是嵌入式C从业者基本要求之一。...通过数组,指针以及强制转换技巧,可以有效减少数据处理中复制过程,这对于底层是必要,也方便了整个架构开发。对于任何嵌入式C语言开发从业者,清晰掌握这些基础知识是必要。 end

24410

嵌入式开发常见3个C语言技巧

1.操作寄存器 在嵌入式开发中,常常要操作寄存器,对寄存器进行写入,读出等等操作。每个寄存器都有自己固有的地址,通过C语言访问这些地址就变得尤为重要。...其实这和我们刚刚讲过差不多。只不过这里是在定义了指针同时对指针进行赋值。 这里首先定义了结构体S3C2410_NAND,里面全部是32位变量。...又定义了这种结构体类型指针,且指向0x4e000000这个地址,也就是此刻s3c2410nand指向了一个实际存在物理地址。...s3c2410nand指针访问了NFSTAT变量,但我们要是它地址,而不是它地址上值。...在C语言中允许将函数入口地址赋值给指针。这样就可以通过指针来访问函数。 还可以把函数指针当成参数来传递。函数指针可以简化代码,减少修改代码时工作量。通过接下来讲解大家会体会到这一点

11710

嵌入式编程是否应该用C++替代C语言

嵌入式编程是否应该用C++替代C语言 1.前言 2.引进新设计模式 3.C++是一种不断更新语言 4.C++有着更加丰富特性 5.总结 1.前言 几十年来,嵌入式软件工程师们一直在争论是否应该使用...根据2019年IEEE和github市场调查显示,微控制器制造商提供软件大部分都是由C语言编写。 image.png 事实上,56%嵌入式软件是用C语言编写。...然而,C++已经逐渐普及,大约23%嵌入式软件项目都是用C++编写C语言发展到现在,差不多50年时间了,现在正是c语言过渡到C++语言成为嵌入式开发主流语言最佳契机。...对于习惯了用C语言开发嵌入式程序员来说,对C++语言是有一些误解和偏见。...5.总结 虽然目前来看,做嵌入式编程主流语言还是C语言,但是却不能回避一个事实,在github上搜索嵌入式工程时候,越来越多工程采用了C++进行编程。

2K20

嵌入式 C 语言八大难点揭秘

在可以使用 CC++ 地方,也广泛支持使用其他许多通用语言(如 Java?、Ruby、Haskell、C#、Perl、Smalltalk 等),每种语言都有众多爱好者和各自优点。...但是,从计算角度来看,每种编程语言优于 CC++ 主要优点都与便于内存管理密切相关。...与内存相关编程是如此重要,而在实践中正确应用又是如此困难,以致于它支配着面向对象编程语言、功能性编程语言、高级编程语言、声明性编程语言和另外一些编程语言所有其他变量或理论。...因此,出于所有这些原因,需要特别关注 CC++ 编程内存问题。让我们看一看如何解决这些问题,先不谈是哪种语言。 ▶ 内存错误类别 首先,不要失去信心。有很多办法可以对付内存问题。...即使迁移到 C++ 面向对象语言,这些类型也不会有明显变化;无论数据是简单类型还是 C 语言 struct或 C++ 类,CC++ 中内存管理和引用模型在原理上都是相同

40130

嵌入式开发中常见3个C语言技巧

今天我来说几个在嵌入式开发中常用C语言技巧吧。也许你曾经用过,也许你只是见到过但是没有深入理解。...那么今天好好补充下吧^_^ 1.指向函数指针   指针不光能指向变量、字符串、数组,还能够指向函数。在C语言中允许将函数入口地址赋值给指针。这样就可以通过指针来访问函数。...如果大家想对函数指针有更深理解建议看一下以下相关资料: C语言 指针专题一 C语言 指针专题二 C语言 函数1 C语言 函数2 2.C语言操作寄存器   在嵌入式开发中,常常要操作寄存器,对寄存器进行写入...每个寄存器都有自己固有的地址,通过C语言访问这些地址就变得尤为重要。...嵌入式-物联网学习交流&【955648875】在学进群一起交流,资料自己群文件下载。

49486

嵌入式C语言程序调试和宏使用技巧

因此,上述宏可以等价以下形式: //打印字符 #define debugc(expr) printf(" #expr = %c\n", expr) //打印浮点数 #define debugf...#expr = %f\n", expr) //按照16进制打印整数 #define debugx(expr) printf(" #expr = 0X%x\n", expr); 总结 #是C语言预处理阶段字符串化操作符...3. ## 连接操作符 在gcc编译系统中,##是C语言连接操作符,可以在编译预处理阶段实现字符串连接操作。...使用这种形式可以将宏参数传递给一个参数。args…是宏参数,表示可变参数列表,使用##args将其传给printf函数。 总结 ##是C语言预处理阶段连接操作符,可实现宏参数连接。 4....-pg选项 deng@itcast:~/tmp$ gcc -pg test.c -o test 执行完成后,在当前文件中生成了一个gmon.out文件。

62810

嵌入式C语言源代码优化方案

,因为增量符语句比赋值语句更快,原因在于对大多数CPU来说,对内存字增、减量操作不必明显地使用取内存和写内存指令,比如下面这条语句: x = x+1; 模仿大多数微机汇编语言为例,产生代码类似于:...e = a / c; f = b / c; 推荐代码: float a,b,c,e,f; // 。。。...很多高级语言,包括C++,并不对产生浮点表达式重新排序,因为那是一个相当复杂过程。需要注意是,重排序代码和原来代码在代码上一致并不等价于计算结果一致,因为浮点操作缺乏精确度。...+ temp->dog; 一些老C语言编译器不做聚合优化,而符合ANSI规范编译器可以自动完成这个优化,看例子: float a,b,c,d,f,g; //。。。...说明 该方案主要是考虑到在嵌入式开发中对程序执行速度要求特别高,所以该方案主要是为了优化程序执行速度。

2.6K40

__asm__ volatile 之 C语言嵌入式汇编

这是一个非常有用功能,有利于我们将一些C/C++语法无法表达指令直接潜入C/C++代码中,另外也允许我们直接写 C/C++代码中使用汇编编写简洁高效代码。...所以当你使用高级语言C/C++写这类程序时候,你必须让编译器也能够明白这一点,毕竟高级语言最终要被编译为汇编代码。...C/C++表达式格式。...括号括住部分是一个C/C++表达式,用来保存内联汇编一个输出值,其操作就等于C/C++相等赋值cr0 = output_value,因此,括号中输出表达式只能是C/C++左值表达式,也就是说它只能是一个可以合法放在...括号中表达式cpu->db7是一个C/C++语言表达式,它不必是一个左值表达式,也就是说它不仅可以是放在C/C++赋值操作左边表达式,还可以是放在C/C++赋值操作右边表达式。

11.8K43

C语言嵌入式重点知识:回调函数

因为我们刚开始学C语言时候,总认为typedef取别名一般形式为: typedef 旧名字 新名字; 确实也是这样,但遇到给函数指针类型、数组类型等定义别名时候就要特别区分了。...回调函数例子 上面分析了那么多,可能很多朋友会觉得回调函数太麻烦了,没必要用。但是现实是,回调函数在我们C编程、嵌入式编程中用得很广泛。...1、在C编程中 在C语言通用工具库stdlib.h中,有如下一个函数原型: void qsort(void *, size_t, size_t, int (comp*)(const void *, const...总结 回调函数是一个很重要知识点,我们需要掌握。而回调函数又与函数指针联系密切,我们要努力把函数指针弄懂、用熟。 在C语言中,指针很重要,函数指针更重要。...正如前辈们常说类似这样子的话:不会C指针,就没学会C语言;不会函数指针,就不要称自己是C语言高手。 在这几种方法中分析中,其实回调函数更多是体现出了软件分层思想。

86330

protobuf在嵌入式linux下移植及c语言调用

关于什么是protobuf,网上搜搜一大堆,很多人用都还是json,以为json是多种语言传输数据是万能,看完了protobuf实现,就明白了简单高效才是王道。...地址:https://developers.google.com/protocol-buffers/ 支持java、c++、go等多种语言,几乎所有主流语言都支持。...地址:https://developers.google.com/protocol-buffers/ 支持java、c++、go等多种语言,几乎所有主流语言都支持,但是官方没给出c语言支持。...,和两端都是C语言实现client/server直接传输结构体变量原理是一样,我们都知道,C语言结构体成员存储方式都是顺序存储。...2、但是protobuf设计初衷应该是为了适应不同语言之间数据传输,像java写server里面就没有结构体,所以就不能传输Cclient里面的结构体变量给对方,对方是解析不了

6.5K30

嵌入式程序开发,C语言C++究竟应该用哪个?

嵌入式软件程序开发中,C语言无疑是最常被使用程序语言。不过应该明白是,有些嵌入式硬件同时提供C语言程序编译器以及C++程序编译器,而相比于C语言C++的确具备很多非常好用特性。...此外,使用C语言进行嵌入式程序开发更容易把控最终生成指令,能够得到更精确硬件控制,这对于资源匮乏嵌入式设备来说是非常可贵。...简单来说,C语言程序更加可控,而嵌入式程序员一般都是控制欲很强性格,从这一层面考虑,C语言也更加适合嵌入式程序开发。...C语言也更加适合嵌入式程序开 小编给大家推荐一个学习氛围超好地方,鼠标放到头像上就能看到 小结 简单来看,在嵌入式程序开发领域,C语言C++更加合适主要有两个原因: 1....C语言程序更好预测其代码尺寸和开销,这对于RAM只有4KB资源匮乏嵌入式设备来说来很重要。 2. 大多数嵌入式程序员更了解C语言,因此为了促进同事间协调性,更推荐使用大家都喜爱程序语言

2.4K10

嵌入式C语言实现事件型按键驱动

本项目是一个小巧简单易用事件驱动型按键驱动模块,可无限量扩展按键,按键事件回调异步处理方式可以简化你程序结构,去除冗余按键处理硬编码,让你按键业务逻辑更清晰。...download.csdn.net/download/m0_38106923/87537836 1、使用方法 1.先申请一个按键结构 struct Button button1; 2.初始化按键对象,绑定按键GPIO...button1, DOUBLE_CLICK, Callback_DOUBLE_Click_Handler); ... 4.启动按键 button_start(&button1); 5.设置一个5ms间隔定时器循环调用后台处理函数...if(timer_ticks == 5) { timer_ticks = 0; button_ticks(); } } 2、特性 本项目使用C语言实现,基于面向对象方式设计思路...number_of_event]; struct Button* next; }; 这样每个按键使用单向链表相连,依次进入 button_handler(struct Button* handle) 状态机处理,所以每个按键状态彼此独立

26610
领券