ZHDU015 December 2025 MSPM33C321A
要在編程器代碼開發(fā)中集成 SAU,我們建議使用 CMSE 庫(kù)。該庫(kù)由 Arm? 設(shè)計(jì),可讓用戶輕松將函數(shù)定義為安全或非安全函數(shù)。如需更多有關(guān)此方面準(zhǔn)則的詳細(xì)信息,請(qǐng)參閱 ARMv8-M 安全軟件指南。
ARMv8-M 指令使用 BXNS(Branch 和 Exchange Non-secure)和 SG(安全網(wǎng)關(guān)),在非安全和安全代碼之間進(jìn)行轉(zhuǎn)換。BXNS 用于從安全代碼轉(zhuǎn)換到非安全代碼,而 SG 用于從非安全代碼轉(zhuǎn)換到安全代碼。SG 命令利用 NSC 區(qū)域進(jìn)行此轉(zhuǎn)換。為了輕松地將這些指令運(yùn)用到編程環(huán)境中,CMSE 庫(kù)將這些函數(shù)集成到函數(shù)調(diào)用中。
CMSE 庫(kù)的主要特性之一是它允許編程器將函數(shù)定義為安全或非安全。這決定了允許編程器在安全及非安全區(qū)域之間跳轉(zhuǎn)的 CPU 狀態(tài)。要將 CMSE 庫(kù)添加到程序中,請(qǐng)使用以下標(biāo)頭。
#include <arm_cmse.h>
若要在代碼中實(shí)現(xiàn) SG 命令,可以為函數(shù)提供 cmse_nonsecure_entry 屬性。該函數(shù)定義在代碼開頭調(diào)用安全網(wǎng)關(guān) veneer。這對(duì)于定義函數(shù)非安全代碼可以訪問非常有用,其中使用安全存儲(chǔ)器中的信息。
__attribute__((cmse_nonsecure_entry)) secure_fxn()
{
}
若要從安全代碼中調(diào)用非安全函數(shù),可以使用 BXNS 函數(shù)。為了使用 CMSE 庫(kù)輕松將其集成到編程環(huán)境中,您可以為函數(shù)提供 cmse_nonsecure_call 屬性。請(qǐng)參閱下面的代碼塊以獲取示例。
__attribute__((cmse_nonsecure_call)) nonsecure_fxn()
{
}