导航:首页 > 源码编译 > 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