单片机用汇编还是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 编译器做了很多小动作,生成的代码的可预测性降低,举个韦大答案里面的例子,str1=str2 "hello" str3;天知道这句话里面做了几次拷贝几次构造。对于很多工控设备,低的代码可预测性==高风险
以mcu的工作量,不是非得C 才能完成业务逻辑
mcu的那一点flash容量恐怕连最简单的C 的stl/boost库都放不下,而cpp的很多高阶特性是依赖于这些库实现的。没有强大的运行时进一步降低了C 在mcu领域的性价比
汇编到c语言的变化是语法上进一步简明、模式化的过程,c到cpp(指c和cpp公共特性之外的那一部分语法特性,你要是拿cpp干c的活儿当我没说)是编程思想的转变,这两种变化完全不同
C 程序设计主要有以下知识点需要理解
文章相对比较长,字数比较多,大家可以先打开头像关注我,之后慢慢看,///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像左下角黑色字体加我也能领取哦。最近比较闲,带做毕设,带学生参加省级或以上比赛///
面向对象编程
面向对象编程是将对象抽象成类,把类的数据与操作封装在一起而进行的编程。
优点:易维护、提高代码复用率
参数传递的方式
数据复制:创建形参,复制实参的值,占用不同的存储空间
地址传递:传入参数的地址,函数对指针所指向的内容进行操作
引用方式:相当于变量的别名,但不能指向空地址,且不可变
函数重载
用于不同参数类型获参数数目不同时
内联函数
inline:在被调用的每一个地方都插入它的一份拷贝,适用于小函数。
静态变量
全局静态变量:作用域在本文件中,程度运行期间一直存在。
局部静态变量:作用域在本语句块中,离开作用域后不被销毁。
静态变量存储在内存数据区,在程序运行过程中不释放,结束后才释放内存。
静态函数
只在本文件中可见,不能被其他文件所用。避免函数重名冲突。
C 内存管理
C 中内存分为代码段、数据段、BSS段、堆区、文件映射区、栈区。
栈区:函数局部变量的存储空间在栈上;
文件映射区:存储动态连接库和大空间的分配,mmap文件映射;
堆区:调用new/malloc在堆区分配内存;
BSS段:存储未初始化的全局变量和静态变量;
数据段:存储初始化的全局变量和静态变量;
代码段:文本区存储程序的机器码。
指针
指针是一种特殊的变量,存放被指向内容的内存地址。
除可以指向常用的变量外,指针也可以指向数组、类、函数等,指针也可以用数组存放。
new和malloc的区别
new是C 中的函数,可以为变量分配对应的内存空间;
malloc是C中的函数,它需要指定分配空间的大小,需要借用size of函数,因为它不能通过变量的类型自动判断
类的构造函数和析构函数
类的构造函数在生成对象时被调用,用于为对象分配空间,并初始化对象,构造函数也可以重载。
类的析构函数在对象释放前调用,做一些清理工作。
类和对象
类相当于数据类型,对象时类的实例化。
友元函数
友元函数定义在类的外部,但可以访问类的私有成员,它不是成员函数,但在类中声明。
运算符重载
运算符重载可以重新定义运算符。
重载方式:
成员函数重载运算符,常用于类与数据运算
友元函数重载运算符,常用于类与类的运算
继承
公有继承、保护继承、私有继承。
基类的私有成员都不能被派生类访问。
虚继承
当B、C都继承了A,D又继承了B、C,会出现命名冲突和冗余数据的问题。
利用虚继承,可以解决上述问题,即
class B:virtual public A{};
class C:virtual public A{};
多态
多态是指调用成员函数时,会根据调用函数的对象类型来执行不同的函数。
静态方式
利用函数重载、运算符重载实现多态。
动态方式
利用虚函数和基类指针来实现多态。
虚函数
虚函数是指在基类定义后,可以在派生类定义同名函数实现不同的功能。
利用基类指针,分别指向不同的派生类后调用函数,就可以实现派生类中定义的函数功能。
纯虚函数
纯虚函数的定义如下:
virtual 函数类型 函数名() = 0;
抽象类
包含纯虚函数的类成为抽象类,一个类可以有多个纯虚函数。
对单片机感兴趣的朋友可以找我,我录制了一些关于单片机的入门教程,有需要的童鞋找我拿就行,免费的,私信我“林老师”就可以拿~点击打开我的头像就能领取