1. 程式人生 > >嵌入式程式設計(一):51微控制器如何將函式 定義到指定程式地址

嵌入式程式設計(一):51微控制器如何將函式 定義到指定程式地址

開發十年,就只剩下這套架構體系了! >>>   

在微控制器程式設計使用中,會涉及到將某些函式定義到指定的code區。此時需要對工程檔案進行配置修改才可完成。本期針對微控制器平臺做出說明介紹

1、測試目標

將函式testaddr定義到0x6000地址

2、測試環境

LKT4106加密晶片演算法工程、KEIL-C51編譯軟體、

3、實現步驟

3.1 使用KEIL軟體匯入LKT4106演算法工程(KEIL軟體基本操作不再敷述,如不清楚請自行百度)

3.2 在App_Main.c檔案中宣告測試函式testaddr:

extern void testaddr(u8 xdata *in,u8 xdata *out,u8 len);

3.3 在App_fun.c檔案中實現測試函式testaddr:

void testaddr(u8 xdata *in,u8 xdata *out,u8 len){

  u8 i;

  for(i=0;i < len;i++)

   out[i]= in[i]+1;

}

3.4 在App_Main.c檔案中呼叫測試函式testaddr,此處省略

3.5 編譯演算法工程後,在\LKT4106_AppDemo\Out\Bin\路徑下找到 LKT4106_AppDemo.M51,開啟該檔案。

3.6 找到* * C O D E   M E M O R Y * * 部分,尋找到testaddr編譯後儲存的地址,注意:根據編譯規則,testaddr函式會轉換為大寫格式,並加上函式所在檔案的名稱。本例中,編譯後的預設地址如圖1所示。

圖1. 預設編譯連結地址

3.7 回到演算法工程,選擇Project->Options for Target ...->BL51 Misc,點選Edit按鈕調出lin檔案,如圖2所示

圖2. 開啟lin檔案

3.8 在LKT4106_App.lin檔案中,按照下圖所示,將testaddr函式指定到程式區的目標地址,本例將其由預設的0x48B0地址更改到0x6000地址,如圖3所示。

圖3. 更改目標函式儲存的地址

3.9 編譯演算法工程,並重新開啟LKT4106_AppDemo.M51檔案,檢視testaddr函式所在地址,如圖4所示,該函式已經更換到0x6000地址上。

圖4. 重定義後目標函式所在地址

至此,51微控制器將函式定義到指定程式地址的方法已經實現。下一篇將介紹如何將ARM中的函式地址進行更改。

相關推薦

嵌入式程式設計51微控制器如何函式 定義指定程式地址

開發十年,就只剩下這套架構體系了! >>>   

網路程式設計埠那些事兒

