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

STM32操作系統(tǒng)系列使用C語(yǔ)言的教程

發(fā)布者:RadiantSmile最新更新時(shí)間:2024-09-27 來(lái)源: elecfans關(guān)鍵字:STM32  操作系統(tǒng)系列  C語(yǔ)言 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

C語(yǔ)言,相對(duì)于匯編有更好的可讀性,便于維護(hù)等優(yōu)點(diǎn)。下面實(shí)驗(yàn)將使用C語(yǔ)言實(shí)現(xiàn)點(diǎn)亮LED燈。C語(yǔ)言與硬件是緊密連在一起的,結(jié)合芯片中的flash和sram,簡(jiǎn)單了解C語(yǔ)言。

步驟:

  • FLASH,就是存放.bin文件的地方。SRAM,用于存放程序的堆棧,全局變量。

  • MEMORY,用于定義存儲(chǔ)器范圍。

  • AT>rom,表示將對(duì)應(yīng)的SECTION放置到rom中,即Flash中。

  • _data_start / _data_end,用于說(shuō)明data段在flash中的位置,方便程序?qū)ata段從flash中復(fù)制到sram中。

  • _ram_data_start,表示data段將復(fù)制到sram中的什么位置。

  • ADDR(),表示獲得SECTION的運(yùn)行地址vma,當(dāng)程序被下載到flash后,程序開始運(yùn)行時(shí)首先要將data段移動(dòng)到sram中0x20000400地址處,這樣程序運(yùn)行時(shí)才不會(huì)出錯(cuò)。

  • LOADADDR(),表示獲得SECTION的加載地址lma。

  • SIZEOF(),用于求SECTION的大小

  • 整個(gè)SECTIONS,可以看做是程序在flash中的布局,其中.bss不占用flash空間,它是由程序中開始運(yùn)行時(shí),在sram中開辟空間并初始化為0。

  • 各個(gè)SECTION,如.vectors.text.rodata.data.bss,分別存放不同類型的數(shù)據(jù)。


本質(zhì)就是C語(yǔ)言中的指針操作,volatile作用是確保本條指令不會(huì)因編譯器的優(yōu)化而省略。如代碼“RCC_APB2ENR |= 0x00000010;”,表示向寄存器的第4位(從0位開始計(jì)數(shù))寫1。


關(guān)鍵字:STM32  操作系統(tǒng)系列  C語(yǔ)言 引用地址:STM32操作系統(tǒng)系列使用C語(yǔ)言的教程

上一篇:STM32芯片存儲(chǔ)器映射概述
下一篇:教你們STM32如何收發(fā)float類型數(shù)據(jù)

推薦閱讀最新更新時(shí)間:2025-06-23 07:20

