开发板实现645协议C语言,迅为-imx6ull开发板之C语言实现LED例程
第九章我們使用匯編編寫了?LED?燈的實驗,在實際開發過程中大部分還是使用?C?語言,匯編只是用來完成?C?語言環境的初始化,本章我么就來實現用匯編完成?C?語言環境的初始化,然后用?C?語言實現?LED?的例程。
10.1 C?程序版LED例程簡介
匯編完成?C?語言環境的初始化主要包括內存初始化,設置堆棧指針等等,當這些工作完成以后就可以跳轉到?C?語言,執行?C?程序了,所以我們有兩部分事情要做:
1.匯編文件,用來完成?C?語言的環境初始化
2.C?語言文件,主要實現我們的業務功能,比武我們本章的點亮?LED。
10.2?原理圖分析 原理圖分析
本章用到的硬件資源和第?6?章的一樣,可以參照第六章的硬件原理分析。
10.3?程序編寫
本實驗對應的例程在光盤資料的:i.MX6UL?終結者光盤資料\04_裸機例程源碼\2_led_C program?目錄下,我們在?Ubuntu?系統建立“1_Led_C program”文件夾,然后在“Led_C program”文件夾下建立文件:start.S、main.c、main.h。其中?start.S?是匯編文件,main.c?和?main.h?是?C?語言文件。
我們在前面新建的“srart.S”文件中輸入下面的代碼:
1.?global _start /*?全局標號?*/
2. /*
3. *?描述:?_start?函數,程序從此函數開始執行,此函數主要功能是設置?C
4. *?運行環境。
5. */
6. _start:
7. /*?進入?SVC?模式?*/
8. mrs r0, cpsr
9. bic r0, r0, #0x1f /*?將?r0?寄存器中的低?5?位清零,也就是?cpsr?的?M0~M4 */
10. orr r0, r0, #0x13 /* r0?或上?0x13,表示使用?SVC?模式?*/
11. msr cpsr, r0 /*?將?r0?的數據寫入到?cpsr_c?中?*/
12. ldr sp, =0X80200000 /*?設置棧指針?*/
13. b main /*?跳轉到?main?函數?*/
第?1?行定義了一個全局標號_start
第?6?行是程序的入口、
第?8?行到第?11?行是設置處理器進入?SVC?模式
第?12?行通過?ldr?指令設置?SVC?模式下的?sp?指針(0x80200000),i.MX6 ULL?終結者開發板上的內存地址范
圍是?0X80000000~0XA0000000(512MB)或?0X80000000~0X90000000(256MB),所以不論是?512MB?版本還是256MB?版本的,其內存起始地址都是?0X80000000,由于?i.MX6ULL?的堆棧是向下正常的,所以?SP?指針設置成?0X80200000(0X80200000-0X80000000,是?2MB?的棧空間,足夠我們使用了)。
第?13?行是挑喜歡到?main?函數(C?語言的入口函數。
至此匯編部分的程序我們就完成了,主要用來設置處理器在?SVC?模式下運行,然后初始化?SP?指針,最后跳轉到?C?程序的?main?入口函數。如果大家有接觸過三星的?S3C2440
總結
以上是生活随笔為你收集整理的开发板实现645协议C语言,迅为-imx6ull开发板之C语言实现LED例程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言next的用法,C语言strchr
- 下一篇: c语言实现灰度图像阈值分割,灰度图像--