赞
踩
C++:与QT配合搭建图形化开发,阅读linux内核源码打基础
QT:在嵌入式领域中进行图形化开发
市场上的嵌入式设备:
1、单片机:RTOS(FreeRTOS / RTThread)
跑界面:mini GUI (C/C++) LVGL(C语言)
2、高端ARM开发板:安卓
跑界面:专门做安卓应用的开发
3、高端ARM开发板:Linux
跑界面:QT
国家大力推国产化:
芯片:龙芯、飞腾、兆易创新
OS :鸿蒙、澎湃、优麒麟、红旗
在国产芯片上移植国产的操作系统就是嵌入式工程师的工作。
国产操作系统以Linux为基础,因此图形化开发也需要我们。
-----------------------------------------------------------------------------------------
要给一个指定的地址存储整数,需要先将地址强转为地址类型
如:
*(int *)(0x12345678) = 100;
*(volatile unsigned int *)(0x12345678) = 100;(常用)
volatile:防止编译器优化(编译器优化指的是,当编译器发现你初始化了一个值,但在接下来的语句中并没有进行操作,则编译器认为你这种行为是没有实际意义的,所以给你优化掉了,就是不执行了)
不可:
0x12345678 = 100 (编译器理解为要对整型数进行赋值,报错)
*(0x12345678) = 100 (编译器理解为要对一个整型数进行取值,报错)
-----------------------------------------------------------------------------------------
(1)、C++开发工程师
(2)、嵌入式应用开发(C/C++)
(3)、嵌入式QT开发工程师
(1)、C到C++过渡
(2)、类和对象(C++如何创建类、创建对象、如何进行封装?)
(3)、继承和多态
(4)、模板(泛型编程)
(5)、文件IO
(6)、异常处理
(7)、多线程
(8)、STL模板库(数据结构和算法)
开发环境 Linux平台
编辑器 Vim、VsCode
编译器 g++(和gcc一样是GUN的编译器)
文件后缀 xxx.cpp(C Plus Plus)
【c】 #include <stdio.h>
【c++】 #include <iostream> / #include <stdlib>
注意:C++在包换头文件时不需要写“.h”,如果想要包含“stdlib.h”,只需要写成#include <stdlib>
主要因为C++中有一个概念“命名空间”(namespace)
早期标准库将所有的功能在全局域中实现,声明在.h文件使用的时候需要包含对应的头文件,后来C++标准引入了命名空间,就把C++的标准库的定义实现都放在了命名空间中。
-----------------------------------------------------------------------------------------
包含头文件时,尖括号<>与双引号""的区别
主要是搜索路径不同
双引号#include“”格式:我们常常引用非标准库的头文件,即我们自己写的头文件,编译器从用户的工作目录开始搜索
1)在当前源文件所在的工作目录中进行查找
2)在编译器设置的头文件查找路径,编译器有默认的头文件查找路径(可以在编译时,使用-l显式指定搜索路径)
3)系统变量CPLUS_INCLUDE_PATH/C_INCLUDE_PATH指定的头文件路径
尖括号#include<>格式: 我们常常引用标准库头文件,编译器从标准库目录开始搜索
1)在编译器设置的头文件查找路径,编译器有默认的头文件查找路径(可以在编译时,使用-l显式指定搜索路径)
2)系统变量CPLUS_INCLUDE_PATH/C_INCLUDE_PATH指定的头文件路径
-----------------------------------------------------------------------------------------
将变量名(一般是全局的)(函数名、类型名)限制到一个空间(命名空间)
-----------------------------------------------------------------------------------------
变量的三个关注点(作用域,存储空间,生命周期)
全局变量 | 说明 | 定义在函数外的变量 |
作用域 | 整个进程 | |
生存周期 | 整个进程 | |
存储位置 | 未初始化的在bss段,值一定是0 已初始化的在data段 |
|
局部变量 | 说明 | 定义在函数内的变量 |
作用域 | 函数内 | |
生存周期 | 到函数结束 | |
存储位置 | 栈区 未初始化一定是随机值 |
|
局部静态变量 | 说明 | 由static修饰的局部变量 |
作用域 | 函数内 | |
生存周期 | 整个进程 | |
存储位置 | 未初始化的在bss段,值一定是0 已初始化的在data段 |
-----------------------------------------------------------------------------------------
缩短变量名的作用域(只在命名空间中有效,用来防止多文件多模块编程时出现命名冲突的问题)
定义命名空间的方式
- namespace myTestname
- {
- int a; // 整型变量
- FILE *fp; // 文件流指针
- void test(void); // 函数的声明
- } // 注意:没有分号
[1]使用域作用限定符号
命名空间的名字::变量名
例如:myTestname::a、std::cout
[2]展开命名空间(把限制打开)
using namespace 命名空间的名字
例如:using namespace std;、usingnamespace myTestname;
注意:在写项目时不适合用第二种方式,命名空间中的所有成员都在全局域中,这样会有冲突
C语言是面向过程的语言,输入输出是函数提供的
C++是面向对象的语言,输入输出是对象
[1]标准输入istream----预定义的对象cin
cin >> n; // 读取一个数据,存储到n中
在C语言中,我们使用scanf给一个变量录入数值。
[2]标准输出ostream----预定义的对象cout
cout << "hello" << endl; // 输出一个字符串hello
endl(end of line)是C++标准库中的操控器,代表换行
在输入和输出时用到了“<<”和“>>”,其实就是位运算符,只不过运算符重载了。
cin和cout是由iostream头文件提供的对象,所以想要使用的话,需要包含这个头文件。
谁打开谁关闭 文件IO
谁申请谁释放 堆区的空间(malloc realloc calloc / free)
谁创建谁销毁 链式存储结构
谁加锁谁解锁 线程
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。