基于STM32從零寫操作系統(tǒng)系列---基于寄存器寫串口驅(qū)動(dòng)
目的 嘗試基于寄存器層面,編寫串口的驅(qū)動(dòng)。用這種方式編寫串口驅(qū)動(dòng),有點(diǎn)類似于使用匯編語(yǔ)言。面向的是每一個(gè)單獨(dú)的寄存器,通過(guò)讀、改、寫的手段,配置寄存器。但是這種方式能夠更接近硬件,用硬件的思維編程。 相對(duì)于《基于STM32從零寫操作系統(tǒng)系列---使用C語(yǔ)言》,這章重新調(diào)整了文件結(jié)構(gòu),讓項(xiàng)目文件更好管理和維護(hù)。主要使用了makefile的嵌套編譯方法來(lái)編譯多目錄下的代碼文件。 分析 1.Makefile嵌套編譯 首先簡(jiǎn)單來(lái)看一下文件結(jié)構(gòu): 再看一下頂層Makefile,主要差異如下: 各子目錄下的Makefile比較簡(jiǎn)單 其中需要注意的是: 在windows的cmd命令行中for命令用于查找
[單片機(jī)]
基于<font color='red'>STM32</font>從零寫<font color='red'>操作系統(tǒng)</font><font color='red'>系列</font>---基于寄存器寫串口驅(qū)動(dòng)
單片機(jī)c語(yǔ)言教程第三章--C51數(shù)據(jù)類型
每寫一個(gè)程序,總離不開數(shù)據(jù)的應(yīng)用,在學(xué)習(xí) c51 語(yǔ)言的過(guò)程中掌握理解數(shù)據(jù)類型也是 很關(guān)鍵的。先看表 3-1,表中列出了 KEIL uVision2 單片機(jī)c語(yǔ)言編譯器所支持的數(shù)據(jù)類型。在標(biāo)準(zhǔn)C語(yǔ)言中基本的數(shù)據(jù)類型為 char,int,short,long,float 和 double,而在c51編譯器中int 和 short 相同,float 和 double 相同,這里就不列出說(shuō)明了。下面來(lái)看看它們的具體定 義 數(shù)據(jù)類型 長(zhǎng) 度 值 域 unsigned char 單字節(jié) 0~255 signed char 單字節(jié) -128~+127 unsigned int 雙字節(jié) 0~65535
[單片機(jī)]
C語(yǔ)言一百例第十四例
代碼: /* C語(yǔ)言第十四例 題目:將一個(gè)正整數(shù)分解質(zhì)因數(shù)。例如:輸入90,打印出90=2*3*3*5。 程序分析:對(duì)n進(jìn)行分解質(zhì)因數(shù),應(yīng)先找到一個(gè)最小的質(zhì)數(shù)k,然后按下述步驟完成:(1)如果這個(gè)質(zhì)數(shù)恰等于(小于的時(shí)候,繼續(xù)執(zhí)行循環(huán))n,則說(shuō)明分解質(zhì)因數(shù)的過(guò)程已經(jīng)結(jié)束,另外 打印出即可。 (2)但n能被k整除,則應(yīng)打印出k的值,并用n除以k的商,作為新的正整數(shù)n.重復(fù)執(zhí)行第二步。 (3)如果n不能被k整除,則用k+1作為k的值,重復(fù)執(zhí)行第一步。 */ #include stdio.h void main(void) { int a,b; printf( 請(qǐng)輸入一個(gè)數(shù): ); scanf( %d ,&a)
[單片機(jī)]
<font color='red'>C語(yǔ)言</font>一百例第十四例
單片機(jī)C語(yǔ)言匯編代碼
if(testaa++ 5) 圖1 if(testaa++ 5)反匯編 圖1中先將testaa值存在了R7寄存器中,然后對(duì)testaa++;再將R7中的數(shù)據(jù)同5進(jìn)行做減法,通過(guò)判斷是否發(fā)生借位,判斷大小。 圖1中,SETB C 是將C置1;JC是 Jump if carry is set 是判斷C是否為1,為1則跳轉(zhuǎn)。 總結(jié):先緩存原值,后加加,然后緩存值進(jìn)行判斷大??; if(++testaa 5) 圖2 if(++testaa 5)反匯編 圖2中先作加法,后判斷。 總結(jié):先加加,然后進(jìn)行判讀大??;
[單片機(jī)]
單片機(jī)<font color='red'>C語(yǔ)言</font>匯編代碼
淺析ARM匯編 C語(yǔ)言 C++ 相互調(diào)用的方法
1.匯編程序訪問(wèn)C語(yǔ)言全局變量 全局變量只能通過(guò)地址間接調(diào)用,為了訪問(wèn)C語(yǔ)言中全局變量,首先要通過(guò)extern偽指令引入全局變量,然后將其地址裝入寄存器中。 對(duì)于unsigned char類型,使用LDRB/STRB訪問(wèn); 對(duì)于unsigned short類型,使用LDRH/STRH訪問(wèn); 對(duì)于unsigned int類型,使用LDR/STR訪問(wèn); 對(duì)于char類型,使用LDRSB/STRSB訪問(wèn); 對(duì)于short類型,使用LDRSH/STRSH訪問(wèn); 例子: .text .global asmsubroutine .extern globvar asmsubroutine: LDR
[單片機(jī)]
51單片機(jī)C語(yǔ)言調(diào)用匯編子程序的簡(jiǎn)便方法
1、在匯編文件中,程序前邊加上如下三句話就可以: PUBLIC _delay, _binrlc ;定義公用子程序名,這里定義了兩個(gè)子程序(有下劃線) LUOYUAN SEGMENT CODE ;程序段命名,LUOYUAN,叫啥名都可以 RSEG LUOYUAN 下邊放子程序(程序名要下劃線,其它標(biāo)號(hào)不要下劃線) ;匯編語(yǔ)言文件 PUBLIC _delay, _binrlc;定義子程序名 LUOYUAN SEGMENT CODE ;命名LUOYUAN的程序段 RSEG LUOYUAN _delay: MOV P1,#55H MOV R2,#30H DJNZ R2,$ RET
[單片機(jī)]
單片機(jī)C語(yǔ)言申請(qǐng)固定地址的變量
int8 *pRStut1 = ADDR1 ; //申請(qǐng)一個(gè)8位指針變量 變量名為pRStut1 int16 *pRStut2 = ADDR2 ; //申請(qǐng)一個(gè)16位指針變量 變量名為pRStut2 uint8 RStu1 _at_ ADDR1 ; //申請(qǐng)一個(gè)8位變量 變量名為RStu1 uint16 RStu2 _at_ ADDR2 ; //申請(qǐng)一個(gè)16位變量 變量名為RStu2 DEF_8BIT_REG_AT(RStu1,ADDR1); //申請(qǐng)一個(gè)8位變量 變量名為RStu1 DEF_16BIT_REG_AT(RStu2,ADDR2); //申請(qǐng)一個(gè)16位變量 變量名為RStu2
[單片機(jī)]
stc單片機(jī)讀片外擴(kuò)展RAM,內(nèi)部R/C時(shí)鐘及ID號(hào)C語(yǔ)言程序
#include reg51.h #include intrins.h sfr IAP_CONTR = 0xC7; sbit MCU_Start_LED = P1^7; //unsigned char self_command_array = {0x22,0x33,0x44,0x55}; #define Self_Define_ISP_Download_Command 0x22 //#define RELOAD_COUNT 0xfb //18.432MHz,12T,SMOD=0,9600bps #define RELOAD_COUNT 0xfd //11.0592MHz,12T,SMOD=0,9600bps voi
[單片機(jī)]
小廣播
設(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