基于IMX6ULLmini的linux裸機開發系列二:使用C語言和SDK點亮LED

引入sdk頭文件

?sudo chown -R gec /opt

用這條命令給gec賦權限,否則訪問權限不夠,無法讀取,如下圖成功

目的:解決寄存器地址難查難設置

  • devices/MCIMX6Y2/MCIMX6Y2.h

    記錄外設寄存器及其相關操作

  • devices/MCIMX6Y2/drivers/fsl_iomuxc.h

    記錄引腳復用及其相關操作

注意

MCIMX6Y2.h注釋以下頭文件包含

#include "core_ca7.h" ?
#include "system_MCIMX6Y2.h" ? 

增加以下宏定義:

#define __O  volatile
#define __IO  volatile 
#define __I  volatile const 
?
#define uint32_t unsigned int
#define uint16_t unsigned short
#define uint8_t unsigned char

使用C語言

目的:提高開發效率

bin文件組成介紹

段是程序的基本組成元素:

  • .text段:代碼文本

  • .rodata段:只讀變量,如const修飾的變量

  • .data段:非零的全局變量、靜態變量

  • .bss:值為 0 的全局變量、靜態變量

  • .comment:存放注釋

  • ...

準備C語言環境

  • bss段清零

bss段是一種在程序運行時需要初始化的全局或靜態變量的存儲區域。bss段中的變量在編譯時不分配具體的內存空間,而是在程序加載到內存后,運行時會被清零。

將bss段清零的操作稱為"bss段清零",其含義是將bss段中的所有變量的內存空間初始化為零。這通常是在程序啟動時進行的操作。通過清零bss段,可以確保所有的全局和靜態變量在使用之前都被初始化為零值。這樣可以避免在未初始化狀態下使用這些變量時出現不可預料的行為。

bss段清零是由操作系統或運行庫負責執行的,它們會在加載程序到內存時遍歷bss段的內存空間,并將其內容設置為零。這樣,在程序開始執行之前,所有位于bss段的變量都將具有預定義的默認值,即零值。

需要注意的是,只有位于bss段的變量才會被清零,已經在代碼中顯式初始化的全局或靜態變量不會受到影響。

  • 棧指針(sp)

棧指針 (Stack Pointer) 是指向程序運行時堆棧 (Stack) 頂部的指針。堆棧是用于存儲函數調用、局部變量和其他臨時數據的一種數據結構,遵循后進先出(LIFO)的原則。

棧指針 (SP) 在程序執行期間動態地移動,以反映當前堆棧頂部的位置。通常,棧指針向下移動(減小)一次指向堆棧上一個條目。

當函數被調用時,它會將返回地址、參數以及其他必要的數據壓入堆棧。棧指針會相應地向下移動以適應新的數據。當函數退出時,棧指針會向上移動,以釋放先前壓入堆棧的數據。

棧指針的具體實現方式取決于底層的硬件架構和操作系統。在某些架構中,棧指針可以保存在特定的寄存器中,如 x86 架構中的 ESP (Extended Stack Pointer) 或 ARM 架構中的 SP (Stack Pointer) 寄存器。在其他情況下,棧指針可能存儲在內存中的特定位置。

棧指針的正確使用對于程序的正確執行和內存管理非常重要。在編程過程中,我們應該遵循正確的堆棧操作,確保棧指針在函數調用和返回過程中正確地移動,并避免棧溢出等問題

裸機程序控制外設

特點:讀數據手冊、設寄存器值

  • 找出外設有哪些相關寄存器

  • 找出外設相關寄存器如何設置

鏈接腳本引入

目的:指定鏈接地址、起始代碼在text段的位置,其他段的位置

官方資料:Using LD, the GNU linker

SECTIONS{
?. =xxx //鏈接起始地址.段名{xxx*(.段名)}...
}

這是一個鏈接器腳本片段示例,用于定義程序的內存布局和段的起始地址。下面是對每個段的簡要說明:

  • .text:包含程序的可執行代碼和只讀數據。.text?段對齊到 4 字節邊界,并包含了?build/start.o?目標文件和其他所有的?.text?節。
  • .rodata:包含只讀的常量數據。.rodata?段對齊到 4 字節邊界,并包含了所有的?.rodata?節。
  • .data:包含已初始化的全局和靜態變量。.data?段對齊到 4 字節邊界,并包含了所有的?.data?節。
  • .bss:包含未初始化的全局和靜態變量。.bss?段對齊到 4 字節邊界,并包含了所有的?.bss?節和?COMMON?節。

