chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在ARM開(kāi)發(fā)環(huán)境下C語(yǔ)言的設(shè)置堆棧指針和清理BSS段的作用概述

Q4MP_gh_c472c21 ? 來(lái)源:未知 ? 作者:易水寒 ? 2018-05-19 09:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

以前稍微寫(xiě)過(guò)操作系統(tǒng)上的C程序,感受不出來(lái):BSS段,堆棧的意義。到了在單片機(jī)上寫(xiě)程序也沒(méi)有考慮這些問(wèn)題。但是到了ARM上環(huán)境似乎沒(méi)有那么簡(jiǎn)單了,C的環(huán)境要自己來(lái)創(chuàng)建,不然就不能用。這也深刻的感受到了C語(yǔ)言中原來(lái)難以理解的概念。

裸機(jī)建立C語(yǔ)言環(huán)境-設(shè)置堆棧指針

這個(gè)是使用C語(yǔ)言的首要條件,不過(guò)這個(gè)就是指定一個(gè)sp指針就可以了,很簡(jiǎn)單的。ldr sp, =4096。

裸機(jī)建立C語(yǔ)言環(huán)境-清理BSS段

如果C語(yǔ)言中用到的全局變量或者靜態(tài)變量,這個(gè)編譯的時(shí)候是把它們放到了BSS段,這個(gè)段在內(nèi)存中。怎么建成的?手動(dòng)寫(xiě)一個(gè)鏈接腳本,添加__bss_start __bss_end變量來(lái)表示BSS段的開(kāi)始和結(jié)束。如下:

SECTIONS {

. = 0x00000000;

.text : { *(.text) }

.rodata ALIGN(4) : AT((LOADADDR(.text)+SIZEOF(.text)+3)&~(0x03)) {*(.rodata*)}

.data ALIGN(4) : AT((LOADADDR(.rodata)+SIZEOF(.rodata)+3)&~(0x03)) { *(.data) }

__bss_start = .;

.bss ALIGN(4) : { *(.bss) *(COMMON) }

__bss_end = .;

}

這樣在應(yīng)用程序中清理__bss_start到__bss_end之間內(nèi)在中的內(nèi)容。這樣全局變量就可以用了,否則會(huì)出現(xiàn)異常。我遇到的具體表現(xiàn)為:全局變量的值無(wú)法更改。代碼可以學(xué)習(xí)u-boot中匯編方法清理:

/*

* These are defined in the board-specific linker script.

*/

.globl _bss_start

_bss_start:

.word __bss_start

.globl _bss_end

_bss_end:

.word __bss_end

/*

* 清BSS段

*/

clear_bss:

ldr r0, _bss_start /* find start of bss segment */

ldr r1, _bss_end /* stop here */

mov r2, #0x00000000 /* clear */

clbss_l:str r2, [r0] /* clear loop... */

add r0, r0, #4

cmp r0, r1

ble clbss_l

mov pc, lr

/* end_of clear_bss */

也可以用C語(yǔ)言來(lái)實(shí)現(xiàn):

void clean_bss(void)

{

extern int __bss_start, __bss_end;

int *p = &__bss_start;

for (; p < &__bss_end; p++)

*p = 0;

}

總結(jié):就是往這段內(nèi)存中寫(xiě)0.

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    135

    文章

    9582

    瀏覽量

    393471
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    183

    文章

    7646

    瀏覽量

    146099
  • BSS
    BSS
    +關(guān)注

    關(guān)注

    0

    文章

    19

    瀏覽量

    12610
  • 堆棧指針
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    3212

