SylixOS 无Uboot版BSP
1. 函数栈
1.1物理内存分布
介绍函数栈之前,先介绍SylixOS Lite版本ARM平台的内存分布,根据BSP工程的连接脚本SylixOSBSP.ld可知,SylixOS的物理内存主要分为五段:
1.TEXT段又称代码段,主要存放执行代码,有执行权限;
2.DATA段又称数据段,主要放已经初始化好的全局变量;
3.BSS段主要存放未初始化的全局变量;
4.栈又称堆栈,可存放函数的局部临时变量(不包括static声明的变量,static放在在数据段中)。在函数被调用时,其参数也可能会被压入栈中,并且待到调用结束后,函数的返回值也会被存放到栈中,可以说栈就是为了函数而存在的; 堆是用于存放进程运行中被动态分配的内存段。
SylixOS lite版的物理内存分布方式,如图 1.1所示。
图 1.1内存分布图
1.2 函数栈的使用方式
函数栈的运作方式可以在互联网上查到很多介绍,在这里笔者通过流程图简单的介绍一下,如图 1.2所示。
图 1.2函数栈的运作流程图
2 Cortex-M7的启动流程
2.1 Cortex-M7的启动
STM32F767是基于Cortex-M7内核,与传统的ARM架构不同,Cortex-M7在上电后从片上Flash读取前两个地址的值:
第一个地址的值:是MSP主堆栈指针;
第二个地址的值:是PC的初始值,该值为可设置为第一个执行的函数的地址。
如图 2.1、图 2.2所示。
图 2.1复位序列
图 2.2 MSP及PC的初始化范例
2.2 Cortex-M7的SylixOS启动流程分析
2.2.1 异常向量表
1.根据第2.1节,SylixOS把异常向量表链接到代码段首位,异常向量表的第一项为主堆栈指针,第二项是archRSTIntHandle函数地址,如图 2.3所示。
图 2.3异常向量表
2.SylixOS通过链接脚本文件把异常向量表链接到代码段的首地址,如图 2.4所示。
图 2.4 SylixOSBSP.ld
2.2.2 archRSTIntHandle函数
archRSTIntHandle函数的作用相当于其他ARM平台的startup.S的reset,如图 2.5所示。
图 2.5函数archRSTIntHandle
根据图 2.5可知,archRSTIntHandle函数流程主要分为四步:
1.把初始化数据从片上Flash复制到DATA段;
2.初始化BSS段的数据为0;
3.板卡必须的初始化;
4.调用bspinit,开始启动SylixOS内核。
3片外内存的使用
根据第一节函数堆栈和第二节Cortex-M7的SylixOS启动流程可知,想要让无Uboot版本的SylixOS使用片外内存需要有三步:
1.把RAM地址空间映射到外部存储空间,如图 3.1、图 3.2所示。
图 3.1 config.h
图 3.2 config.lds
2.把异常向量表的第一个值设为可用的内存地址,以便可以执行archRSTIntHandle函数。在没有初始化片外内存之前,有512K的片上内存可用,片上内存的开始地址固定,大小固定,直接可用,此时可以把主堆栈指针指向片上内存如图 3.3所示。
图 33.指定栈底地址
3.在系统初始化DATA段之前初始化片外内存,如图 3.4所示。
图 3.4初始化片外内存
4参考资料
无
转载于:https://blog.51cto.com/xiaoyaolanyun/1966851
SylixOS 无Uboot版BSP相关推荐
- 格式工厂mac版_格式工厂无广告版,支持PDF文件的转换
点击上方"蓝字",发现更多精彩.软件信息[名称]:格式工厂无广告版[安装环境]:win10/win8/win7[下载链接]:https://pan.baidu.com/s/1r5_ ...
- 【资源】C++学习资料 - 逆天整理 - 精华无密版【最新】
再失效就太无语了,链接都是多份的~~ -----------------基础-------------- C++环境搭建(全套) http://pan.baidu.com/s/1o6y0smY 链接: ...
- php极速链,php PHP极速链 战群源码系列(全自动采集更新+引流神器无数据库版) WEB(ASP,PHP,...) 261万源代码下载- www.pudn.com...
文件名称: php下载 收藏√ [ 5 4 3 2 1 ] 开发工具: PHP 文件大小: 15699 KB 上传时间: 2015-08-10 下载次数: 5 提 供 者: 田维莉 详细说 ...
- 经典解压缩软件 WinRAR 5.71 无广告版
目录 1. 按 2. 烈火汉化版 2.1. 下载地址 3. 官方中文无广告版 1. 按 WinRAR拥有全球超过五千万的用户,是目前最受欢迎的压缩软件, 没有比它更加好的方法来实现高效安全的文件传输, ...
- TC Games 电脑玩手游助手会员无水印版,专为游戏直播玩家打造
Tcgames 电脑玩手机助手会员无水印版已经上线了,无水印版除了服务于游戏直播用户.游戏工作室之外还增加多项功能和服务,让你在用电脑鼠标键盘大屏操作游戏的时候更加方便快捷. 1.使用tcgames投 ...
- 爬动的蠕虫(无循环版)
一.题目要求 一条蠕虫长1寸,在一口深为N寸的井的底部.已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬.在休息的过程中,蠕虫又下滑了D寸.就这样,上爬和下滑重复进行.请问,蠕虫需要多长 ...
- 魔百盒CM211-2 ZG(朝哥代工)无WIFI版线刷救砖包(当贝桌面)
魔百盒CM211-2 ZG(朝哥代工)无WIFI版线刷救砖包(当贝桌面) 固件说明: 该固件system分区判断是用201-2的分区修改而来的,解决了精简系统.刷机救砖等一系列问题,虽然算不上完美,但 ...
- 友盟朋友圈社区使用详解-(无UI版)
(如果你down下来sdk是懵比的 那么你可以看一看. 希望能有帮助.) 今天开始做朋友圈功能,本来是自己自定义.突然发现友盟有这个api 秉着不去重复造轮子的思想. 决定用造好的轮子. 友盟的 ...
- Struts1.x 登录实验-无数据库版
Struts1.x -- 登录实验-无数据库版 前言 环境配置 Apache Tomcat 9.0.53 配置 下载 安装和配置 IDEA中配置Tomcat Struts 1.3.10配置 下载与安装 ...
最新文章
- ubuntu系统安装FTP
- (Java多线程)线程状态
- 求助,后台跳转至前台,如何实现,谢谢
- (49)System Verilog字符串string详解
- 第六届中国云计算大会详细日程
- 6.通信原理 ——数字基带传输系统(第七版 樊昌信 曹丽娜编著)
- double bottoms
- 英文转换-在线英文批量转换器免费
- PDI-KETTLE-4 使用Kettle完成通用DB数据获取生成指定分隔符的文件并通过FTP上传的功能...
- android 画图功能,Android实现简单画图画板
- 【目标检测】英雄联盟能用YOLOv5实时目标检测了 支持onnx推理
- 张一鸣:积极乐观的心理期待,对成功有害!
- PAKDD2020:阿里巴巴算法大赛冠军思路
- JavaScript RegExp 身份证、账号密码、email正则
- MS2108 RGB转USB 数字视频采集芯片 支持8bit/16bit BT601/BT709/BT656/ BT1120转USB2.0
- java从高位到低位输出_任意输入一个正整数,从高位向低位依次输出,或从低位向高位依次输出(数组,调用函数两种方法)...
- TexturePacker序列号申请
- 2020Ti电赛体会与经验
- 头条、油条商标有多像?Python检测发现相似度高达98.4%!
- VS-PETS是什么?
热门文章
- Python学习记录之-----类
- 【leetcode】Intersection of Two Linked Lists
- document.querySelector和querySelectorAll方法
- 【Groovy】json 序列化 ( 类对象转为 json 字符串 | 使用 JsonBuilder 进行转换 | 使用 JsonOutput 进行转换 | 将 json 字符串格式化输出 )
- 【C 语言】文件操作 ( 按照单个字符的方式读写文件 | fgetc 函数 | fputc 函数 )
- 【Qt】打开现有 Qt 项目 ( 打开已存在的项目 | 运行打开的项目 )
- 【Java 注解】自定义注解 ( 元注解 )
- 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 拷贝 lib7zr.so 动态库到 Android Studio 工程 | 配置 build.gradle 构建脚本 )
- 【错误记录】Flutter 设备连接显示 Loading... ( 断网 | 删除 flutter/bin/cache/lockfile 文件 )
- 【计算机网络】数据链路层 : 广域网 ( HDLC 协议 | HDLC 站 | HDLC 帧格式 | HDLC 帧类型 | PPP 协议 与 HDLC 协议 对比 )