久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区

Rss & SiteMap

曙海教育集團(tuán)論壇 http://www.bjzhda.cn

曙海教育集團(tuán)論壇
共1 條記錄, 每頁顯示 10 條, 頁簽: [1]
[瀏覽完整版]

標(biāo)題:在Linux下用Gcc 4.3.1進(jìn)行STM32開發(fā)入門

1樓
wangxinxin 發(fā)表于:2010-11-25 10:10:27
今天,嘗試了在我使用的Gentoo系統(tǒng)上位Cortex-m3構(gòu)建GNU工具鏈,沒想到如此簡單。
以超級用戶權(quán)限運行如下命令:
crossdev --g 4.3.1-r1 -t arm-elf
因為官方的gcc在4.3版本下加入了對cortex-m3的支持,所以上面的命令用 --g 4.3.1-r1參數(shù),指定了4.3.1-r1版的GCC。整個編譯過程非常順利,編譯成功后得到了:arm-elf-gcc,arm-elf- ld,arm-elf-objcopy等命令,這些就是所需要的工具。

參考
1、
大俠 bozai 章其波 在
[原創(chuàng)] 支持cortex-M3 的GNU ARM編譯器 CodeSourcery 上的第一個STM32F10x例子
http://www.ouravr.com/bbs/bbs_li ... 1&bbs_page_no=2
一帖中給出的工程(makefile和ldscripts)

2、大俠bluelucky翻譯的《Cortex-M3權(quán)威指南》中有關(guān)用gcc進(jìn)行開發(fā)的章節(jié)。

寫了一個簡單的程序,經(jīng)測試成功的點亮了LED。

所有心得不敢獨享,在這里與大家分享一下,一并謝謝bluelucky和章其波的辛勤勞作。

-------------------------------------------------------------------------------------------------------------------------------------

一、安裝GNU工具鏈
因為在Gentoo Linux下有crossdev這個非常強(qiáng)大的構(gòu)建交叉編譯工具鏈的工具,安裝Cortex-m3的交叉工具鏈非常簡單,方法前以述及,這里不贅述。

二、STM32F10x(Cortex-m3)基于GNU工具鏈的開發(fā)流程

《Cortex-M3權(quán)威指南》一書中有如下這個開發(fā)流程圖:

由圖可知,用C語言進(jìn)行stm32的程序開發(fā),仍然是:寫代碼--->編譯、連接--->下載到flash這樣一個過程。只不過除此以外,我認(rèn)為比較重要的還需要知道這樣幾點:
1、如何訪問此種單片機(jī)的外圍設(shè)備寄存器;
2、如何書寫此種單片機(jī)的中斷服務(wù)程序;
3、此種單片機(jī)復(fù)位后,從什么地址處開始執(zhí)行代碼;然后我們?nèi)绾胃嬖V編譯工具把代碼按照這個入口地址開始安排我們的代碼。
4、需不需要為構(gòu)建C語言的運行環(huán)境作一些工作,也就是啟動代碼。
5、通過命令行選項通知編譯器為特定的單片機(jī)生成代碼。

三、編寫一個最精簡的代碼

1、一個main函數(shù)就足夠了嗎?

先讓我們簡單回顧一下在PC機(jī),一個程序的執(zhí)行過程大概是怎樣的。因為程序是在操作系統(tǒng)的管理下運行的,過程大概為:

操作系統(tǒng)----------> 啟動代碼(編譯器自動加入,做一些堆棧、全局變量的初始化工作)-----------> main

然而在裸奔的單片機(jī)上,操作系統(tǒng)沒有了,所以原來由操作系統(tǒng)和編譯器作的事情,現(xiàn)在需要我們手工DIY了(如果交叉編譯工具沒有為我們做好這些事情的話,因為我也不知道gcc現(xiàn)在有沒有為stm32做好這一切,所以我暫時假定什么都得靠自己)。