此鏈接腳本還定義了兩個符號 __bss_start__bss_end,分別指向 .bss 段的起始地址和結束地址。這些符號可以在程序中使用,以確定 BSS 段的大小和位置。

值得注意的是,這只是一個鏈接器腳本的示例片段,具體的內存布局和段定義可能因目標平臺和工具鏈而異。在實際使用時,你需要根據你的需求和目標環境來編寫和調整鏈接器腳本。

Makefile修改

  • 兼容.s匯編文件

  • 添加編譯程序命令

  • 添加sd卡燒錄命令

?有報錯

gec@ubuntu:~/bare_mental/part_3$ make burn
cp ?build/led.bin /home/embedfire/bare_mental/part_1/download_tool
cp: 無法創建普通文件'/home/embedfire/bare_mental/part_1/download_tool': 沒有那個文件或目錄
Makefile:45: recipe for target 'burn' failed
make: *** [burn] Error 1

?

?這里改為自己當前的用戶名就行

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41370.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41370.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41370.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Windows+VMware+Ubuntu+Anaconda+VMware Tools

Q1:Windows不支持***agent模擬器 A1:在VMware安裝Ubuntu虛擬機 P1: 下載 VMware-workstation-full-15.5.6-16341506.exe 安裝包(峰哥電腦軟件) P2: 下載Ubuntu鏡像 地址 ubuntu-18.04.6-desktop-amd64.iso P3:搭載鏡…

干翻Dubbo系列第十一篇:Dubbo常見協議與通信效率對比

文章目錄 文章說明 一:協議 1:什么是協議 2:協議和序列化關系 3:協議組成 (一):頭信息 (二):體信息 4:Dubbo3中常見的協議 5:…

華為在ospf area 0單區域的情況下結合pbr對數據包的來回路徑進行控制

配置思路: 兩邊去的包在R1上用mqc進行下一跳重定向 兩邊回程包在R4上用mqc進行下一跳重定向 最終讓內網 192.168.10.0出去的數據包來回全走上面R-1-2-4 192.168.20.0出去的數據包來回全走 下面R1-3-4 R2和R3就是簡單ospf配置和宣告,其它沒有配置&#…

搭建grafana+loki+promtail日志收集系統

準備工作 下載地址 https://github.com/grafana/loki/releases 安裝包放在服務器目錄:/opt wget https://github.com/grafana/loki/releases/download/v2.4.2/loki-linux-amd64.zip wget https://github.com/grafana/loki/releases/download/v2.4.2/promtail-lin…

【備戰csp-j】csp常考題目詳解(3)

三.排列組合 1. 7名學生站成一排,甲、乙必須站在一起有多少不同排法? 答案:1440 解析: 6組人進行全排列:A(6,6); 甲和乙的順序有兩種情況,所以結果要再乘2; …

影響力再度提升,Smartbi多次蟬聯Gartner、IDC等權威認可

近期,思邁特軟件捷報頻傳,Smartbi憑借技術創新實力和產品能力,成功入選Gartner中國增強數據分析代表廠商及自助分析代表廠商,同時,連續三年蟬聯“IDC中國FinTech 50”榜單。 Part.1 再次被Gartner提名 Smartbi深度融…

重塑DTC規則:元氣森林的全渠道轉型

元氣森林作為迄今為止用5-6年時間最快達到70億年銷售額的飲料品牌(統一、可口可樂、東鵬特飲都花了15年左右,康師傅花了10年)。元氣森林于2016年在北京創立,憑借健康產品理念和新潮營銷方式,一款主打“0糖0卡0脂”概念…

激活函數總結(十一):激活函數補充(Absolute、Bipolar、Bipolar Sigmoid)

