導航:首頁 > 源碼編譯 > stm4c適合的編譯環境

stm4c適合的編譯環境

發布時間:2023-07-15 05:56:35

❶ 嵌入式是如何做到將某功能植入晶元的

用一片或少數幾片大規模集成電路組成的中央處理器。
這些電路執行控制部件和算術邏輯部件的功能。微處理器與傳統的中央處理器相比,具有體積小,重量輕和容易模塊化等優點。

一) 微處理器的基本組成部分有:寄存器堆、運算器、時序控制電路,以及數據和地址匯流排。微處理器能完成取指令、執行指令,以及與外界存儲器和邏輯部件交換信息等操作,是微型計算機的運算控制部分。它可與存儲器和外圍電路晶元組成微型計算機。但這些專用操作系統都是商業化產品,其高昂的價格使許多低端產品的小公司望而卻步;而且,源代碼封閉性也大大限制了開發者的積極性。

二) 而linux的開放性,使得許多人都認為Linux非常適合多數Intemet設備。Linux操作系統可以支持不同的設備和不同的配置。

Linux對廠商不偏不倚,而且成本極低,因而很快成為用於各種設備的操作系統。嵌入式linux是大勢所趨,其巨大的市場潛力與醞釀的無限商機必然會吸引眾多的廠商進入這一領域。
三) 嵌入式linux操作系統
Linux是一類Unix計算機操作系統的統稱。Linux操作系統的內核的名字也是"Linux".Linux操作系統也是自由軟體和開放源代碼發展中最著名的例子。嚴格來講,Linux這個詞本身只表示Linux內核,但在實際上人們已經習慣了用Linux來形容整個基於Linux內核,並且使用GNU工程各種工具和資料庫的操作系統。

Linux得名於計算機業余愛好者LinuSTorvalds.Linux的程序源碼全部公開,任何人都可以根據自己的需要裁剪內核,以適應自己的系統。

linux移植到ARM920T內核的s3c2410處理器晶元為例,介紹了嵌入式linux內核的裁剪以及移植過程,文中介紹的基本原理與方法技巧也可用於其它晶元。

四) 內核移植過程

1 ,建立交叉編譯環境
在一種計算機環境中運行的編譯程序,能編譯出在另外一種環境下運行的代碼,我們就稱這種編譯器支持交叉編譯。
這個編譯過程就叫交叉編譯。簡單地說,就是在一個平台上生成另一個平台上的可執行代碼。這里需要注意的是所謂平台,實際上包含兩個概念:體系結構(Architecture)、操作系統(Operating System)。

2,同一個體系結構可以運行不同的操作系統;同樣,同一個操作系統也可以在不同的體系結構上運行。舉例來說,我們常說的x86 Linux平台實際上是Intel x86體系結構和Linux for x86操作系統的統稱;而x86 WinNT平台實際上是Intel x86體系結構和Windows NT for x86操作系統的簡稱。

3,交叉編譯交叉編譯呢,簡單地說,就是在一個平台上生成另一個平台上的可執行代碼。這里需要注意的是所謂 平台,實際上包含兩個概念:體系結構(Architecture)、操作系統(Operating System)。同一個體系結構可以運行不同的操作系統;同樣,同一個操作系統也可以在不同的體系結構上運行。

4,交叉編譯器完整的安裝涉及到多個軟體安裝,最重要的有binutils、gcc、glibc三個。其中,binutils主要用於生成一些輔助工具;gcc則用來生成交叉編譯器,主要生成arm-linux-gcc交叉編譯工具;glibc主要是提供用戶程序所使用的一些基本的函數庫。

5,自行搭建交叉編譯環境通常比較復雜,而且很容易出錯。本文使用的是開發板自帶的交叉編譯器,即CROSS一3.3.4.交叉編譯器,該編譯只需將光碟中的arm-linux一3.3.4.bar.bz2用tar ixvf arm-linux一3.3.4.bar.bz2命令解壓到/usr/local/arm下即可。

五) 修改Makefile
Makefile文件Makefile一個工程中的源文件不計數,其按類型、功能、模塊分別放在若干個目錄中,makefile定義了一系列的規則來指定,哪些文件需要先編譯,哪些文件需要後編譯,哪些文件需要重新編譯,甚至於進行更復雜的功能操作,因為makefile就像一個Shell腳本一樣,其中也可以執行操作系統的命令。

修改內核目錄樹根下的Makefile時,可先指明交叉編譯器。設計時,可向Makefile中添加如下內容:
ARCH ?=arm
CROSS_COMPILE?=arm-linux-然後設置PATH環境變數,使其可以找到其交叉編譯工具鏈,然後運行vi~/.bashrc,再添加如下內容:
export PATH=/usr/local/arln-linux一3.4.4/bin:$PATH

