国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

KEIL/MDK中的標(biāo)準(zhǔn)C庫函數(shù)printf和malloc實(shí)現(xiàn)線程安全

這篇具有很好參考價(jià)值的文章主要介紹了KEIL/MDK中的標(biāo)準(zhǔn)C庫函數(shù)printf和malloc實(shí)現(xiàn)線程安全。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

在ARM嵌入式開發(fā)中,編譯器提供的C庫函數(shù)有一部分不是線程安全的。
如果項(xiàng)目中運(yùn)行了第三方RTOS,在調(diào)用標(biāo)準(zhǔn)C庫函數(shù)時(shí)就要關(guān)心它們是不是線程安全的。

比如printf函數(shù),它是可重入的函數(shù),但是在多線程環(huán)境下打印的內(nèi)容可能會(huì)交叉亂序。
當(dāng)然這種問題還不算嚴(yán)重。
但如果調(diào)用庫函數(shù)malloc,這個(gè)函數(shù)在RTOS環(huán)境下多線程調(diào)用則會(huì)引發(fā)堆數(shù)據(jù)結(jié)構(gòu)異常。

那么有沒有辦法讓C庫標(biāo)準(zhǔn)函數(shù)實(shí)現(xiàn)線程安全呢?

經(jīng)過查閱文檔,在KEIL/MDK中確實(shí)存在這么一種方法,可以實(shí)現(xiàn)malloc線程安全。

在KEIL/MDK的標(biāo)準(zhǔn)庫中提供了一組可重載的互斥鎖函數(shù),我們可以自行實(shí)現(xiàn)這一組函數(shù),來保證C庫函數(shù)線程安全。

函數(shù)原型和參考實(shí)現(xiàn)代碼如下:

//創(chuàng)建互斥鎖,成功返回1,失敗返回0
int _mutex_initialize(mutex *m)
{
    *m = mutex_create(); /* 調(diào)用RTOS提供的函數(shù),創(chuàng)建鎖 */
    return 1;
}

//獲取互斥鎖(加鎖操作)
void _mutex_acquire(mutex *m)
{
    mutex_lock(*m); /* 調(diào)用RTOS提供的函數(shù),加鎖 */
}

//釋放互斥鎖(解鎖操作)
void _mutex_release(mutex *m)
{
    mutex_unlock(*m); /* 調(diào)用RTOS提供的函數(shù),解鎖 */
}

//刪除互斥鎖
void _mutex_free(mutex *m)
{
    mutex_delete(*m); /* 調(diào)用RTOS提供的函數(shù),刪除鎖 */
}

需要注意的是,重載以上互斥鎖函數(shù)后,要確保調(diào)用C庫函數(shù)的時(shí)機(jī)一定要晚于RTOS的初始化。


KEIL官方參考資料:

ARM編譯器:重載互斥鎖實(shí)現(xiàn)C庫函數(shù)線程安全

ARM編譯器:線程安全的C標(biāo)準(zhǔn)庫函數(shù)

ARM編譯器:線程不安全的C標(biāo)準(zhǔn)庫函數(shù)文章來源地址http://www.zghlxwxcb.cn/news/detail-402257.html