2、C程序的典型內(nèi)存布局

            +-------------------------------+
            |                               |
            |            堆棧               |
            |                               |
            + - - - - - - - - - - - - - - - +
            |                               |
            |                               |
            |                               |
            |                               |
            |                               |
            |                               |
            |                               |
            |                               |
            |                               |
            + - - - - - - - - - - - - - - - +
            |                               |
            |             堆                |
            |                               |
            +-------------------------------+
            |                               |
            |        未初始化的數(shù)據(jù)         |
            |           .bss段              |
            |                               |
            +-------------------------------+
            |                               |
            |         初始化的數(shù)據(jù)          |
            |           .data段             |
            |                               |
            +-------------------------------+
            |                               |
            |            正文               |           
            |           .text段             |
            |          .rodata段            |
            |                               |
            +-------------------------------+

上圖中,正文對應(yīng)的是可執(zhí)行代碼.text和常量表格數(shù)據(jù)等.rodata,.data對應(yīng)初始化了的全局變量,編譯后將位于可執(zhí)行文件中,由啟動代碼負(fù)責(zé)加載到數(shù)據(jù)區(qū)中(在單片機(jī)中這部分?jǐn)?shù)據(jù)會存于flash中,需要有啟動代碼把這部分內(nèi)容拷貝到sram中),.bss段是沒有初始值的全局變量,由啟動代碼把這部分內(nèi)容全初始化為0;為了保證C程序的執(zhí)行,還需要設(shè)置好程序運行時的堆棧區(qū)。

在有了這些基礎(chǔ)知識后,除了main以外,我們還需要做些什么就比較清楚了:設(shè)置堆棧區(qū),把編譯好的內(nèi)容放到單片機(jī)中正確的地方中去。


3、設(shè)置堆棧區(qū)和啟動代碼

Cortex-m3內(nèi)核在地址0x0000 0000處存放一個向量表,向量表的第0個單元,也即地址0x0000 0000處存放的是堆棧頂?shù)牡刂罚珻ortex-m3復(fù)位后即從該處取出數(shù)據(jù)用以初始化MSP寄存器。向量表中的內(nèi)容是32位的地址,這些地址是中斷異常服務(wù)程序的入口地址,其中向量表的第一個單元,即地址0x0000 0004處存放的是復(fù)位向量,也就是說Cortex-m3復(fù)位后,執(zhí)行該向量(可理解為函數(shù)指針)指向的復(fù)位代碼。看看代碼吧:

__attribute__ ((section(".stackarea")))
static unsigned long pulStack[STACK_SIZE];
這一句定義了一個pulStack的數(shù)組,程序把這個數(shù)組作為了堆棧區(qū)。這條語句使用了__attribute__ ((section(".stackarea"))) 把數(shù)組定位在了.stackarea這個段中。

typedef void (* pfnISR)(void);

__attribute__ ((section(".isr_vector")))
pfnISR        VectorTable[] =  
{

        (pfnISR)((unsigned long)pulStack + sizeof(pulStack)),        // The initial stack pointer
        ResetISR,                                               // The reset handler
        NMIException,
        HardFaultException
};

定義了一個數(shù)組VectorTable,作為向量表,定位于.isr_vector段中。通過鏈接腳本的控制這個表將放在正文區(qū)的最開始,正文區(qū)又將從flash的最開始存放,這樣這個向量表就會起到相當(dāng)于存放在0x0000 0000開始的地址空間的效果。
向量表的第0個單元是((unsigned long)pulStack + sizeof(pulStack)),這是數(shù)組的最后一個元素,因為Cortex-m3的堆棧是向下增長的。
向量表的第1個單元是ResetISR,它指向復(fù)位處理的代碼,也是整個程序的入口。本程序用它來實現(xiàn)啟動代碼的功能。

extern unsigned long _etext;
extern unsigned long _data;
extern unsigned long _edata;
extern unsigned long _bss;
extern unsigned long _ebss;

