5972|11

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

ads下怎么申请内存空间?? [复制链接]

如题:在ADS1.2下(处理器pxa270)
我想用malloc可以吗
如:
void main()
{
    char strTitle[] = "*************Pxa270Boot*************";
    char *pch = (char *)malloc(strlen(strTile));
    memcpy(pch,strTitle,strlen(strTile));
    printfEx(pch);
}
可是现在不能用memcpy,难道 必须:
void main()
{
    char strTitle[] = "*************Pxa270Boot*************";
    char pch[100] = {0};
    memcpy(pch,strTitle,strlen(strTile));
    printfEx(pch);
}
这样吗?

最新回复

自己调: 1> 调用 __rt_statckheap_init ,建立程序的堆和栈   2> 调用 __rt_lib_init ,初始化程序用到的 C 库,并为 main 传递参数     详情 回复 发表于 2010-5-11 19:34
点赞 关注

回复
举报

60

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
ADS只是个开发环境,不管OS操心的事。

你要先确定一个OS。
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
malloc是可以用的。
可能你初始化堆这里出了问题,编译器不知道堆的基址,所以会异常。
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

4
 
如果没有OS,LZ可以自己写一个内存池,然后构建自己的malloc()free()等等
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 3 楼 lbing7 的回复:

如果没有OS,LZ可以自己写一个内存池,然后构建自己的malloc()free()等等

自己写一个内存池? 可否给两行代码见识一下?
这个malloc确实需要系统支持。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

6
 
没有 OS
就是单片机程序
请问怎么申请内存空间呢??
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

7
 
如果你的RAM足够,malloc是可以用的。
ADS 编译器在编译 C 语言的程序时,如果程序中使用了 main 函数,则编译器将自动添加如下代码,完成初始化堆栈和C库等工作,
      工作流程如下:
      1> 将执行文件中的 RO 段和 RW 段从 load address 复制到 execution address
      2> 初始化 ZI 区域,用 0 来初始化变量
      3> 跳转到 __rt_entry 执行如下 4 个调用
      3.1> 调用 __rt_statckheap_init ,建立程序的堆和栈
      3.2> 调用 __rt_lib_init ,初始化程序用到的 C 库,并为 main 传递参数
      3.3> 调用 main ,即用户程序的入口
      3.4> 调用 exit
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

8
 
schlafenhamster:
    你是说如果使用mian函数,就可以直接用malloc吗?
可惜我没用main......

另外,ads的C++编译器能用吗?
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

9
 
帮你顶

单片机都自己定义和使用RAM

你这个申请的说法是上位机软件才涉及的,hoho,

对于单片机来说,编译器会自动分配RAM,如果要自己分配,可以自己定义,需要的时候,直接调用地址就ok
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 4 楼 hallowwar 的回复:

引用 3 楼 lbing7 的回复:

如果没有OS,LZ可以自己写一个内存池,然后构建自己的malloc()free()等等

自己写一个内存池? 可否给两行代码见识一下?
这个malloc确实需要系统支持。


以前项目里弄过一个简单的定长分配的

连续的定长空间,用一个标志域标识对应的空间是否被分配

申请时,从标志域里查找第一个未分配的空间,置标志,然后把地址返回

释放时,通过地址和首地址的关系得到未分配空间的位置,然后从标志域里去掉相应的标志
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 9 楼 lbing7 的回复:
引用 4 楼 hallowwar 的回复:

引用 3 楼 lbing7 的回复:

如果没有OS,LZ可以自己写一个内存池,然后构建自己的malloc()free()等等

自己写一个内存池? 可否给两行代码见识一下?
这个malloc确实需要系统支持。


以前项目里弄过一个简单的定长分配的

连续的定长空间,用一个标志域标识对应的空间是否被分配

申请时,从标志域……

可以这么做,但是首先要看下编译器的MAP文件,看你要用的地址是不是被编译器拿去用了。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

12
 
自己调:
1> 调用 __rt_statckheap_init ,建立程序的堆和栈  
2> 调用 __rt_lib_init ,初始化程序用到的 C 库,并为 main 传递参数  
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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