六) 設置Flash分區

此處一共要修改3個文件,分別如下:
(1)在arch/arm/machS3C2410/devs.c文件中添加如下內容:
#include
#include
#include
然後再建立Nand flash分區表;同時建立Nand F1ash晶元支持,最後加入Nand FLASH晶元並支持到Nand Flash驅動。

另外,還要修改arch/arm/machs3c2410/devs.C文件中的s3c_device_nand結構體變數,同時添加對dev成員的賦值。

(2)指定啟動時初始化
內核啟動時,可以依據對分區的設置進行初始配置,然後修改arch/am4mach-s3c2410/machsmdk2410.e文件下的smdk2410_devices[],指明初始化時包括在前面所設置的flash分區信息,並添加如下語句:
&s3c_device_nand,

(3)禁止Flash ECC校驗

內核一般都是通過UBOOT寫到Nand Flash的。UBOOT則通過軟體ECC演算法來產生ECC校驗碼,這與內核校驗的ECC碼不一樣,內核中的ECC碼是由S3C2410中Nand Flash控制器產生的。所以,這里選擇禁止內核ECC校驗。

修改drivers/mtd/nand/s3c2410.C 下的s3c2410_nand_init_chip ()函數,可在該函數體最後加上如下一條語句:
chip->eccmode=NAND_ECC_NONE;

❷ stm32cubeide設置文件編譯順序

對一個加法函數的庫項目的建立和編譯整個過程如下:
1、這里就要選擇ARMMCU的GCC編譯器了。
2、選擇和MCU型號的綁定關系了,畢竟編譯的庫是給MCU項目所用,這里選擇STM32F401CCU6的晶元。
2、添加源文件編寫加法函數,編寫加法函數進行編譯。
3、編譯成功,在工程目錄里就可以找到編譯好的庫文件了,庫文件的調用,配置一個對應MCU的基本工程,建立一個STM32F401CCU6的工程,並配置USART2作為串口輸出。
4、保存後產生基本工程代碼,重載printf函數方便列印輸出,參考STM32UART串口printf函數應用及浮點列印代碼空間節省。
5、在工程的core/inc/目錄新建一個和庫文件同名的頭文件,將庫文件libLib_C_Demo.a放置到工程的源文件目錄core/src/,則在工程目錄樹立可以看到。
6、因為編譯器默認只是識別C語言源代碼(.c文件),還需要進行庫文件的指定,這樣編譯器才會對二進制庫文件(.a)進行識別。
7、先打開屬性菜單,進行庫文件所在目錄和庫文件名的添加指定,注意庫文件名前需要加冒號,ApplyandClose後,就可以在工程文件里對庫文件進行調用,首先要引入庫文件的頭文件。
8、在while循環里進行列印輸出,列印數據為庫函數調用的加法和,編譯下載到STM32F401CCU6晶元後運行,通過串口工具觀察列印結果,輸出列印結果正確,庫函數正常調用成功。

❸ 怎麼在ubuntu下開發stm32

環境:

ubuntu 13.10

stm32f103zet6

一、STM 32 GCC 安裝

stm32 屬於arm cortex-m系列thumb指令集,所以給arm用的arm-none-eabi就可以了,首先是下載

下載地址:

https://launchpad.net/gcc-arm-embedded/+download

下載其中的gcc-arm-none-eabi-version-linux.tar.bz2

解壓到目錄會產生gcc-arm-none-eabi的文件夾

把該編譯器添加到用戶的環境中:

❹ Linux下怎樣搭建stm32開發環境

網上零碎的東西太多,不利於入門者。建議買個靠譜點的開發板(閑魚淘一個劃算點),配套的資料有教你怎麼從0開始開發,還有常式,跟著這些常式從頭到尾走一遍就差不多了。需要資料發私信給我也可以發點給你。順便說下STM32的IDE一般用Keil或者IAR,但是經常查Dao版,公司可以用基於eclipse開源開發環境,熟悉VC的也可用Visual Studio+GDB插件來開發。

❺ 准備使用stm8,編譯器用IAR還是COSMIC好

可能用COSMIC+STVD比較方便點,因為COSMIC現在完全免費,STVD是ST自己的自然也是免費。 相關資料也還比較豐富。
當然,你要用IAR也行。看你喜好。

❻ stm32 用什麼編譯器好

