9231|11

65

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

FirmwareLib的应用及C++工程建立过程杂谈 [复制链接]

Firmware Lib的应用及C++工程建立过程杂谈

Firmware Lib下在地址:
http://www.st.com/stonline/products/support/micro/files/um0427.zip

Firmware Lib用户手册下载地址:
http://www.st.com/stonline/products/literature/um/13475.pdf

IAR环境Firmware Lib的目录在
$TOOLKIT_DIR$armexamplesSTSTM32F10xFWLiblibrary中

由于版本的问题,一般应用都重建一个
$PROJ_DIR$....library中

在$TOOLKIT_DIR$armexamplesSTSTM32F10xFWLib中有3个关键的文件夹


1.$TOOLKIT_DIR$armexamplesSTSTM32F10xFWLiblibrary
里面有2个重要目录
inc
src

2.$TOOLKIT_DIR$armexamplesSTSTM32F10xFWLibproject
我们新建工程可以用此当作模板直接拷贝修改即可

3.$TOOLKIT_DIR$armexamplesSTSTM32F10xFWLibexamples
内部存放着我们需要的一些常用例程
它一般含有
main.c 用户主程序,它最终是在$PROJ_DIR$....project中
readme.txt
stm32f10x_conf.h 模块的配置文件
stm32f10x_it.h
stm32f10x_it.c   用户中断服务程序填加文件
可以将此复制到我们自己的$PROJ_DIR$....project中

用户的工程应该在$PROJ_DIR$....projectEWARM下建立
它重要含有
cortexm3_macro.s 启动文件
stm32f10x_vector.c 用户向量文件

lnkarm_flash.xcl
注意它在菜单Option->linker->config->Linker command file里要填入
$PROJ_DIR$lnkarm_flash.xcl
这样即可在出现在工程菜单Workspace->BOOT_FLASH中的Output里
注意:
要在Option->C/C++ Compiler->Defined Symbols里填写VECT_TAB_FLASH

lnkarm_ram.xcl
注意它在Option->linker->config->Linker command file里要填入
$PROJ_DIR$lnkarm_ram.xcl
这样即可在出现在Workspace->BOOT_RAM中的Output里
注意:
要在Option->C/C++ Compiler->Defined Symbols里填写VECT_TAB_RAM

BOOT_FLASH,BOOT_RAM可在菜单Project->Edit Configurations里添加和删除
这样即可运行在FLASH或RAM环境中

工程选项的主要配置问题
进入此菜单的方法有3个
1. Alt+F7
2. 在菜单的Project下选择Option
3。在Workspace右键选择Option

临时填加stm32f10x_conf.h内没有配置的选项
在Option->C/C++ Compiler->Defined Symbols里
填写_ADC1 等同在stm32f10x_conf.h里#define _ADC1

填写_GPIOA 等同在stm32f10x_conf.h里#define _GPIOA

关于Hex或Bin文件的生成输出问题

1.在选项栏里直接填入需要的文件
在Option->Linker->Output->Output file下选择Override default
填入:文件名.文件类型
例如: test.hex或test.bin

这种方法虽然很方便,但是可能随手点击Override default使
文本框内的文字变为:工程名.d79

2.在xcl文件里填入所需的文件类型
在BOOT_RAM下要填入lnkarm_ram.xcl文件中
在BOOT_FLASH下要填入lnkarm_flash.xcl文件中

可以直接在其文件的尾部填入
-Ointel-extended,(CODE)=.hex//输出hex文件

-Oraw-binary,(CODE)=.bin//输出bin文件
注意只能选择其一!!!

这种方法虽然"返古",但却是"永垂不朽"的~~~

用户指定固件库的配置问题
1.头文件引用声明
在Option->C/C++ Compiler->Preprocessor->Additional include directories
填入
$PROJ_DIR$..
$PROJ_DIR$....libraryinc

2.库文件引用声明
在Option->Linker->Config Search paths
填入
$TOOLKIT_DIR$LIB
$PROJ_DIR$....librarysrc


关于C++的配置问题

1.选择C++编译器
在Option->C/C++ Compiler->Language->Language下
选择
Embedded C++

Extended Embedded C++

在Option->C/C++ Compiler->Language->Language conformance下选择
Allow IAR exensions

这样即可支持__low_level_init(),从而可是全局变量复位后不初始化为0
例如:
extern "C" __root char __low_level_init (void)
{
  stm32_Init();//抢在类析构函数和main()前初始化
  return 0;//0-变量不初始化,1-变量初始化
}
SystemObj System;
LcdObj    Lcd;

int main()
{
  return 0;
}

再谈C++中变量不初始化为0的问题
在IAR中,本身就有__no_init修饰符可以阻止对变量的初始化
但是在C++中,对整个类使用__no_init修饰符将造成类不能析构
即分配类后将不能自动调用类的析构函数即类的初始化函数。
再者工控中需要很多需要初始化不变的变量用于现场参数的记忆。
而C++的类成员变量也需要此功能。

故干脆重载__low_level_init()使任何变量不初始化。
注意__low_level_init()返回0即可达到此目的!!!切记!!!
再注意__low_level_init()是在类析构函数和main()前运行的。
这样就可提前进行些系统的初始化,如__low_level_init()内的stm32_Init();

类分配顺序问题
在C++中,分配顺序顺序极为重要!!!
因为它是在__low_level_init()后而在main()前运行的!!!
由于硬件的关系,所以运行及分配的顺序很重要

申请反了可能带来意想不到的后果!!!!

哈哈,大雪封山,先杂谈到这里,俺要继续种地了~~~

菜农 HotPower@126.com  2008.1.14 10:58 杂谈于雁塔菜地中
此帖出自stm32/stm8论坛

最新回复

                                 学习中   详情 回复 发表于 2008-6-3 21:50
点赞 关注
 

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

先回再仔细看


好贴要仔细看~~~~~~~~~~~~
此帖出自stm32/stm8论坛
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

你咋没给个例子给大家看看?

                                  
此帖出自stm32/stm8论坛
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

4
 

倒塌了~~~好好的作业让你做C++普及教育了~~~

无奈重新开贴~~~不过即使不普及也应该重开贴~~~
相关链接:https://bbs.eeworld.com.cn/club/bbs/list.asp?boardid=49&t=2829079
此帖出自stm32/stm8论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

5
 

这个小姑娘也够霸道的:听说你看帖从不回帖,小心偶把你

做个记号,回头再研究吧~~~~ 

听说菜农雪天还要下地干活,送条裤子吧~~~~~ 
此帖出自stm32/stm8论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

6
 

先做个记号,等需要使用到stm32的时候再来学习!

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 

哈哈~~~看来都害怕这个小姑娘~~~

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

8
 

我也想试一下!

                                 还没用C++做过ARM 的开发!
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

9
 

你占个位看看

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

10
 

学习中!!!

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

11
 

我仔细看了,可是我的项目还是编译失败

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

110

帖子

0

TA的资源

一粒金砂(初级)

12
 

不错

                                 学习中
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表