一、linux基础、C语言、数据结构回顾

一、linux基础、C语言、数据结构回顾

目录

  • 一、linux基础、C语言、数据结构回顾
    • 1、linux基础:
    • 2、Linux下的C语言
    • 3、面试题
    • 4、linux下数据结构
    • 5、Linux下高级编程
    • 6、结构
    • 7、物联网项目框架
    • 8、现如今物联网技术
    • 9、由表象到里象了解芯片
    • 10、了解芯片
    • 10、ARM公司和ST公司
    • 11、了解STM32F103RBT6芯片

1、linux基础:

熟悉Linux环境、Red Hat centos suse ubuntu …、安装操作系统、命令、服务、权限、vim gcc

2、Linux下的C语言

	printf
	变量
	scanf
	运算符
		算数	+ - * / %
		关系	> < == >= <= !=
		逻辑	&& || !
		赋值	= += -= ...
		位	<< >> & | ~ ^
		条件	? :
		下标	[]
		指针	& *
		分量	. ->
		强制	(类型)
		自增自减	++ --
		逗号	,
	分支结构
		if
		switch
	循环结构
		for
		while
		do...while
	跳转结构
		break
		continue
		goto
		return
	指针		
	数组		
	函数
	结构体
	共用体
	枚举
	预处理
	文件IO(标准IO)
	文件的操作
	fopen fclose fread fwrite fseek fflush

3、面试题

(1).把一个.c文件编译成一个可执行文件,需要经历哪些阶段 hello.c -> a.out

源文件	    被处理过的源文件	汇编文件    目标文件
hello.c------>hello.i----->hello.s---->hello.o----->
     预处理	   编译	      汇编        链接

(2).在预处理阶段会做哪些操作?

文件包含	#include
条件编译
宏定义  	#define

(3).文件包含中,"" 和 <> 有啥区别

<> : 从指定的目录中查找头文件(/usr/include),
	如果找不到,就报错
"" : 从当前目录中查找头文件
	如果找不到,再从指定的目录中查找头文件

4、linux下数据结构

线性存储
	顺序表
		数组
			一维数组
			多维数组
				二维数组
	链表
		有头/无头	头节点
		单向/双向	遍历方向
		循环/不循环	环状结构
	普通链表->引入链式存储结构
	通用性强的链表->通用性强
	内核链表
=================================
1.可以在PC机中写出通用性强的链表
2.大家可以使用内核链表
3.大家可以在纸上写出链表的增删改查
=================================
	栈式存储结构
		先进后出
	队列存储结构
		先进先出
	树状存储结构
		树
		二叉树
		完全二叉树
		满二叉树
		--------------
		平衡二叉树
	==========================
	面试题
	遍历方法
	先序()	根左右
	中序()	左根右
	后序()	左右根
	1->给了一棵树,写三种遍历方法
	2->给了中序,任意给一个先序或者后序
		然后画出这棵树
	==========================

5、Linux下高级编程

文件IO(系统调用和标准IO)
信号
	signal(int signum, )
进程
线程
进程间通信
网络套接字
	TCP/UDP
QT

6、结构

	在硬件上写软件的驱动程序

	应用程序	微信 QQ 游戏
应用层	图形库	jpg jpeg
	库文件	lib(静态库 动态库)
		根文件系统(把硬盘中的二进制数据,识别成)
		不同格式的文件
底层	kernel	Linux内核 android内核
		bootloader(BIOS + GRUB)
		GRUB(引导内核)
	软件	BIOS(初始化硬件/检测硬件)
	================================
	硬件	CPU + 内存 + 硬盘 + 外设(键盘 鼠标 屏幕)

7、物联网项目框架

	华为公司总结的物联网项目框架
	应用层	http mqtt coap
	平台层	小米	小米IoT
		华为	Ocean Connect
		阿里	AIoT
		百度	百度天工
		移动	OneNet
		联通	中国联网物联网
		-----------------------
	很多中小型公司也会有自己公司的物联网云平台
		ESLink	iot.embsky.com
	网络层	WiFi模块
	感知层	STM32F103RBT6芯片的单片机开发板
	-----------------------------------
	例子:
	5G技术(5)
		增强型的移动互联网络	-> 虚拟现实(VR)
			VR->AR->MR...
		超高可靠性超低时延的业务	-> 车联网
			车联网(自动驾驶 无人驾驶)
			远程医疗
		海量的物联业务		-> 物联网
	-----------------------------------	