void ResetISR(void)
{
        unsigned long *pulSrc, *pulDest;

        //
        // Copy the data segment initializers from flash to SRAM.
        //
        pulSrc = &_etext;
        for(pulDest = &_data; pulDest < &_edata; )
        {
                *pulDest++ = *pulSrc++;
        }

        //
        // Zero fill the bss segment.
        //
        for(pulDest = &_bss; pulDest < &_ebss; )
        {
                *pulDest++ = 0;
        }

        //
        // Call the application's entry point.
        //
        main();
}
這段代碼用到了通過連接器賦值的幾個變量值。_etext的值為正文段結(jié)尾處的地址,這之后的flash空間是初始化的數(shù)據(jù)值,應(yīng)該復(fù)制到sram中去,
_data、_edata的值分別為數(shù)據(jù)段的開始和結(jié)尾處的地址,這部分應(yīng)該是sram的地址。

        pulSrc = &_etext;
        for(pulDest = &_data; pulDest < &_edata; )
        {
                *pulDest++ = *pulSrc++;
        }
這部分代碼就是將保存于flash中的初始化數(shù)據(jù)復(fù)制到sram中。
上面代碼中的第二個循環(huán)是將.bss段清零。最后調(diào)用main進(jìn)入到我們的主程序。
共1 條記錄, 每頁顯示 10 條, 頁簽: [1]