應該IAR好很多。
同樣的ucosII本家的移植代碼Micrium-ST-uCOS-II-LCD-STM32,
用裡面自帶的keil工程和IAR工程編譯,
都設置為最大尺寸優化,
keil的編譯結果:
Program Size: Code=27562 RO-data=4870 RW-data=196 ZI-data=9240
FLASF佔用:Code+RO-data+RW-data = 27562 +4870 +196 = 32628位元組
RAM佔用:RW-data+ZI-data = 196 + 9240 = 9436位元組
IAR的編譯結果:
13 730 bytes of readonly code memory
5 618 bytes of readonly data memory
8 636 bytes of readwrite data memory
FLASF佔用:13 730 + 5 618 = 19348位元組
RAM佔用:8 636位元組
KEIL比IAR佔用FLASH多:32628- 19348 = 13280位元組

❼ stm32中ad9959的使用常式。編譯環境最好是keil。

/************************************************************
Copyright(C),1995-2013,***.Co.,Ltd.
文件名:ad9959.c
作者:Sun版本:1日期:2013-09-04
模塊描述:
版本信息:
主要函數及其功能:
01.staticuint16_tWrite_DDS_Byte(unsignedcharaByte);//SPI寫操作
02.voidInitAd9959(void);//初始化AD9959,即其工作頻率以及各個通道的輸出頻率
03.voidwrite_CSR(charw_data);//通道的使能以及串列模式的設置
04.voidwrite_FR1(charw_data1,charw_data2,charw_data3);//設置AD9959的工作頻率,需根據外部晶振,及倍頻來設置
05.voidwrite_FR2(charw_data1,charw_data2);//寫FR2寄存器
06.voidwrite_CFR(charw_data1,charw_data2,charw_data3);//寫CFR寄存器
07.voidwrite_CFTW0(longF_word);//頻率調諧字
08.voidwrite_CPW0(intP_word);//寫CPW0寄存器
09.voidwrite_ACR(longA_word);//寫ACR寄存器
10.voidwrite_LSR(charrising,charfalling);//寫LSR寄存器
11.voidwrite_RDW(longrising);//寫RDW寄存器
12.voidwrite_FDW(longfalling);//寫FDW寄存器
13.voidwrite_CTWn(charn,longw_data);//寫CTWn寄存器
14.voidset_frequency(u32f);//寫頻率控制字
15.voidSetAd(floatfre_mhz,intset);//設置通道輸出頻率
歷史修改記錄://
<author><time><version><desc>

***********************************************************/
#include"ad9959.h"
#include"usart.h"
#definePLL_DIV10//倍頻系數
#definePLL16//外部晶振頻率
#definesystemp_frequency(PLL*1000000*PLL_DIV)//AD9959系統頻率

/*************************************************
函數名:staticuint16_tWrite_DDS_Byte(unsignedcharaByte);
功能:SPI寫操作
調用函數:無
被調用函數:
voidwrite_CSR(charw_data);
voidwrite_FR1(charw_data1,charw_data2,charw_data3);
voidwrite_FR2(charw_data1,charw_data2);
voidwrite_CFR(charw_data1,charw_data2,charw_data3);
voidwrite_CFTW0(longF_word);
voidwrite_CPW0(intP_word);
voidwrite_ACR(longA_word);
voidwrite_LSR(charrising,charfalling);
voidwrite_RDW(longrising);
voidwrite_FDW(longfalling);
voidwrite_CTWn(charn,longw_data);
輸入:aByte:SPI要寫的位元組
輸出:無
返回值:SPI讀到的位元組
*************************************************/
staticuint16_tWrite_DDS_Byte(unsignedcharaByte)
{
/**/
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);
SPI_I2S_SendData(SPI1,aByte);
/*Waittoreceiveabyte*/
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET);

/**/
returnSPI_I2S_ReceiveData(SPI1);
}

