打印

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

[复制链接]
7499|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hotpower|  楼主 | 2008-1-14 11:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 杂谈于雁塔菜地中
沙发
phoenixmy| | 2008-1-14 11:31 | 只看该作者

先回再仔细看


好贴要仔细看~~~~~~~~~~~~

使用特权

评论回复
板凳
phoenixmy| | 2008-1-14 11:32 | 只看该作者

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

使用特权

评论回复
地板
hotpower|  楼主 | 2008-1-14 11:38 | 只看该作者

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

无奈重新开贴~~~不过即使不普及也应该重开贴~~~
相关链接:https://bbs.21ic.com/club/bbs/list.asp?boardid=49&t=2829079

使用特权

评论回复
5
香水城| | 2008-1-14 11:55 | 只看该作者

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

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

听说菜农雪天还要下地干活,送条裤子吧~~~~~ 

使用特权

评论回复
6
hq_y| | 2008-1-14 12:13 | 只看该作者

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

使用特权

评论回复
7
hotpower|  楼主 | 2008-1-14 12:16 | 只看该作者

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

使用特权

评论回复
8
老狼| | 2008-1-14 13:21 | 只看该作者

我也想试一下!

还没用C++做过ARM 的开发!

使用特权

评论回复
9
taoyubai| | 2008-1-14 14:00 | 只看该作者

你占个位看看

使用特权

评论回复
10
nongfuxu| | 2008-1-27 11:59 | 只看该作者

学习中!!!

使用特权

评论回复
11
sunke9| | 2008-5-30 20:28 | 只看该作者

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

使用特权

评论回复
12
zcl_l| | 2008-6-3 21:50 | 只看该作者

不错

学习中

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1460

主题

21619

帖子

506

粉丝