Copyright © 2000 - 2009 曙海教育集團(tuán)
Powered By 曙海教育集團(tuán) Version 2.2
Processed in .03027 s, 2 queries.
久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
欧美日韩视频在线一区二区观看视频| 国产精品美女久久久久久久久久久 | 欧美一级理论片| 欧美午夜一区二区| 欧美日韩成人综合天天影院| 欧美老肥妇做.爰bbww视频| 911精品产国品一二三产区| 日韩视频永久免费| 国产日本亚洲高清| 亚洲精品视频一区二区| 午夜av区久久| 看国产成人h片视频| 国产精品 欧美精品| caoporm超碰国产精品| 国产精品香蕉视屏| 日韩亚洲视频| 欧美精品久久久久久久多人混战 | 久久一二三国产| 中文字幕精品一区| 夜夜亚洲天天久久| 韩国中文字幕2020精品| 91小视频免费看| 久久综合九色综合久99| 色八戒一区二区三区| 日韩欧美亚洲一区二区| 国产精品免费观看视频| 日本不卡视频在线| 不卡一区中文字幕| 欧美极品一区| 欧美男生操女生| 中文字幕在线观看不卡视频| 日韩和欧美一区二区三区| 国产.欧美.日韩| 另类视频在线观看+1080p| 欧美伊人精品成人久久综合97| 精品少妇一区二区三区| 亚洲最大的成人av| 国产91精品欧美| 日本欧洲国产一区二区| 日韩一区二区三区电影| 亚洲欧美一区二区三区久本道91| 麻豆精品一二三| 懂色一区二区三区av片| 91久久免费观看| 国产精品丝袜在线| 国内精品久久久久影院色| 精品婷婷色一区二区三区蜜桃| 欧美系列一区二区| 亚洲视频在线观看三级| 国产一区二区女| 久久资源亚洲| 日韩免费观看2025年上映的电影| 一区二区三区不卡视频| 粉嫩嫩av羞羞动漫久久久| 日韩精品久久一区| 久久精品人人做人人综合| 麻豆精品在线播放| 久久久久高清| 欧美精品一区二区蜜臀亚洲| 美国欧美日韩国产在线播放| 久久伦理网站| 久久精品亚洲精品国产欧美 | 国产精品女人毛片| 国产盗摄女厕一区二区三区| 日日骚一区二区网站| 久久久久久久精| 国产一区二区三区综合| 神马欧美一区二区| 国产精品欧美久久久久一区二区| 国产综合色精品一区二区三区| 欧美综合77777色婷婷| 久久久国际精品| 国产精品69久久久久水密桃| 色哟哟一区二区三区| 亚洲精品免费一二三区| 国产精品美女黄网| 久久久青草青青国产亚洲免观| 九九国产精品视频| 一区二区三区三区在线| 一区二区在线观看免费视频播放| 国产98在线|日韩| 久久久久亚洲综合| 成人app软件下载大全免费| 欧美日韩你懂的| 日本强好片久久久久久aaa| 秋霞在线观看一区二区三区| 亚洲欧洲日韩在线| 国产精品大全| 国产日产欧美一区二区三区 | 欧美日韩最好看的视频| 国产精品毛片大码女人| 99电影网电视剧在线观看| 精品免费99久久| 国产成人亚洲综合a∨猫咪| 欧美日韩欧美一区二区| 精品综合免费视频观看| 在线看日本不卡| 日本三级韩国三级欧美三级| 色综合久久久久| 首页国产欧美日韩丝袜| 亚洲巨乳在线观看| 丝袜诱惑制服诱惑色一区在线观看 | 中文无字幕一区二区三区| 99精品国产一区二区| 久久综合九色综合欧美98| 成人免费毛片a| xf在线a精品一区二区视频网站| 不卡av在线免费观看| 久久精品日韩一区二区三区| av在线不卡观看| 综合网在线视频| 日韩精品一区二区三区丰满 | 亚洲欧美激情插 | 99麻豆久久久国产精品免费| 国产欧美综合在线观看第十页| 国产精品日韩二区| 亚洲精品视频在线观看网站| 亚洲一区二区三区涩| 激情综合网天天干| 精品国产91久久久久久久妲己| www.一区二区三区| 亚洲精品乱码久久久久久黑人| 亚洲精品一区国产精品| 国模一区二区三区白浆| 精品播放一区二区| 久久精品国产精品国产精品污| 亚洲一区二区视频| 欧美日本高清视频在线观看| 成人的网站免费观看| 国产精品成人网| 中国成人亚色综合网站| 丰满少妇久久久久久久 | 国产一区二区三区视频在线播放| 日韩手机在线导航| 久久久久久久久久久一区| 亚洲国产精品尤物yw在线观看| 在线观看欧美精品| av一二三不卡影片| 亚洲国产综合在线| 欧美欧美欧美欧美首页| 国产91视觉| 日本不卡视频在线| 国产夜色精品一区二区av| 亚洲一区精彩视频| 成人av电影在线网| 亚洲国产精品久久不卡毛片| 欧美日韩电影一区| 国内精品二区| 激情成人午夜视频| 国产精品白丝在线| 69堂精品视频| 日本高清不卡三区| 成人免费av网站| 亚洲成人在线观看视频| 日韩精品一区二区三区在线观看| 欧美久久久久久一卡四| 国产精品911| 一片黄亚洲嫩模| 精品国产乱码久久久久久图片 | 久久手机视频| 国产成人亚洲综合a∨婷婷图片| ...av二区三区久久精品| 欧美日韩成人在线| 久久人人九九| 成人小视频在线| 亚洲成人手机在线| 国产亚洲精品中文字幕| 欧美丝袜丝nylons| 日本日本精品二区免费| 91丝袜国产在线播放| 久久精品国产在热久久| 一区二区在线看| 国产婷婷色一区二区三区四区| 在线精品观看国产| 欧美精品久久久| 91毛片在线观看| 国产一区二区免费在线| 图片区小说区区亚洲影院| 中文字幕免费不卡在线| 日韩欧美国产系列| 欧美综合一区二区| 日韩精品欧美一区二区三区| 99国产精品国产精品毛片| 激情六月婷婷综合| 日韩福利视频网| 亚洲男帅同性gay1069| 久久久久国产精品麻豆| 51精品秘密在线观看| 一区二区三区四区欧美| 国产精品有限公司| 97久久精品人人做人人爽50路| 久久9热精品视频| 日韩国产在线观看| 亚洲地区一二三色| 亚洲欧洲制服丝袜| 国产精品超碰97尤物18| 国产日韩欧美一区二区三区乱码| 日韩视频一区二区三区在线播放| 亚洲电影一级黄| 亚洲欧美日韩久久精品|