/*************************************************
函數名:voidInitAd9959(void);
功能:初始化AD9959用到的GPIO,及設置其工作頻率和通道輸出頻率
調用函數:
write_CSR();//設置通道啟用
write_FR1();//設置主頻
set_frequency();//設置通道輸出頻率
被調用函數:
voidBspInit(void);/初始化所有硬體函數
輸入:無
輸出:無
返回值:無
*************************************************/
voidInitAd9959(void)
{
inti;
GPIO_InitTypeDefGPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_Init(GPIOC,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_SetBits(GPIOC,GPIO_Pin_4);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
GPIO_Init(GPIOA,&GPIO_InitStructure);

}

/*************************************************
函數名:voidwrite_CSR(charw_data);
功能:通道的使能以及串列模式的設置
調用函數:
Write_DDS_Byte();//SPI寫函數
被調用函數:
voidInitAd9959(void)//初始化AD9959用到的GPIO,及設置其工作頻率和通道輸出頻率
voidSetAd(floatfre_mhz,intset)//
輸入:charw_data:要寫的位元組
輸出:無
返回值:無
*************************************************/
voidwrite_CSR(charw_data)
{
CLR_DDSCS;
Write_DDS_Byte(0x00);//writeaddress0.CSR'saddressis0.
Write_DDS_Byte(w_data);
SET_DDSCS;
}

/*************************************************
函數名:voidwrite_FR1(charw_data1,charw_data2,charw_data3);
功能:設置AD9959的工作頻率,需根據外部晶振,及倍頻來設置
調用函數:
Write_DDS_Byte();//SPI寫函數
被調用函數:
voidInitAd9959(void)//初始化AD9959用到的GPIO,及設置其工作頻率和通道輸出頻率
輸入:charw_data1,charw_data2,charw_data3:要寫的位元組,從高到低
輸出:無
返回值:無
*************************************************/
voidwrite_FR1(charw_data1,charw_data2,charw_data3)
{
CLR_DDSCS;
Write_DDS_Byte(0x01);//writeaddress1.FR1'saddressis0x01
Write_DDS_Byte(w_data1);
Write_DDS_Byte(w_data2);
Write_DDS_Byte(w_data3);
SET_DDSCS;
}

/*************************************************
函數名:voidwrite_FR2(charw_data1,charw_data2);
功能:用於控制各種功能、特性和模式
調用函數:
Write_DDS_Byte();//SPI寫函數
被調用函數:無
輸入:charw_data1,charw_data2:要寫的位元組
輸出:無
返回值:無
*************************************************/
voidwrite_FR2(charw_data1,charw_data2)
{
CLR_DDSCS;
Write_DDS_Byte(0x02);//writeaddress2
Write_DDS_Byte(w_data1);
Write_DDS_Byte(w_data2);
SET_DDSCS;
}

/*************************************************
函數名:voidwrite_CFR(charw_data1,charw_data2,charw_data3);
功能:通道功能寄存器
調用函數:
Write_DDS_Byte();//SPI寫函數
被調用函數:無
輸入:charw_data1,charw_data2,charw_data3:要寫的位元組,從高到低
輸出:無
返回值:無
*************************************************/
voidwrite_CFR(charw_data1,charw_data2,charw_data3)
{
CLR_DDSCS;
Write_DDS_Byte(0x03);
Write_DDS_Byte(w_data1);
Write_DDS_Byte(w_data2);
Write_DDS_Byte(w_data3);
SET_DDSCS;
}

/*************************************************
函數名:voidwrite_CFR(charw_data1,charw_data2,charw_data3);
功能:頻率調諧字
調用函數:
Write_DDS_Byte();//SPI寫函數
被調用函數:
voidset_frequency(u32f);//設置頻率
輸入:longF_word:要寫的位元組
輸出:無
返回值:無
*************************************************/
voidwrite_CFTW0(longF_word)//ChannelFrequencyTuningWord(CTW0)
{
CLR_DDSCS;
Write_DDS_Byte(0x04);
Write_DDS_Byte(((unsignedchar*)(&F_word))[3]);
Write_DDS_Byte(((unsignedchar*)(&F_word))[2]);
Write_DDS_Byte(((unsignedchar*)(&F_word))[1]);
Write_DDS_Byte(((unsignedchar*)(&F_word))[0]);
SET_DDSCS;
}

/*************************************************
函數名:voidwrite_CPW0(intP_word);
功能:相位偏移字
調用函數:
Write_DDS_Byte();//SPI寫函數
被調用函數:無
輸入:intP_word:要寫的位元組
輸出:無
輸出:無
返回值:無
*************************************************/
voidwrite_CPW0(intP_word)//ChannelPhase1OffsetWord(CPW0)(0x05)
{
CLR_DDSCS;
Write_DDS_Byte(0x05);
Write_DDS_Byte(((unsignedchar*)(&P_word))[1]&0x3F);
Write_DDS_Byte((((unsignedchar*)(&P_word))[0]));
SET_DDSCS;
}

/*************************************************
函數名:voidwrite_ACR(longA_word);
功能:幅度控制寄存器
調用函數:
Write_DDS_Byte();//SPI寫函數
被調用函數:無
輸入:longA_word:要寫的位元組
輸出:無
返回值:無
*************************************************/
voidwrite_ACR(longA_word)
{
CLR_DDSCS;
Write_DDS_Byte(0x06);
Write_DDS_Byte(((unsignedchar*)(&A_word))[2]);
Write_DDS_Byte(((unsignedchar*)(&A_word))[1]);
Write_DDS_Byte(((unsignedchar*)(&A_word))[0]);
SET_DDSCS;
}

/*************************************************
函數名:voidwrite_LSR(charrising,charfalling);
功能:線性斜率掃描
調用函數:
Write_DDS_Byte();//SPI寫函數
被調用函數:無
輸入:charrising,charfalling:要寫的位元組
輸出:無
返回值:無
*************************************************/
voidwrite_LSR(charrising,charfalling)
{
CLR_DDSCS;
Write_DDS_Byte(0x07);
Write_DDS_Byte(rising);
Write_DDS_Byte(falling);
SET_DDSCS;
}

/*************************************************
函數名:voidwrite_RDW(longrising);
功能:LSRRisingDeltaWord(RDW)
調用函數:
Write_DDS_Byte();//SPI寫函數
被調用函數:無
輸入:longrising:要寫的位元組
輸出:無
返回值:無
*************************************************/
voidwrite_RDW(longrising)
{
CLR_DDSCS;
Write_DDS_Byte(0x08);
Write_DDS_Byte(((unsignedchar*)(&rising))[3]);
Write_DDS_Byte(((unsignedchar*)(&rising))[2]);
Write_DDS_Byte(((unsignedchar*)(&rising))[1]);
Write_DDS_Byte(((unsignedchar*)(&rising))[0]);
SET_DDSCS;
}

/*************************************************
函數名:voidwrite_FDW(longfalling);
功能:LSRFallingDeltaWord
調用函數:
Write_DDS_Byte();//SPI寫函數
被調用函數:無
輸入:longfalling:要寫的位元組
輸出:無
返回值:無
*************************************************/
voidwrite_FDW(longfalling)
{
CLR_DDSCS;
Write_DDS_Byte(0x09);
Write_DDS_Byte(((unsignedchar*)(&falling))[3]);
Write_DDS_Byte(((unsignedchar*)(&falling))[2]);
Write_DDS_Byte(((unsignedchar*)(&falling))[1]);
Write_DDS_Byte(((unsignedchar*)(&falling))[0]);
SET_DDSCS;
}

/*************************************************
函數名:voidwrite_CTWn(charn,longw_data);
功能:
調用函數:
Write_DDS_Byte();//SPI寫函數
被調用函數:無
輸入:charn,longw_data:要寫的位元組
輸出:無
返回值:無
*************************************************/
voidwrite_CTWn(charn,longw_data)
{
CLR_DDSCS;
Write_DDS_Byte(n+0x09);//CTWn'saddressisn+0x09.n>=1andn<=15.
Write_DDS_Byte(((unsignedchar*)(&w_data))[3]);
Write_DDS_Byte(((unsignedchar*)(&w_data))[2]);
Write_DDS_Byte(((unsignedchar*)(&w_data))[1]);
Write_DDS_Byte(((unsignedchar*)(&w_data))[0]);
SET_DDSCS;
}

/*************************************************
函數名:voidset_frequency(u32f);
功能:設置頻率調諧字
調用函數:
write_CFTW0();//寫頻率調諧字
被調用函數:
voidInitAd9959(void);//初始化AD9959用到的GPIO,及設置其工作頻率和通道輸出頻率
voidSetAd(floatfre_mhz,intset);//設置頻率調諧字
輸入:u32f:通道輸出頻率
輸出:無
返回值:無
*************************************************/
voidset_frequency(u32f)
{
longtemp;
temp=(unsignedlongint)f*(0xFFFFFFFF*1.0/(float)systemp_frequency+1.0/systemp_frequency);
write_CFTW0(temp);
}

/*************************************************
函數名:voidSetAd(floatfre_mhz,intset);
功能:設置通道輸出頻率
調用函數:
write_CSR();//通道的使能以及串列模式的設置
set_frequency();//設置頻率調諧字
被調用函數:無
輸入:floatfre_mhz,intset:通道號及對應頻率
輸出:無
返回值:無
*************************************************/
voidSetAd(intFreKhz)
{
inti=0xff;
//通道2比通道3多50khz
write_CSR(0x80);//通道3
set_frequency((u32)(FreKhz*1000));
write_CSR(0x40);//通道2
set_frequency((u32)((FreKhz+50)*1000));

SET_IOUPDATE;
while(i--);
CLR_IOUPDATE;
}

延時沒有很精確,僅做參考。

閱讀全文

與stm4c適合的編譯環境相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:962
phpffmpeg轉碼 瀏覽:671
長沙好玩的解壓項目 瀏覽:144
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:736
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:484
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:381
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:349
風翼app為什麼進不去了 瀏覽:778
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:150
伊克塞爾文檔怎麼進行加密 瀏覽:892
app轉賬是什麼 瀏覽:163