TCP和UDP協議都存在一個叫做埠的東西,但埠卻不是IP協議的一部分。 埠被設計出來主要是為了給協議棧和應用對應: 協議棧用埠號將資料分配給不同的應用層程式 應用層程式用埠號去區分不同的連線,參見之前提到過的“四元組” TCP和UDP協議都使用了埠號(Port num

Python函數語言程式設計高階函式

首先有一個高階函式的知識。 一個函式可以接收另一個函式作為引數,這種函式就稱之為高階函式。 def add(x, y, f): return f(x) + f(y) 當我們呼叫add(-5, 6, abs)時,引數x,y和f分別接收-5,6和abs,根據函式定義,我們可以推導計算過程為:

併發程式設計執行緒基礎、執行緒之間的共享與協作

一、基礎概念 1.1 CPU核心數、執行緒數 **兩者的關係:**cpu的核心數與執行緒數是1:1的關係,例如一個8核的cpu,支援8個執行緒同時執行。但在intel引入超執行緒技術以後,cpu與執行緒數的關係就變成了1:2。此外在開發過程中並沒感覺到執行緒的限制,那是因為cpu

嵌入式系統概論

嵌入式系統(Embedded system)全稱嵌入式計算機系統,它實現了微型計算機晶片化,因此也稱微控制器(single chip Microcomputer, SCMP)。 微控制器(MCU)是主要面向測控領域的微控制器,使用很廣泛,集成了CPU、儲存器、定時器/計時器等功

Windows網路程式設計TCP/IP協議

概述 這個協議是一個四層協議: 應用層,主要協議有HTTP、FTP等 傳輸層,主要協議有TCP、UDP等 網路層,主要協議有IP等 鏈路層,主要協議有ICMP等 下層中的協議總是為上層中的協議服務的,比如說應用層的HTTP、FTP協議都是基於T

Halcon和C#混合程式設計數字識別

Halcon匯出C#程式碼 using System; using HalconDotNet; public partial class HDevelopExport { public HTuple hv_ExpDefaultWinHandle; //

Java WebSocket程式設計EchoServer應用

通過一個簡單的示例(EchoServer應用)來了解Java WebSocket原理。這是一個客戶端/伺服器應用,客戶端是Web瀏覽器上的一小段JavaScript,伺服器是一個WebSocket端點。 執行環境:Java 8 ,Eclipse Java EE ,Tomcat 9.0

C語言面向物件程式設計封裝與繼承

最近在用 C 做專案,之前用慣了 C++ ,轉回頭來用C 還真有點不適應。 C++ 語言中自帶面向物件支援,如封裝、繼承、多型等面向物件的基本特徵。 C 原本是面向過程的語言,自身沒有內建這些特性,但我們還是可以利用 C 語言本身已有的特性來實現面向物件的一些基本特徵。接下來

Javascript 面向物件程式設計封裝

Javascript是一種基於物件(object-based)的語言,你遇到的所有東西幾乎都是物件。但是,它又不是一種真正的面向物件程式設計(OOP)語言,因為它的語法中沒有class(類)。 那麼,如果我們要把"屬性"(property)和"方法"(method),封裝成

Javascript模組化程式設計模組的寫法

隨著網站逐漸變成"網際網路應用程式",嵌入網頁的Javascript程式碼越來越龐大,越來越複雜。 網頁越來越像桌面程式,需要一個團隊分工協作、進度管理、單元測試等等......開發者不得不使用軟體工程的方法,管理網頁的業務邏輯。 Javascript模組化程式設計,

Linux網路程式設計一個簡單的socket程式

伺服器: /* *tcp_server.c */ #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include

大學生學程式設計為什麼要選擇做程式設計師?

從這篇文章開始準備做一個大學生學程式設計系列文章,主要幫助一些還在程式設計路上徘徊的小夥伴,作為一個過來人的身份總結一些程式設計經驗以及心得,在自學的過程中走了很多的彎路,在此通過這個專欄分享給需要程式設計的小夥伴。 無數個人心中都有一個程式設計夢,想著自己能夠做在電腦旁邊敲程式碼,做出

windows基礎應用程式程式設計基本框架

從一開始程式設計時,大家面對著黑乎乎的控制檯視窗,就開始幻想什麼時候能進入windows下進行程式設計。能夠編寫出具有形形色色視窗的人往往都被我們認為是牛人。而從控制檯視窗進入windows下進行程式設計,對於初學者來講,絕對是一個很難跨越的坎。對此,自己也深有體會。因此,

【python】Python + C/C++ 嵌入式程式設計1多維陣列Numpy.Array()在Python和C/C++檔案間的傳遞問題

Python 提供了豐富的 C API 函式,我們使用這些 C API 函式可以實現將 Python 檔案中的函式、類等在 C/C++ 檔案中進行呼叫,從而使得我們可以方便地使用 Python 程式碼來幫助我們實現一些額外的需求(如:嵌入神經網路模型)。 網上已經有很多

JAVA 8函數語言程式設計高階函式

函數語言程式設計的核心在高階函式與偏函式,在JAVA 8中,提供了很多函式式的介面,但跟Python、Javascript的函式相比較,還是存在較大的距離。 首先看一個高階函式的例子,這裡利用區域性變數域特性,進行延遲求值,如下: /** * 輸入一

UART0串列埠程式設計通訊協議設計;RS232標準

UART0串列埠程式設計(一) 嵌入式系統之間採用通訊方式交換資料,序列通訊是一種最基本的通訊手段。現在由於各類CPU均集成了UART部件。本節對串列埠程式設計時如何設計串列埠通訊協議,以及對RS232介面進行了說明。 1.    通訊協議設計 在進行通訊時,每次需要傳送的

shell文字過濾程式設計grep和正則表示式

Linux系統中有很多檔案,比如配置檔案、日誌檔案、使用者檔案等。檔案中都包含了大量的資訊,我們可以使用cat等命令輕鬆將其輸出到螢幕,但如果要從檔案中分析或提取資料,還需要其他工具來實現。而linux正好提供了這些工具:grep、awk、sed等。把這些工具使用好,可以

c++11多執行緒程式設計建立執行緒的三種方法

c++11執行緒庫原始的c++標準僅支援單執行緒程式設計,新的c++標準(c++11或c++0x)於2011年釋出,引入了新的執行緒庫。 編譯器要求 Linux: gcc 4.8.1 (完全併發支援) Windows: Visual Studio 2012 and Min

JavaScript ES6函數語言程式設計閉包與高階函式

函數語言程式設計的歷史 函式的第一原則是要小,第二原則則是要更小 —— ROBERT C. MARTIN 解釋一下上面那句話,就是我們常說的一個函式只做一件事,比如:將字串首字母和尾字母都改成大寫,我們此時應該編寫兩個函式。為什麼呢?為了更好的複用,這樣做保證了函式更加的顆粒化。 早在 1950 年代,隨著