激活函數總結(十一):激活函數補充 1 引言2 激活函數2.1 Absolute激活函數2.2 Bipolar激活函數2.3 Bipolar Sigmoid激活函數 3. 總結 1 引言 在前面的文章中已經介紹了介紹了一系列激活函數 (Sigmoid、Tanh、ReLU、Leaky ReLU、PReLU、Swish、…

C++ auto關鍵字

文章目錄 一、auto的推導規則二、auto的限制 C11 中有:auto 類型推導 auto x 5; // OK: x 是 int 類型 auto pi new auto(1); // OK: pi 被推導為 int* const auto *v &x, u 6; // OK: v是const int*類型,u是const int類型 static auto y 0.0;…

【Java】批量生成條形碼-itextpdf

批量生成條形碼 Controller ApiOperation("商品一覽批量生成商品條形碼")PostMapping("/batchGenerateProdBarCode")public void batchGenerateProdBarCode(RequestBody ProductListCondition productListCondition,HttpServletResponse response){import…

使用Spring-Security后,瀏覽器不能緩存的問題

Spring-Security在默認情況下是不允許客戶端進行緩存的,在使用時可以通過禁用Spring-Security中的cacheControl配置項允許緩存。 protected void configure(HttpSecurity http) throws Exception {// 允許緩存配置http.headers().cacheControl().disable(); }

Java中使用流將兩個集合根據某個字段進行過濾去重?

Java中使用流將兩個集合根據某個字段進行過濾去重? 在Java中,您可以使用流(Stream)來過濾和去重兩個集合。下面是一個示例代碼,展示如何根據對象的某個字段進行過濾和去重操作: import java.util.ArrayList; import java.util.List; impor…

“代碼馭寵而行“:探索Python的魔法世界,開啟編程奇幻之旅!

文章目錄 🍀引言🍀第一步:安裝Python和開發環境🍀第二步:掌握基本語法🍀第三步:使用Python庫和模塊🍀第四步:實踐項目和練習🍀第五步:學習進階主題…

origin修改默認的字體等

因為默認是中文宋體,每次切換成英文尤其是希臘字母就很麻煩。 選擇菜單欄的【設置】——【選項】點擊。 彈出窗口中選擇【文本字體】 設置成你需要的字體就好。 這里同樣可以更改頁面、圖等的默認設置。 效果: 選擇插入文字后,自動更改成…

銀河麒麟V10 達夢安裝教程

安裝前先準備要安裝包,包需要需要區分X86和arm架構。 版本為:dm8_20230419_FTarm_kylin10_sp1_64.iso 達夢數據庫下載地址: https://www.aliyundrive.com/s/Qm7Es5BQM5U 第一步創建用戶 su - root 1. 創建安裝用戶組 dminstall。 groupad…

前饋神經網絡優化器

引用的知乎上的文章內容,現在有些地方還不太明白,留待以后查看。 import math import numpy as np import matplotlib.pyplot as pltRATIO 3 # 橢圓的長寬比 LIMIT 1.2 # 圖像的坐標軸范圍class PlotComparaison(object):"""多種優化…

Python爬蟲的應用場景與技術難點:如何提高數據抓取的效率與準確性

作為專業爬蟲程序員,我們在數據抓取過程中常常面臨效率低下和準確性不高的問題。但不用擔心!本文將與大家分享Python爬蟲的應用場景與技術難點,并提供一些實際操作價值的解決方案。讓我們一起來探索如何提高數據抓取的效率與準確性吧&#xf…

python3實現線性規劃求解

Background 對于數學規劃問題,有很多的實現。MatlabYALMIPCPLEX這個組合應該是比較主流的,尤其是在電力相關系統中占據著比較重要的地位。MATLAB是一個強大的數值計算工具,用于數學建模、算法開發和數據分析。Yalmip是一個MATLAB工具箱&#…

MongoDB:MySQL,Redis,ES,MongoDB的應用場景

簡單明了說明MySQL,ES,MongoDB的各自特點,應用場景,以及MongoDB如何使用的第一章節. 一. SQL與NoSQL SQL被稱為結構化查詢語言.是傳統意義上的數據庫,數據之間存在很明確的關聯關系,例如主外鍵關聯,這種結構可以確保數據的完整性(數據沒有缺失并且正確).但是正因為這種嚴密的結…

神經網絡基礎-神經網絡補充概念-34-正則化

概念 正則化是一種用于控制模型復雜度并防止過擬合的技術,在機器學習和深度學習中廣泛應用。它通過在損失函數中添加一項懲罰項來限制模型的參數,從而使模型更傾向于選擇簡單的參數配置。 理解 L1 正則化(L1 Regularization)&a…