到了這里,關(guān)于KEIL/MDK中的標(biāo)準(zhǔn)C庫函數(shù)printf和malloc實(shí)現(xiàn)線程安全的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • MDK Keil查看map文件及編譯占用內(nèi)存信息、函數(shù)入口地址

    MDK Keil查看map文件及編譯占用內(nèi)存信息、函數(shù)入口地址

    一、在哪里打開map文件查看 (1)第一種,在keil軟件下,雙擊你的工程名,map就會(huì)彈出 (2)第二種,點(diǎn)擊魔術(shù)棒,查看 Lis文件輸出的位置入口 我的在output...文件下,那我們工程的文件夾下,找到output 二、查看map文件信息 (1)函數(shù)定義的位置信息 如圖,這些你定義函數(shù)的

    2024年02月05日
    瀏覽(134)
  • 【STM32】Keil MDK 中的 Code、RO-data、RW-dat、ZI-data 是什么?分別放在哪里?

    【STM32】Keil MDK 中的 Code、RO-data、RW-dat、ZI-data 是什么?分別放在哪里?

    ??????????C語言中有棧、堆、bss、data、code段。具體每個(gè)段具體是存儲(chǔ)什么數(shù)據(jù)的,直接百度吧。重點(diǎn)分析一下STM32以及在MDK里面段的劃分。 Code存放在ROM RO-data存放在ROM RW-dat存放在RAM ZI-data存放在RAM 單片機(jī)初始化時(shí)RW-data從flash拷貝到RAM 生成的map文件位于list文件夾下 (KE

    2024年02月11日
    瀏覽(21)
  • C語言中的字符串操作函數(shù)自定義實(shí)現(xiàn):標(biāo)準(zhǔn)版與限定長(zhǎng)度版

    C語言中的字符串操作函數(shù)自定義實(shí)現(xiàn):標(biāo)準(zhǔn)版與限定長(zhǎng)度版

    ??????? 目錄 1. 標(biāo)準(zhǔn)字符串操作函數(shù)自定義實(shí)現(xiàn) (a) 自定義strcpy函數(shù) (b) 自定義strcat函數(shù) (c) 自定義strcmp函數(shù) 2. 限定長(zhǎng)度字符串操作函數(shù)自定義實(shí)現(xiàn) (a) 自定義strncpy函數(shù) (b) 自定義strncat函數(shù) (c) 自定義strncmp函數(shù) ?對(duì)字符串的操作是不可或缺的一部分。標(biāo)準(zhǔn)庫提供了如strcpy、

    2024年01月21日
    瀏覽(45)
  • C語言printf函數(shù)實(shí)現(xiàn)解讀

    C語言printf函數(shù)實(shí)現(xiàn)解讀

    gun官網(wǎng)鏈接 按照這些步驟可以順利的下載gnu的c語言源碼,接下去我們看看printf函數(shù)。 用vscode打開下載的源碼,找到printf函數(shù)。 ( printf 函數(shù)路徑為: glibc-2.36stdio-commonprintf.c ) 源碼如下: 可以看見主要是四個(gè)東西: va_list ? va_start ? va_end ? __vfprintf_internal 前面三個(gè)先不看

    2024年02月12日
    瀏覽(19)
  • 詳解Leetcode中關(guān)于malloc模擬開辟二維數(shù)組問題,涉及二維數(shù)組的題目所給函數(shù)中的各個(gè)參數(shù)的解讀

    最近博主一直再刷Leetcode上有關(guān)c語言的題目,有些題目第一步就將我卡死了。為什么呢?因?yàn)轭}目中所給的函數(shù)里的參數(shù)的具體含義我既然都不知道是什么意思。當(dāng)然在請(qǐng)教了一些大佬后我也順利解決了,不然也不會(huì)有人和你們分享了,哈哈哈~ 我就已一個(gè)典型的題目來介紹

    2024年02月08日
    瀏覽(20)
  • MDK、Keil 5 界面主題優(yōu)化

    MDK、Keil 5 界面主題優(yōu)化

    找到MDK軟件安裝目錄下的UV4文件夾下的global.prop文件,用記事本打開該文件,復(fù)制下面配置替換到global.prop文件里的所有內(nèi)容,保存: 配置代碼中某些設(shè)置項(xiàng)的作用,可自行更改 caret.back=#DEFEE6 #插入符號(hào)(光標(biāo))行的背景顏色 style.cpp.32=font:Courier New,size:10,fore:#000000,back:#FFFFFF

    2023年04月08日
    瀏覽(20)
  • keil MDK 支持包快速下載

    MDK pack http://www.abov.co.kr/data/mds/PACK/ABOV.CM0_DFP.1.0.0.pack http://www.abov.co.kr/data/mds/PACK/ABOV.CM0_DFP.1.0.0.pack http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.1.2.1.pack http://www.abov.co.kr/data/mds/PACK/ABOV.CM3_DFP.1.2.1.pack http://s3.asia.ambiqmicro.com/pack/AmbiqMicro.Apollo_DFP.0.9.2.pack http://s3.asia.ambiqmicro.com/pack/AmbiqMic

    2024年02月08日
    瀏覽(19)
  • Keil5 MDK新建項(xiàng)目工程

    Keil5 MDK新建項(xiàng)目工程

    一、新建工程框架 1.新建一個(gè)文件夾,命名為Template 2.點(diǎn)擊 MDK 的菜單: Project –New Uvision Project ,然后將目錄定位到剛才建立的文件夾 Template 之下,在這個(gè)目錄下面建立子文件夾 USER( 我們的代碼工程文件都是放在 USER 目錄)工程命名為 Template,點(diǎn)擊保存。 3.選擇芯片型號(hào)(一定

    2024年02月08日
    瀏覽(23)
  • Keil(MDK-ARM)的安裝與注冊(cè)【MDK和C51共存】

    Keil(MDK-ARM)的安裝與注冊(cè)【MDK和C51共存】

    ??之前已經(jīng)安裝過用于51單片機(jī)開發(fā)的Keil C51,現(xiàn)在安裝用于開發(fā)ARM Cortex-M系列內(nèi)核的STM32單片機(jī)開發(fā)的Keil MDK開發(fā)環(huán)境,以及解決Keil C51與Keil MDK的共存問題。 ??如果要使C51和MDK共存,請(qǐng)先安裝Keil C51,安裝步驟請(qǐng)看我之前的文章:《Keil(C51)的安裝與注冊(cè)》。 (1)首先

    2024年02月06日
    瀏覽(88)
  • Keil uv5 MDK使用教程

    Keil uv5 MDK使用教程

    ??介紹一下單片機(jī)開發(fā)軟件Keil的基本使用,以STM32f4固件庫為基礎(chǔ)創(chuàng)建工程模板 ??選擇安裝路徑,其余默認(rèn)即可,具體可以參考百度,安裝包在附件 注意 :漢化會(huì)導(dǎo)致部分功能設(shè)置不顯示 ??不同芯片加載包不一樣,官網(wǎng)http://www.keil.com/dd2/pack下載 Keil.STM32F4xx_DFP.1.0.8,

    2024年02月06日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包