原文標(biāo)題:嵌入式ARM開(kāi)發(fā)環(huán)境下,設(shè)置堆棧指針和清理BSS段的意義

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    ARM9處理器C語(yǔ)言編程(全) ADS開(kāi)發(fā)環(huán)境創(chuàng)建簡(jiǎn)介

    與簡(jiǎn)介ADS1.2的安裝ADS1.2的仿真,調(diào)試用AXD進(jìn)行代碼仿真,調(diào)試JTAQ概述Nor和Nand Flash的區(qū)別與使用Flash編程ARM使用C
    發(fā)表于 07-28 15:06

    淺談text、databss

    的一塊內(nèi)存區(qū)域,一般初始化時(shí)bss 部分將會(huì)清零(bss屬于靜態(tài)內(nèi)存分配,即程序一開(kāi)始就將其清零了)。 比如,
    發(fā)表于 08-21 15:51

    C語(yǔ)言ARM堆棧指針SP設(shè)置的理解與總結(jié)(轉(zhuǎn)載)

    的,從地址向高地址,依次為:程序(.text),BSS,然后上面還可能會(huì)有堆空間,然后最上面才是堆棧,這樣安排
    發(fā)表于 01-26 17:11

    初步學(xué)習(xí)ARM11

    。但是STM32采用的是THUMB2指令,其中包含THUMB的16位指令,所以指令不是嚴(yán)格的4字節(jié)對(duì)齊。但是寫(xiě)STM32程序的時(shí)候,都是用C語(yǔ)言寫(xiě)的,所以對(duì)這些就不怎么關(guān)心。但是ARM
    發(fā)表于 12-10 18:08

    如何設(shè)置堆棧指針清理BSS

    嵌入式ARM開(kāi)發(fā)環(huán)境,設(shè)置堆棧指針
    發(fā)表于 02-04 06:26

    嵌入式ARM開(kāi)發(fā)環(huán)境下為什么要設(shè)置堆棧指針清理BSS

    嵌入式ARM開(kāi)發(fā)環(huán)境,設(shè)置堆棧指針
    發(fā)表于 04-02 06:39

    概述C語(yǔ)言的特點(diǎn)

    的資源,得到更多的信息,對(duì)軟件工具的發(fā)展起到了更大的促進(jìn)作用。1、嵌入式Linux C語(yǔ)言開(kāi)發(fā)概述C
    發(fā)表于 11-04 07:21

    ARM匯編在嵌入式Linux開(kāi)發(fā)中有何作用

    前言??我們進(jìn)行嵌入式 Linux 開(kāi)發(fā)的時(shí)候是絕對(duì)要掌握基本的 ARM 匯編,因?yàn)?Cortex-A 芯片一上電 SP 指針還沒(méi)初始化, C
    發(fā)表于 12-20 08:20

    堆棧指針作用是什么?

    堆棧指針作用是什么
    發(fā)表于 11-02 08:10

    C語(yǔ)言指針電子教程

    本資料是一份不錯(cuò)的關(guān)于C語(yǔ)言指針的電子教程,希望對(duì)大家有所幫助... 指針簡(jiǎn)介 指針C
    發(fā)表于 07-30 16:00 ?77次下載

    堆棧指針是什么_有什么作用

    堆棧指針總是指向棧頂位置。一般堆棧的棧底不能動(dòng),所以數(shù)據(jù)入棧前要先修改堆棧指針,使它指向新的空余空間然后再把數(shù)據(jù)存進(jìn)去,出棧的時(shí)候相反。
    發(fā)表于 11-10 11:01 ?1.1w次閱讀

    C語(yǔ)言ARM堆棧指針SP設(shè)置的理解與總結(jié)

    開(kāi)始將堆棧指針設(shè)置在內(nèi)部RAM,是因?yàn)椴皇敲總€(gè)板上都有外部RAM,而且外部RAM的大小也不相同,而且如果是SDRAM,還需要初始化,在內(nèi)部RAM開(kāi)始運(yùn)行的一般是一個(gè)小的引導(dǎo)程序,基本上不怎么使用
    的頭像 發(fā)表于 04-06 19:46 ?9982次閱讀

    C語(yǔ)言入門(mén)教程之堆棧的詳細(xì)資料概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語(yǔ)言入門(mén)教程之堆棧的詳細(xì)資料概述。
    發(fā)表于 11-29 11:47 ?12次下載

    堆棧C語(yǔ)言中的定義是怎么樣的

     計(jì)機(jī)領(lǐng)域,堆棧是一個(gè)不容忽視的概念,我們編寫(xiě)的C語(yǔ)言程序基本上都要用到。但對(duì)于很多的初學(xué)著來(lái)說(shuō),堆棧是一個(gè)很模糊的概念。
    發(fā)表于 08-16 17:32 ?0次下載
    <b class='flag-5'>堆棧</b><b class='flag-5'>在</b><b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>中的定義是怎么樣的

    C語(yǔ)言中的懸空指針和野指針是什么意思?

    提起C語(yǔ)言大部分開(kāi)發(fā)者很自然就會(huì)想到指針二字,沒(méi)錯(cuò),作為C的核心和靈魂,它的地位咱們就不再贅述了,今天我們想跟大家講的是
    的頭像 發(fā)表于 02-09 17:20 ?1947次閱讀