keil5工程移植到IAR工程

摘要:
将keil5项目迁移到IAR项目1.软件版本MDK ARMProfessional版本:5.14.0.0 IAR8.1迁移项目:STM32F407ZGT6项目基于准时原子开发板2.开始创建IAR对应项目1.keil5的例程结构如下:2.创建对应的IAR项目:参考链接:https://blog.csdn.net/Q_fighting/article/details/894299623机构

keil5工程移植到IAR工程

一、 软件版本

MDK-ARM Professional  Version: 5.14.0.0

IAR 8.1

移植工程:基于正点原子开发板建立的STM32F407ZGT6工程

二、 开始建立IAR对应工程

1、 keil5例程结构如下:

keil5工程移植到IAR工程第1张

                       

2、 建立对应的IAR工程:

参考链接:https://blog.csdn.net/Q_fighting/article/details/89429962

3、 建立好的对应IAR工程如下:

 keil5工程移植到IAR工程第2张

可以看到,基本按照MDK中的结构建立了对应的IAR工程

三、 修改对应的文件(重点)

1、 修改startup_stm32f40_41xxx.s文件,由于IAR中使用的是自己的启动文件,所以先要找到对应的文件进行代替。在固件库的此路径下:

STM32F4xx_DSP_StdPeriph_Lib_V1.4.0LibrariesCMSISDeviceSTSTM32F4xxSourceTemplatesiar

    2、修改sys.c文件

IAR中的汇编引用于MDK中是不一样的,移植时务必注意,这也就导致了无法同时很好支持两个编译器,只能做不同的版本了。修改后的代码如下:

    #include "sys.h" 

//////////////////////////////////////////////////////////////////////////////////  

//本程序只供学习使用,未经作者许可,不得用于其它任何用途

//ALIENTEK STM32F407开发板

//系统时钟初始化

//包括时钟设置/中断管理/GPIO设置等

//正点原子@ALIENTEK

//技术论坛:www.openedv.com

//创建日期:2014/5/2

//版本:V1.0

//版权所有,盗版必究。

//Copyright(C) 广州市星翼电子科技有限公司 2014-2024

//All rights reserved

//********************************************************************************

//修改说明

//无

////////////////////////////////////////////////////////////////////////////////// 

//THUMB指令不支持汇编内联

//采用如下方法实现执行汇编指令WFI 

#if defined ( __ICCARM__ )  //IAR下使用

void WFI_SET(void)

{

       asm("WFI");           

}

//关闭所有中断(但是不包括fault和NMI中断)

void INTX_DISABLE(void)

{            

    asm("CPSID   I");

    asm("BX      LR");    

}

//开启所有中断

void INTX_ENABLE(void)

{

    asm("CPSIE   I"); 

    asm("BX      LR");    

}

//设置栈顶地址

//addr:栈顶地址

void MSR_MSP(u32 addr)

{

    asm("MSR MSP, r0");    //set Main Stack value

    asm("BX r14");     

}

#else

__asm void WFI_SET(void)

{

       WFI;        

}

//关闭所有中断(但是不包括fault和NMI中断)

__asm void INTX_DISABLE(void)

{

       CPSID   I

       BX      LR    

}

//开启所有中断

__asm void INTX_ENABLE(void)

{

       CPSIE   I

       BX      LR 

}

//设置栈顶地址

//addr:栈顶地址

__asm void MSR_MSP(u32 addr)

{

       MSR MSP, r0                      //set Main Stack value

       BX r14

}

#endif

3、修改usart.c

主要修改部分如下:

////////////////////////////////////////////////////////////////// //加入以下代码,支持printf函数,而不需要选择use MicroLIB  

#if defined ( __ICCARM__ )  //IAR下使用

//重定义fputc函数

int fputc(int ch, FILE *f)

{         

while((USART1->SR&0X40)==0);//循环发送,直到发送完毕    

USART1->DR = (u8) ch;     

 return ch;

}

#else  //非IAR下使用

#pragma import(__use_no_semihosting)

  //标准库需要的支持函数                

struct __FILE {  int handle; };

FILE __stdout;      

//定义_sys_exit()以避免使用半主机模式   

_sys_exit(int x)

{

 x = x;

}

//重定义fputc函数

int fputc(int ch, FILE *f)   

{  

 while((USART1->SR&0X40)==0);//循环发送,直到发送完毕  

 USART1->DR = (u8) ch;     

 return ch;

} #endif

4、 修改相关工程设置

           keil5工程移植到IAR工程第3张

 keil5工程移植到IAR工程第4张

免责声明:文章转载自《keil5工程移植到IAR工程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇关于任意文件下载及上传漏洞CentOS下ssh的配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Javassist/ASM 框架比较

Javassist: Javassist (Java编程助手)使操作Java字节码变得简单。它是一个用于编辑Java字节码的类库;跟其他类似的字节码编辑器不同的是,它使Java程序能够在运行时定义一个新类,并在JVM加载类文件时修改它。 Javassist提供了两种级别的API:源级别和字节码级别。如果用户使用源代码级API,他们可以不需要了解Jav...

在IAR平台建立STC8ASK64S4A12单片机工程

转载:http://www.51hei.com/bbs/forum.php?mod=viewthread&tid=168481&page=1#pid737250  一般我们使用STC单片机都是基于老旧的KEIL v4.0平台,STC官方给的头文件也是只支持keil v4.0平台。我们如果要在其他平台比如IAR上开发STC8ASK64S4A1...

IAR常用快捷键和使用小技巧

1、复制和粘贴几行的部分代码 需求:有时候我们需要复制几行代码的后半部分,不需要复制前半部分。方法:按住Alt键,再用鼠标拖动就可以复制和粘贴后半部分 2、复制一行 复制一行的时候,我们一般是从最后开始往前面复制,在软件中我们可以从上一行的最后开始复制(如下图所示),这样粘贴的时候只需要从放在最后就可以粘贴到下一行了,可能说的比较绕口,大家试一试就知道方便...

REHL8 oracle 19C RAC安装一(环境准备)(更新前)

1.三台虚拟机 虚拟机的配置如下 [root@nymtx asm]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 local...

ASM

在学习汇编之前,我们要介绍一下常用的函数调用约定,以便我们对于一些指令的理解。 函数调用约定 常见的函数调用约定:stdcall , cdecl, fastcall, thiscall, naked call 1, __cdecl(C调用约定.)C/C++ 缺省调用方式 1)压栈顺序: 函数参数从右到左 2)参数栈维护: 由调用函数把参数弹出栈,传送参数的...

企业管理器(OEM)介绍: Grid Control 和 Database Control

Oracle 自10g 以后,企业管理器(Oracle Enterprise Manager:OEM)变成了网页形式。 OEM 分两种:Grid Control(网格控制) 和 Database Control(数据库控制)。  Grid Control 是具有完整功能的全企业Oracle 生态系统管理工具。  Database Control是可以只作...