8、现如今物联网技术

	智能终端 : 单片机驱动开发 / 芯片模组开发
	边缘计算 : 高端ARM芯片的驱动开发
		有些公司除了使用高端的ARM芯片
		也是使用高端的单片机芯片
	===================================
	例子 :
		CPU		中央处理器
		显卡(GPU)	图像处理单元
		显卡	边缘计算
		人工智能 -> 英伟达
		寒武纪 -> 人工智能加速卡
		
	===================================
	中控平板
	人机交互
		智能音箱
			小爱同学
			天猫精灵

9、由表象到里象了解芯片

公司 : 结果
学习 : 过程
通过开发板俯视图,了解开发板上焊接的设备

10、了解芯片

	无论是SOC(高端芯片)还是MCU(单片机芯片),都是可以
		自己组成一个微型的计算机系统
	STM32F103RBT6 = CPU + 内存 + 硬盘 + 外设
		CPU	ARM-CORTEX-M3(72MHz)
		内存	用来支援运行的程序
		硬盘	存储的是烧写的程序
		外设	程序员通过外设来操作芯片
	
	S5P6818 = CPU + 内存 + 硬盘 + 外设
		CPU	ARM-CORTEX-A53
		内存	用来执行硬盘中的程序
		硬盘	存储的是三星公司出产芯片时写入
			的程序
		外设	比单片机外设多很多

10、ARM公司和ST公司

	ARM是一家公司,在英国剑桥成立,在2016年底ARM公司
	被日本软银收购了(234亿英镑)
	从ARM11之后,重新命名
	ARM-CORTEX-A	高精尖的应用产品(手机 安卓电视)
			ARM-CORTEX-A57
	ARM-CORTEX-R	实时操作系统
			军工 高端医疗 航空航天
	ARM-CORTEX-M	工业控制(工控领域)
			
	ST公司,意法半导体公司,全球比较大的半导体厂商公司
	研发半导体芯片
		STM32	32位芯片
		STM8	8位芯片
	=================================
	使用8位的芯片,计算两个16位数据的和
	低8位计算一次,高8位计算一次
	=================================

11、了解STM32F103RBT6芯片

	打开<STM32RBT6\DataSheet\STM32>目录下
	<ST_MCU最新选型手册.pdf>		P22
	STM32F103RBT6
		FLASH SIZE(硬盘)		128Kb
		RAM SIZE(内存)		20Kb
		Package(封装形式)	64管脚的封装
		Timer functions(定时器)	4×16bit普通
					2×看门狗
					RTC
					24bit定时器
		ADC(模数转换器)		16×12bit
					16个转换通道
					12bit量化位
		DAC(数码转换器)		无
		I/Os(输入输出的接口)	51
		Serial interface(串口)	2个SPI
					2个I²C
					3个USART/UART
					1个USB
					1个CAN总线
	打开<STM32RBT6\DataSheet\STM32>目录下
		<STM32F103RB.pdf>	P19			
	CPU是通过三总线来访问外设的				
		(数据总线 地址总线 控制总线)
	-------------------------
	想要把十进制整数100存储到0x12345678地址中
	01100100   通过 数据总线 进行传输
	0x12345678 通过 地址总线 进行传输
	控制总线需要产生写的时序
	-------------------------
	在STM32芯片中AHB AHB1 AHB2都是三总线,叫做高速总线
		APB1 APB2也是三总线,叫做外设总线
	顾名思义,高速总线上的工作频率基本上和CPU一样
	外设总线上连接的都是外设资源
		
	当程序员想要驱动芯片中的外设时
	首先需要使能这个外设的时钟
	需要查看该外设连接了哪个总线,需要通过总线打开时钟
	------------------------------
	例如:
	想要驱动GPIOA外设,已知GPIOA连接了APB2总线
	所以在驱动之前需要通过APB2总线使能GPIOA的时钟
	(除非操作的外设有自己的时钟源)
	------------------------------
	在STM32F103RBT6芯片中所有GPIO外设连接到了APB2总线
	但是不一定所有的ST芯片都是一样的
	(不同的芯片看不同的手册)

	基本上每一组GPIO都会有16个管脚[0 - 15]
	GPIOXY
		X = A B C D
		Y = 0 1 2 3 ... 15
	PA10 : GPIOA组的第10个管脚
	PC0  : GPIOC组的第0个管脚
	在STM32F103RBT6芯片中
		PA0 - PA15
		PB0 - PB15
		PC0 - PC15
		PD0 PD1 PD2
	一共是51个I/O管脚

	芯片的管脚是多功能复用型的管脚
		输入功能
			上拉输入
			下拉输入
			浮空输入
		输出功能
			推挽输出
			开漏输出
		复用功能
			推挽复用
			开漏复用
		模拟功能
			模拟输入

你可能感兴趣的:(STM32F103系列专栏,linux,c语言,数据结构)