日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SylixOS 无Uboot版BSP

發布時間:2025/6/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。