keil中的 Use MicroLIB
来源:互联网 发布:office2013 mac破解版 编辑:程序博客网 时间:2024/04/27 19:19
首先说明下什么是MicroLIB,还是给大家看英文吧,当阅读学习了。
MicroLib is a highly-optimized library for ARM-based embedded applications written in C. When compared to the standard C library included with the ARM Compiler toolchain, MicroLib provides significant code size advantages required for many embedded systems.
更详细的解释请直接去引用的网站吧:
http://www.keil.com/arm/microlib.asp
使用它后问题出现了,给函数中的数组赋值,结果不相关的全局变量居然也被赋值了。取出地址查看,原来重叠了,keil居然会出这种大bug吗,而且已经是4.71的版本了。
之后实验了两个地方,发现问题原因了。
第一,增加那个*.s的文件里面的Stack size,足够大到可以容纳所有全局变量、函数入口、函数内部变量,这样就可以解决以上问题。
第二,去掉那个 Use MicroLIB,也可以解决问题。
问题原因,含部分猜测:Use MicroLIB把函数内部的数组是放在Stack中的,这个Stack是循环使用的。而标准C库,估计采用了某些其它算法,把函数内部的大数组,放到了其它位置。
给出一个出错的例子,有时候,我们总是喜欢把错误推给别人,其实大部分都是自己的。
定义Stack = 0x400
Use MicroLIB 打钩
写下面函数实验,stm32的一些变量库
u8 test1[1024];
void TestFunc1(void)
{
u8 test3[1024];
u16 i;
for(i=0;i<1024;i++)
{
test3[i] = 0x55; //这个地方赋值,test1会跟着一起变,有趣吧
}
}
void TestFunc(void)
{
u8 test2[1014];
test2[0] = 1;
TestFunc1();
}
int main(void)
{
memset(test1, 0xaa, 1024);
TestFunc();
}
本文结束elecsea(C),引用注明出处。
- keil中的 Use MicroLIB
- keil 中 Use MicroLIB
- keil应用小贴士:microLIB[Z] Use MicroLIB
- Keil中Use MicroLIB的作用
- Keil中Use MicroLIB的作用
- 关于Keil MDK 中 use microlib 设置项解析
- keil应用小贴士:Use MicroLIB是干什么的
- keil应用小贴士:microLIB
- keil 用MicroLIB
- MDK中 use microlib
- Use MicroLIB is what?
- Use MicroLIB是干什么的
- Keil MDK 中MicroLib库的使用
- 如何在KEIL中使用MicroLIB
- 如何在KEIL中使用MicroLIB
- Keil中使用MicroLib,以及malloc
- 如何在KEIL中使用MicroLIB
- STM32 use microlib是干什么的
- java序列化讲解
- 小米2013年度发布会直播
- 理解extern char s[100]与extern char *s
- Linux常用命令集合
- php调用linux命令函数
- keil中的 Use MicroLIB
- sqlite
- sql server开启sa用户
- hadoop和hbase节点添加和单独重启
- Hibernate4 二级缓存很浅的一些配置和认识
- (android 基础知识) Parcel的解读 .
- 解决VS2010菜单自动隐藏效果
- java设计模式总结
- jQuery EasyUI API 中文文档 - Tabs标签页/选项卡