快捷搜索:  汽车  科技

单片机用汇编还是c语言好(单片机编程最早是汇编进化到C语言)

单片机用汇编还是c语言好(单片机编程最早是汇编进化到C语言)C 编译器做了很多小动作,生成的代码的可预测性降低,举个韦大答案里面的例子,str1=str2 "hello" str3;天知道这句话里面做了几次拷贝几次构造。对于很多工控设备,低的代码可预测性==高风险原子操作和中断操作用c/汇编甚至有人在ARM Cortex-M3架构的mcu上实现了lua解释器(lua是ANSI C写的)底层驱动用c或者汇编来写业务逻辑用cpp

单片机编程最早是汇编进化到C语言,未来C 会不会替代成为主流

高级语言已经应用在MCU上面了

arduino采用processing语言

mdk的编译器支持C 语法

甚至有人在ARM Cortex-M3架构的mcu上实现了lua解释器(lua是ANSI C写的)

底层驱动用c或者汇编来写

业务逻辑用cpp

原子操作和中断操作用c/汇编

单片机用汇编还是c语言好(单片机编程最早是汇编进化到C语言)(1)

C 编译器做了很多小动作,生成的代码的可预测性降低,举个韦大答案里面的例子,str1=str2 "hello" str3;天知道这句话里面做了几次拷贝几次构造。对于很多工控设备,低的代码可预测性==高风险

以mcu的工作量,不是非得C 才能完成业务逻辑

mcu的那一点flash容量恐怕连最简单的C 的stl/boost库都放不下,而cpp的很多高阶特性是依赖于这些库实现的。没有强大的运行时进一步降低了C 在mcu领域的性价比

汇编到c语言的变化是语法上进一步简明、模式化的过程,c到cpp(指c和cpp公共特性之外的那一部分语法特性,你要是拿cpp干c的活儿当我没说)是编程思想的转变,这两种变化完全不同

C 程序设计主要有以下知识点需要理解

文章相对比较长,字数比较多,大家可以先打开头像关注我,之后慢慢看,///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像左下角黑色字体加我也能领取哦。最近比较闲,带做毕设,带学生参加省级或以上比赛///

面向对象编程

面向对象编程是将对象抽象成类,把类的数据与操作封装在一起而进行的编程。

优点:易维护、提高代码复用率

单片机用汇编还是c语言好(单片机编程最早是汇编进化到C语言)(2)

参数传递的方式

数据复制:创建形参,复制实参的值,占用不同的存储空间

地址传递:传入参数的地址,函数对指针所指向的内容进行操作

引用方式:相当于变量的别名,但不能指向空地址,且不可变

函数重载

用于不同参数类型获参数数目不同时

内联函数

inline:在被调用的每一个地方都插入它的一份拷贝,适用于小函数。

静态变量

全局静态变量:作用域在本文件中,程度运行期间一直存在。

局部静态变量:作用域在本语句块中,离开作用域后不被销毁。

静态变量存储在内存数据区,在程序运行过程中不释放,结束后才释放内存。

静态函数

只在本文件中可见,不能被其他文件所用。避免函数重名冲突。

C 内存管理

单片机用汇编还是c语言好(单片机编程最早是汇编进化到C语言)(3)

C 中内存分为代码段、数据段、BSS段、堆区、文件映射区、栈区。

栈区:函数局部变量的存储空间在栈上;

文件映射区:存储动态连接库和大空间的分配,mmap文件映射;

堆区:调用new/malloc在堆区分配内存;

BSS段:存储未初始化的全局变量和静态变量;

数据段:存储初始化的全局变量和静态变量;

代码段:文本区存储程序的机器码。

指针

指针是一种特殊的变量,存放被指向内容的内存地址。

除可以指向常用的变量外,指针也可以指向数组、类、函数等,指针也可以用数组存放。

new和malloc的区别

new是C 中的函数,可以为变量分配对应的内存空间;

malloc是C中的函数,它需要指定分配空间的大小,需要借用size of函数,因为它不能通过变量的类型自动判断

类的构造函数和析构函数

类的构造函数在生成对象时被调用,用于为对象分配空间,并初始化对象,构造函数也可以重载。

类的析构函数在对象释放前调用,做一些清理工作。

类和对象

类相当于数据类型,对象时类的实例化。

友元函数

友元函数定义在类的外部,但可以访问类的私有成员,它不是成员函数,但在类中声明。

运算符重载

运算符重载可以重新定义运算符。

重载方式:

成员函数重载运算符,常用于类与数据运算

友元函数重载运算符,常用于类与类的运算

继承

公有继承、保护继承、私有继承。

基类的私有成员都不能被派生类访问。

虚继承

单片机用汇编还是c语言好(单片机编程最早是汇编进化到C语言)(4)

当B、C都继承了A,D又继承了B、C,会出现命名冲突和冗余数据的问题。

利用虚继承,可以解决上述问题,即

class B:virtual public A{};

class C:virtual public A{};

多态

多态是指调用成员函数时,会根据调用函数的对象类型来执行不同的函数。

静态方式

利用函数重载、运算符重载实现多态。

动态方式

利用虚函数和基类指针来实现多态。

虚函数

虚函数是指在基类定义后,可以在派生类定义同名函数实现不同的功能。

利用基类指针,分别指向不同的派生类后调用函数,就可以实现派生类中定义的函数功能。

纯虚函数

纯虚函数的定义如下:

virtual 函数类型 函数名() = 0;

抽象类

包含纯虚函数的类成为抽象类,一个类可以有多个纯虚函数。

对单片机感兴趣的朋友可以找我我录制了一些关于单片机的入门教程有需要的童鞋找我拿就行免费的私信我“林老师”就可以拿点击打开我的头像就能领取

猜您喜欢: