嵌入式学习路线和ROTS开发模式(1)
1.基础内功:
C语言,C++;数字电路,模拟电路;英语,看懂芯片手册;万用表,示波器工具等
2.就业方向:
单片机裸机,单片机RTOS,linux驱动,linux应用,DSP,FPGA;
3. 主流芯片架构:
ARM:
A应用程序类型:
经典ARM处理器: ARM926系统(ARMv5结构) ARM11系列(ARMv6系列)
ARM Cortex处理器: Cortex-A8 , Cortex-A9,....A35等
R实时控制器类型:
经典ARM处理器: ARM920系列(ARMv4结构), ARM966(ARMv5结构)
ARM Cortex处理器:Cortex-R3,R5,R7,R8,R52
M微控制器类型:
经典ARM处理器: ARM7系列(ARMv3结构)
ARM Cortex处理器:Cortex-M0,Coretx-M1(FPGA), M3,M4,M7,M23.M33
mcu: ram (自带)+mcu+flash(自带);
mpu: ram (外挂)+ flash(外挂)+mpu
RTOS:
Real-time operating system,实时操作系统。
汇编指令:
* 读内存:Load,LDR
* 写内存:Store,STR
* 加法:ADD
* 入栈:PUSH,实质上就是写内存STR
* 出栈:POP,实质上就是读内存LDR
要读内存:读内存哪个地址?读到的数据保存在哪里?读多少字节?
* LDR R0, [R1, #0x00]
* 源地址:R1+0x00,注意:不是读R1,是把R1的值当做内存的地址
* 目的:R0,CPU的寄存器
* 长度:4字节,LDR指令就是读4字节,LDRH是读2字节,LDRB是读1字节
要写内存:写内存哪个地址?从哪里得到数据?写多少字节?
* STR R0, [R1, #0x00]
* 目的地址:R1+0x00,注意:不是写R1,是把R1的值当做内存的地址
* 源:R0,CPU的寄存器
* 长度:4字节,STR指令就是读4字节,STRH是读2字节,STRB是读1字节
入栈:CPU的寄存器的值,写到内存上
* PUSH {R3, LR}
* 源:CPU的寄存器R3、LR的值
* 目的:内存,内存哪里?使用CPU的SP寄存器指定内存地址
* 长度:大括号里所有寄存器的数据长度,每个寄存器4字节
* 注意:低编号的寄存器,保存在内存的低地址处
出栈:把内存中的数值,写到CPU的寄存器
* POP {R3, PC}
* 源:内存,内存哪里?使用CPU的SP寄存器指定内存地址
* 目的:CPU的寄存器R3、PC的值
* 长度:大括号里所有寄存器的数据长度,每个寄存器4字节
* 注意:内存的低地址处的数据,写到CPU低编号的寄存器
其他知识:
* CPU内部有R0、R1、……、R15共16个寄存器
* 某些寄存器有特殊作用
* R13,别名SP,栈寄存器,保存着栈的地址
* R14,别名LR,返回地址,保存着函数的返回地址
* R15,别名PC,程序计数器,也就是当期程序运行到哪了
保存现场的几种场景:
* 函数调用
* 中断处理
* 任务切换
FreeRTOS中怎么创建任务:
* 分配了TCB结构体
* 分配了栈
* 在栈里写入了函数地址、参数
调度机制:
* 优先级不同
* 高优先级的任务,优先执行,可以抢占低优先级的任务
* 高优先级的任务不停止,低优先级的任务永远无法执行
* 同等优先级的任务,轮流执行:时间片轮转
* 状态
* 运行态:running
* 就绪态:ready
* 阻塞:blocked,等待某件事(时间、事件)
* 暂停:suspend,休息去了
* 怎么管理?
* 怎么取出要运行的任务?
* 找到最高优先级的运行态、就绪态任务,运行它
* 如果大家平级,轮流执行:排队,链表前面的先运行,运行1个tick后乖乖地去链表尾部排队
调度方法:
TICK中断!
链表:
FreeRTOS里面维护了3个链表,各个链表还设置了从低到高的优先级,0-4, 同一个优先级的任务由时间片轮转切换
1.ReadyList
2.DealyList
3.suspendList
队列:
FreeRTOS里面的队列是个环形缓冲区,同时这个队列有休眠和唤醒的功能
嵌入式学习路线和ROTS开发模式(1)相关推荐
- 呕心沥血整理的的嵌入式学习路线
曾经是某见的教学总监,我带出来的学生也有大几千了,基本都从事linux相关开发工作.现在在各行各业也基本都是翘楚,有的都成公司技术主管,带领几十人上百人团队. 网上看了很多的嵌入式学习路线,有的还凑活 ...
- 本科/研究生阶段--嵌入式学习路线(尤其适用于机械僧)
本科/研究生阶段--嵌入式学习路线(尤其适用于机械僧) 嵌入式开发方向 一.基础阶段(兴趣阶段) 2.1.知识储备 C语言 基本的数电模电 2.2.实践 Arduino开始入手 STM32F1/F4( ...
- 嵌入式学习路线——解惑
你是否在嵌入式学习过程中有很多疑惑,不知道从哪里开始,不知道怎么学一些列问题,在这里给了部分解答,一起去看看 问题一 初学者学习C语言什么时候才能写出像JAVA一样.WEB一样.QT C++一样.py ...
- 详解从0开始的嵌入式学习路线,学什么、怎么学?
嵌入式是个大筐,什么都可以往里面装,电子.机械.计算机.自动化.测控.通信.物联网--很多很多专业都和嵌入式沾边,硬件.驱动.操作系统.网络.应用.算法--很多同学越学越迷糊,越学越感觉什么也不会. ...
- 谈谈mini2440开发板的学习路线以及分享开发板的最新资料[minitools v1.9a...](更新时间:2020/05/16))
谈谈mini2440开发板的入门学习路线以及分享开发板的最新资料[minitools v1.9a...](更新时间:2020/05/16) 简介 因为毕设,自己也在学习mini2440开发板,但是它实 ...
- 【嵌入式学习】嵌入式学习路线介绍
文章目录 资料整理: 理论学习路线 嵌入式软件工程学习路线 51单片机 郭天祥 STM32单片机 正点原子 野火 安富莱 普中科技 参考链接 资料整理: 郭天祥教学视频<单片机:十天征服你> ...
- ARM+LINUX嵌入式学习路线
嵌入式学习是一个循序渐进的过程,如果是希望向嵌入式软件方向发展的话,目前最常见的是嵌入式Linux方向,关注这个方向,大概分3个阶段: 1.嵌入式linux上层应用,包括QT的GUI开发 2.嵌入式l ...
- 【干货分享】嵌入式学习路线公开!(书籍推荐+视频推荐+练手项目)
哈喽,大家好,我是仲一.最近有小伙伴在微信私信我,如何学习嵌入式.一直想写一篇学习路线的文章,由于各种原因拖到了现在.趁着国庆节在家,终于肝完了这篇文章. 我个人是从STM32转到驱动开发的,在研二的 ...
- 新手小白学习嵌入式系统怎么学?嵌入式学习路线
嵌入式可以说是当下有前途的IT应用领域,小到电子词典.手机,大到航空航天设备都是典型的嵌入式系统,因此,通过嵌入式技术人才的职业发展空间是非常大的.那么想进入嵌入式行业,新手小白学习嵌入式系统怎么学呢 ...
最新文章
- 沸点压力计算java_java 观察者模式
- Boost:基于Boost的阻塞tcp echo的测试程序
- python3创建一个游戏窗口
- rsync安装与配置使用 数据同步方案(centos6.5)
- html5 摄像头拍摄视频教程,html5实现调用摄像头并拍照功能
- 使用Kylin导入JDBC数据源遇到的问题
- 画春天的景色计算机教案,大班绘画春天来了教案
- gephi生成网络关系图_路网拓扑重建专题 (3) 网络图生成
- 机器学习算法汇总:人工神经网络、深度学习及其它
- WPF学习笔记-如何按ESC关闭窗口
- 全网首发:怎样加快android doubango的编译速度?
- Dispatch(01)
- 揭秘北京龙泉寺,连清华北大学子都排队出家的神秘科研组织
- 怎么将几张pdf合并成一张_怎么把多个PDF文件合并成一个
- 数据库分库分表,分片配置轻松入门!
- 台式计算机提示电池低,台式机电脑电源供电不足怎么办 台式机电脑电源供电不足解决方法【详解】...
- java中间件技术有哪些?
- clusterProfiler安装
- 哒哒哒哒哒哒,哒哒哒哒哒哒哒哒
- 利用matlab实现复数域空间牛顿迭代法的分形图案展示(newton法)