国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

歷史上的今天

今天是:2025年07月17日(星期四)

2019年07月17日 | STM32開發(fā)筆記13: 在keil中使用不初始化變量

發(fā)布者:SereneDreams 來源: eefocus關(guān)鍵字:STM32  keil  不初始化變量 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

單片機(jī)型號(hào):STM32F030R8


    我們進(jìn)行程序設(shè)計(jì)的時(shí)候,都會(huì)知道,系統(tǒng)上電或復(fù)位時(shí),會(huì)執(zhí)行變量初始化操作,但是有些情況下,我們并不希望變量初始化,例如,在系統(tǒng)異常復(fù)位發(fā)生后,我們希望系統(tǒng)能夠迅速恢復(fù)復(fù)位前的現(xiàn)場(chǎng)狀況,這樣就希望變量能夠保留原先的值,而不被初始化。實(shí)際上,大家都知道,變量是存儲(chǔ)在RAM中的,只要不掉電,變量的數(shù)值是不會(huì)改變的,只要我們不讓系統(tǒng)進(jìn)行初始化操作就可以了。


    不同的編譯環(huán)境,有不同的設(shè)置方法,本文介紹在Keil中設(shè)置不初始化變量的方法。在這里需要說明的是,網(wǎng)上介紹了許多的設(shè)置方法,但并不是所有的方法都起作用,本文將介紹一種最為直接的方法。


    1、打開Options for Target對(duì)話框Linker標(biāo)簽,勾選掉Use Memory Layout from Target Dialog,這個(gè)選項(xiàng)的意思是使用Target標(biāo)簽進(jìn)行鏈接設(shè)置,所以在其勾選的情況下,分散文件是不能自己編輯的,勾選掉以后,我們就可以進(jìn)行分散文件的設(shè)置了。


    2、點(diǎn)擊分散文件后面的Edit按鈕,打開分散文件,按下圖所示的方法,增加節(jié)點(diǎn)。原先僅有一個(gè)RAM節(jié)點(diǎn),其起始地址是0x20000000,其長(zhǎng)度是0x00008000。我們新編輯的分散文件,將RAM分為2部分,第1部分長(zhǎng)度為0x7000,第2部分長(zhǎng)度為0x1000,并將第2部分設(shè)置為UNINIT,也就是不初始化,顯式節(jié)點(diǎn)名為NO_INIT。



    3、有了上述設(shè)置后,我們就可以進(jìn)行變量設(shè)置了,在這里需要注意的是變量需定義為全局變量,且不能賦初值,后面要加入存放的節(jié)點(diǎn),如下面程序所示。我們定義了5個(gè)變量,第1個(gè)為u16_Start,后面為4個(gè)數(shù)組(僅是舉例子,沒有什么實(shí)際意義)。


uint16_t u16_Start __attribute__((section("NO_INIT"),zero_init));

uint16_t u16_a[2]  __attribute__((section("NO_INIT"),zero_init));

uint16_t u16_b[2]  __attribute__((section("NO_INIT"),zero_init));

uint16_t u16_c[2]  __attribute__((section("NO_INIT"),zero_init));

uint16_t u16_d[2]  __attribute__((section("NO_INIT"),zero_init));

    4、正確編譯后,將程序下載到目標(biāo)板,我們就可以觀察到這些變量不會(huì)因?yàn)閱纹瑱C(jī)復(fù)位,而被初始化了。不過這又產(chǎn)生了一個(gè)新的問題,由于我們沒有給這些變量賦初值,當(dāng)系統(tǒng)上電時(shí),這些變量的值是隨機(jī)的,所以我們還需要辨別是系統(tǒng)上電,還是系統(tǒng)復(fù)位,使用下面的程序就可以了,這也是變量u16_Start的作用。當(dāng)系統(tǒng)上電時(shí),由于RAM是剛剛加電,所以變量u16_Start為12345的可能性幾乎為0,我們認(rèn)為這是系統(tǒng)上電,將u16_Start設(shè)置為12345后,并初始化這些變量。當(dāng)系統(tǒng)復(fù)位時(shí),u16_Start中的數(shù)值仍然保留,所以還為12345,這樣就不再初始化變量。


if (u16_Start != 12345)

{

u16_Start = 12345;

u16_a[0] = 0;

u16_a[1] = 0;

u16_b[0] = 0;

u16_b[1] = 0;

u16_c[0] = 0;

u16_c[1] = 0;

u16_d[0] = 0;

u16_d[1] = 0;

}



關(guān)鍵字:STM32  keil  不初始化變量 引用地址:STM32開發(fā)筆記13: 在keil中使用不初始化變量

上一篇:STM32開發(fā)筆記14: STM32L053R8T6的解釋
下一篇:STM32開發(fā)筆記12: STM32F0引腳使用注意事項(xiàng)

推薦閱讀

據(jù)新華網(wǎng)報(bào)道,荷蘭皇家航空公司正在測(cè)試一款智能機(jī)器人,它能在機(jī)場(chǎng)幫乘客運(yùn)送手提行李、指引登機(jī)口,如私人助理一樣,讓旅行更加輕松愉快。這款名為“照料-E”的機(jī)器人外觀像是一款藍(lán)色的L形自動(dòng)行駛推車。乘客辦理完登機(jī)手續(xù)后,機(jī)器人便會(huì)自動(dòng)上前掃描登機(jī)牌,并可運(yùn)送兩件總重量不超過38.6千克的隨身行李,然后將乘客引導(dǎo)至登機(jī)口。“照料-E”行進(jìn)...
全球領(lǐng)先的電路保護(hù)、電源控制和傳感技術(shù)制造商Littelfuse,Inc.(納斯達(dá)克股票代碼:LFUS)宣布最近在菲律賓利帕市的一家新的功率半導(dǎo)體組裝工廠破土動(dòng)工。這將是該公司在菲律賓的第三家制造工廠,它將致力于功率半導(dǎo)體模塊的裝配和測(cè)試操作。 “基于收購IXYS和加入到我們產(chǎn)品組合的高性能功率半導(dǎo)體產(chǎn)品,對(duì)菲律賓這家最先進(jìn)的新工廠的投資將進(jìn)一步擴(kuò)展...
GPIO口讀寫函數(shù)有如下8個(gè);uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GP...
(文/程文智)7月15日,在第七屆中國機(jī)器人峰會(huì)暨智能經(jīng)濟(jì)人才峰會(huì)上,中國工程院院士、國家農(nóng)業(yè)信息化工程技術(shù)研究趙春江分享了《農(nóng)業(yè)機(jī)器人展望》的報(bào)告。他在分享中提到,2020年農(nóng)業(yè)機(jī)器人市場(chǎng)的規(guī)模大概為74億美元,預(yù)計(jì)2025年達(dá)到206億美元。他同時(shí)提到了目前農(nóng)業(yè)機(jī)器人遇到的瓶頸問題,以及目前我國在農(nóng)業(yè)機(jī)器人方面的一些實(shí)踐案例。圖:中國工程院...

史海拾趣

小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved