當前位置:首頁 » 編程軟體 » gcc編譯freertos

gcc編譯freertos

發布時間: 2023-09-02 05:07:37

1. 如何將linux下的程序,移植到freertos中

方法/步驟

  • 嵌入式操作系統有分時操作系統和實時操作系統,如果操作系統能夠使計算機系統及時響應外部事件請求,並能控制所有實時設備和實時任務協調運行,且能在一個規定的時間內完成對事件的處理,怎麼這種系統稱為實時操作系統。

    如果系統必須在極其嚴格的時間內完成的任務叫做硬體的實時操作系統,如果不是很嚴格的話就是軟體的實時操作系統。

2. 嵌入式開發要學哪些課程

嵌入式軟體開發專業主要課程如下:

主幹學科:馬克思主義理論、大學外語、高等數學、大學物理、物理實驗、線性代數、概率論與數理統計、程序設計語言、數據結構、離散數學、操作系統、編譯技術、軟體工程概論、統一建模語言、軟體體系結構、軟體需求、軟體項目管理

該專業除了學習公共基礎課外,還將系統學習離散數學、數據結構、演算法分析、面向對象程序設計、現代操作系統、資料庫原理與實現技術、編譯原理、軟體工程、軟體項目管理、計算機安全等課程,根據學生的興趣還可以選修一些其它選修課。

實踐環節:畢業實習、課程設計、計算機工程實踐、生產實習、畢業設計(論文)。

(2)gcc編譯freertos擴展閱讀:

嵌入式開發技能及就就業方向:

1、可視化編程掌握程序設計方法及可視化技術,精通一種可視化平台及其軟體開發技術。獲取Delphi程序員系列、Java初級或VB開發能手認證。 就業方向:企業、政府、社區、各類學校等可視化編程程序員。

2 、WEB應用程序設計 具有美工基礎和網頁動畫設計能力,掌握互動式網頁程序的設計技術,能進行網站建設和維護。獲取Macromedia多媒體互動設計師或Delphi初級程序員或Delphi快速網路開發工程師認證。 就業方向:企業、政府、社區、各類學校等WEB應用程序員。

3 、軟體測試掌握軟體測試的基本原理、方法和組織管理,精通軟體測試工具。獲取ATA軟體測試工程師或Delphi初級程序員或Java初級程序員認證。 就業方向:企業、政府、社區、各類學校等軟體測試員。

4 、資料庫管理 能應用關系範式進行資料庫設計,精通SQL語言,勝任資料庫伺服器管理與應用工作。獲取Oracle資料庫管理或SQL Server資料庫應用或Windows XP應用認證。 就業方向:企業、政府、社區、各類學校等部門的中、大型資料庫管理員。

5 、圖形圖像製作 精通國際上流行的圖形/圖像製作工具(如CorelDraw、Photoshop、Pagemaker等)。獲取平面設計師相關的認證。 就業方向:廣告製作公司、建築設計公司、包裝裝璜設計公司、居室裝修公司、出版印刷公司。

6 、網路構建技術 熟悉網路結構和組網方式,掌握建網方法,能利用工具分析和排除常見網路故障。獲取Cisco路由配置或華為網路工程或AMP應用工程師認證。 就業方向:企業、政府、社區、各類學校等網路構建工程師。

7 、網路系統管理 掌握網路系統管理的基本知識與應用技能,能進行網路系統的安全設置。獲取Window2000 Server或TurboLinux TLCE或Cisco路由配置專家認證。 就業方向:企業、政府、社區、各類學校等網路系統管理員。

8 、多媒體製作 具有多媒體程序設計與多媒體製作策劃的能力。基本掌握面向對象程序設計與建模、造型設計、場景設計、分鏡頭原理等技能。獲取多媒體設計師相關的認證。 就業方向:多媒體設計與製作公司、動畫美術製作出版公司、廣告製作公司。

9、 計算機辦公應用 精通辦公自動化應用與管理,熟悉伺服器的安裝、管理和維護,基於應用伺服器的相關服務和軟體系統,具備對伺服器的網路安全設置、郵件、網頁發布、FTP、OA、BBS等系統的應用和維護能力。 就業方向:企業、政府、社區、各類學校等系統管理。

3. android native application沒有

為了給Android編譯程序,你需要ARM工具鏈(toolchain). 我發現有兩種主張,分別是使用Android Prebuild toolchain和CodeSourcery
1)Android Prebuild toolchain
Android沒有使用傳統的libc庫.相反,它用了Bionic庫,一個由Google開發的,用在Android移動軟體平台上的輕量級的libc
Bionic被裁剪到只支持 Android系統.請看 六百萬美元的c程序庫

2)CodeSourcery
CodeSourcery是ARM的合作夥伴.專門為ARM處理器開發增強GUN工具鏈的,並提供驗證過的GNU工具鏈.這些工具鏈有很多不同的版本.
對於Android平台,需要 arm-none-linux-gnueabi,而arm-none-eabi是沒有glibc包含在裡面的,主要面向那些編譯完整的native庫和應用(比如FreeRTOS)
譯者注: arm-none-eabi就是用來編譯裸機程序的,請參考 最簡單的ARM裸機程序

我個人的觀點,如果白手起家開始創建一個Android的應用程序,你應該選擇Bionic.
但是如果你選擇從你的PC環境移植一個庫到Android,你應該選擇CodeSourcery
如果你使用到線程或者C++異常,Bionic庫也不能完全支持它們(實際上,它根本就不支持異常)

agcc.pl是Andrew Ross開發的一個腳本,讓你以一種很簡單的方法來自動包含常用的庫,使用Android的ARM工具鏈gcc
某種程度上,他像makefile

第1種方法使用Makefile和Android NDK
AR = arm-linux-androideabi-ar
AS = arm-linux-androideabi-as
CC = arm-linux-androideabi-gcc
CXX = arm-linux-androideabi-g++
LD = arm-linux-androideabi-ld.gold

NDK_KIT = /home/tim/android-ndk-r10b
PLATF_KIT = platforms/android-9

ARM_INC = $(NDK_KIT)/$(PLATF_KIT)/arch-arm/usr/include
ARM_LIB = $(NDK_KIT)/$(PLATF_KIT)/arch-arm/usr/lib

OBJS = hello.o
EXES = hello

hello : hello.o
$(LD) --dynamic-linker=/system/bin/linker -nostdlib \
-rpath-link=$(ARM_LIB) \
$(ARM_LIB)/crtbegin_dynamic.o \
-L$(ARM_LIB) -lc \
-o hello hello.o

hello.o: hello.c
$(CC) -I $(ARM_INC) -c hello.c

clean:
rm -f $(OBJS) $(EXES)

源代碼
#include <stdio.h>

int main(int argc, char* argv[])
{
printf("Hello Android\n");
return 0;
}
設置環境變數 envsetup.sh
export PATH=$PATH:/home/tim/android-ndk-r10b/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin
最後,運行 make 就可以了

關於 -rpath-link選項,請參考 gcc鏈接選項第二種簡單方法,使用shell腳本
#!/bin/sh

OS='linux'
ANDROIDSDK='android-14'

PROGDIR='/home/tim/android-ndk-r10b/'

PROGDIR=`cd $PROGDIR && pwd`
ARMEABIGCC=$PROGDIR/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
ARMEABILIB=$PROGDIR/platforms/$ANDROIDSDK/arch-arm/usr/lib
ARMEABIINC=$PROGDIR/platforms/$ANDROIDSDK/arch-arm/usr/include
ARMEABICRT="$ARMEABILIB/crtbegin_dynamic.o $ARMEABILIB/crtend_android.o"

LINKER=/system/bin/linker

echo "GCC:"$ARMEABIGCC "LIB:"$ARMEABILIB "LINKER":$LINKER "PARAMS:"$@
echo "CRT:"$ARMEABICRT

$ARMEABIGCC $@ -Wl,-rpath-link=$ARMEABILIB,-dynamic-linker=$LINKER -L$ARMEABILIB $ARMEABICRT -I$ARMEABIINC -nostdlib -lc
保存為b
./b hello.c -o hello
就可以了

實際就是運行命令
/home/tim/android-ndk-r10b/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc \
-Wl,-rpath-link=/home/tim/android-ndk-r10b/platforms/android-16/arch-arm/usr/lib,-dynamic-linker=/system/bin/linker \
-L/home/tim/android-ndk-r10b/platforms/android-16/arch-arm/usr/lib \
/home/tim/android-ndk-r10b/platforms/android-16/arch-arm/usr/lib/crtbegin_dynamic.o /home/tim/android-ndk-r10b/platforms/android-16/arch-arm/usr/lib/crtend_android.o \
-I/home/tim/android-ndk-r10b/platforms/android-16/arch-arm/usr/include -nostdlib -lc \
hello.c -o hello

crtbegin_dynamic.o 和 crtend_android.o必須配對使用

第三種方法,用–sysroot也是可以的
#!/bin/sh

NDK=/home/tim/android-ndk-r8e
SYSROOT=$NDK/platforms/android-9/arch-arm
CC="$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=$SYSROOT"
CFLAGS='-march=armv7-a -mfloat-abi=softfp -mfpu=neon'
LDFLAGS='-Wl,--fix-cortex-a8'
$CC $@
http://www.srombauts.fr/2011/03/06/standalone-toolchain/
#include <stdio.h>
#include <android/log.h>

#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "hello-ndk", __VA_ARGS__))

int main(void)
{
printf("Hello from NDKn");
LOGI("Hello from NDK");
return 0;
}
果然厲害,上面這段代碼都可以這樣編譯

./b9 -l log nl.c -o hn

用Makefile也能搞
CC = arm-linux-androideabi-gcc
CFLAGS = -Wall -g
LDFLAGS = -llog
SRC =hello-ndk.c
OBJ =$(SRC:.c=.o)
EXE =hello-ndk

all: $(SRC) $(EXE)

$(EXE): $(OBJ)
$(CC) -o $@ $^ $(LDFLAGS)

%.o: %.c
$(CC) -o $@ -c $< $(CFLAGS)

clean:
rm -f *.o $(EXE)

編譯so庫也是可以,厲害
CC = arm-linux-androideabi-gcc
CFLAGS = -Wall -g
LDFLAGS = -llog -shared
SRC =hello-ndk.c
OBJ =$(SRC:.c=.o)
EXE =libhello-ndk.so

還可以直接運行 gcc
/home/tim/android-ndk-r10/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=/home/tim/android-ndk-r10/platforms/android-3/arch-arm -lc -lm -g main.c -o mm

第4種方法,用ndk-build
創建工程目錄hello,然後在其下創建子目錄jni
然後在jni下創建兩個文件,一個是hello.c,另外一個是Android.mk,內容如下
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:=hello.c
LOCAL_MODULE := helloworld
LOCAL_MODULE_TAGS := optional
include $(BUILD_EXECUTABLE)

其中LOCAL_MODULE_TAGS := optional 這行可以不要

進入到hello目錄下,運行下面的命令
# export NDK_PROJECT_PATH=`pwd`
# ndk-build
Compile thumb : helloworld <= hello.c Executable : helloworld Install : helloworld => libs/armeabi/helloworld

4. 新人剛剛入門FreeRTOS,想問怎麼在電腦上編譯

不需要什麼頭文件,其實freertos和ucosii這種小型系統一樣,本質是一個大的程序,因此需要它本身的所有源代碼就可以運行了,但是你要彈輸出窗口的話直接在你建的主文件裡面include一下iostream.h或者stdio.h這樣的文件就行了。
你把源碼搞到以後,自己建立一個app.c文件,編寫主函數,在裡面創建任務,簡單地輸出一些字元串,調通了自然就明白了。

5. 為什麼稱FreeRTOS為輕量級OS,和Linux相比,有哪些具體的區別

簡單地說,Linux是一套免費使用和自由傳播的類Unix操作系統,它主要用於基於x86系列CPU的計算機上。這個系統是由世界各地的成千上萬的程序員設計和實現的。其目的是建立不受任何商品化軟體的版權制約的、全世界都能自由使用的Unix兼容產品。其最大的缺點就是開源! Mac系統是蘋果機專用系統,是基於Unix內核的圖形化操作系統,一般情況下在普通pc上無法安裝的操作系統。 Microsoft開發的Windows是目前世界上用戶最多、且兼容性最強的操作系統。 Windows、Linux和Mac的編譯程序比較,這些操作系統所使用的文件系統各不相同且差異極大。它們使用的磁碟、目錄、文件和路徑表示方式也完全不同。
Windows、Linux和Mac平台上的桌面(圖形用戶界面)程序、控制台(「DOS外觀」,字元用戶界面)程序或伺服器(或後台)應用程序(無界面)大不同。
Mac OS X操作系統中採用的BSD核心被人們稱作Darwin(達爾文)。它是一個完全獨立的組件。Darwin軟體本身來自於NeXT公司開發的NextStep操作系統的BSD層。NeXT公司是史蒂夫?喬布斯在80年代離開蘋果公司之後創建的。從技術上說,Mac OS X操作系統是以FreeBSD內核為基礎的。OS X 10.3是以FreeBSD 5.x為基礎的。然而,Mac OS X已經超出了基本的BSD代碼,完全是個性化設計的。Mac OS X的關鍵優勢在於其Aqua GUI(圖形用戶界面)。這個圖形界面能夠讓OS X系統像原來的Mac OS X操作系統一樣運行,但是同時具有一個高效率的BSD內核的全部優點和靈活性。
與Windows操作系統和Mac OS X操作系統不同的是,Linux操作系統擁有兩套主要的圖形介面。兩種介面表現為不同的項目如控制面板,將剪切與粘貼操作復雜化,並要求程序員必須知道他們所用的各種成分如對話框或者下拉菜單是以什麼作為基礎的。 盡管三種操作系統各有特點,但一些特點比其他特點更重要一些。微軟之所以成為操作系統之王的原因是,它明白「成本為王」這一道理,它的操作系統能夠在任意數量的PC上使用,因此成本低於Mac OS。Linux沒有受到成本的影響,因此,盡管Mac OS目前是第二大台式機操作系統,但Linux一定能夠取而代之,時間也許就在2年內。但在超越Mac OS之前,Linux需要擁有一個「易於使用而且與Windows沒有差別的」圖形用戶界面,考慮到市場規模,這一點一定能夠實現。 我的電腦裝了windows XP和 Linux Ubuntu10.04雙系統!

6. FreeRTOS 移栽要點怎麼解決

FreeRTOS 的移植主要需要改寫如下三個文件。

1.portmacro.h

2.port.c

3.port.asm

如果採用的C編譯器允許在C代碼中插入匯編,並且支持用C語言寫中斷處理函數。則port.asm 文件的內容是可以物哪合並到port.c 中的。


下面以將 FreeRTOS 移植到FreeScale 68HCS12內核的單片機為例,開發環境採用:CodeWarriorDevelopment Studio V5.9.0


之所以採用FreeScale 68HCS12 作為示例 CPU,是因為我以前寫過一篇將uC/OS-II移植到FreeScale 68HCS12 核單片機的筆記。採用同樣晌皮的CPU,同樣的開發環境,可以方便我們比較兩種不同實時操作系統的移植代碼的異同。另外,FreeScale 68HCS12 相對ARM、MIPS 等構架要簡單的多。移植代碼量相對來說也要小一些,因此也更容易入門。


portmacro.h


portmacro.h 主要包括兩部分內容,第一部分定義了一系列內核代碼中用到的數據類型。FreeRTOS 與 uC/OS-II 一樣,並不直接使用char、int 等這些原生類型,而是將其重新定義為一系列以port開頭的新類型。在uC/OS-II的移植代碼中,通常採用 typedef 來定義新的類型,而FreeRTOS的作者似乎更喜歡用宏定義。下面是相應的代碼片段。

之所以要搞這兩個宏,是為了利用某些C編譯器的擴展功能對任務函數進行更好的優化。CodeWarrior 並不提供相關的功能,所以在這里任務就是普通的函數。

熱點內容
雲免搭建腳本 發布:2024-11-20 07:25:10 瀏覽:310
企圖SQL 發布:2024-11-20 07:24:29 瀏覽:136
冰火ftp 發布:2024-11-20 07:14:35 瀏覽:89
android實時視頻播放 發布:2024-11-20 07:11:18 瀏覽:103
oracle存儲過程數組定義 發布:2024-11-20 07:11:17 瀏覽:844
64的匯編編譯器 發布:2024-11-20 07:05:43 瀏覽:856
保定市後推式存儲貨架哪裡買 發布:2024-11-20 07:03:25 瀏覽:556
家用suv適合什麼配置 發布:2024-11-20 07:01:45 瀏覽:818
java免費課程 發布:2024-11-20 06:54:14 瀏覽:264
手機可以直接升級方舟編譯器嗎 發布:2024-11-20 06:53:35 瀏覽:285