关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7567|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
( c( z! M2 s2 {( I# Q1 [- W7 j  @% s/ b
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
2 a) J# H# a% Z, f& w& Z7 w9 a4 j3 \% M5 L, f: h# b
其他程序段。。。。。
' `) i. q) T' h8 [' r* H 9 F  w( c4 y* ~
   free(x_d);
+ O9 p9 @. q# d( T
; o1 d$ h- ]! E. g5 D使用DSP侧单独调试功能,验证动态申请没有问题,
  _& a$ C8 [& R7 N' U+ y) F+ l9 G0 T7 n4 \9 n/ z
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
4 T& g* T, W+ k4 e- [% C

  S: l' r. z* @2 W3 I0 v0 ?. X; N; H5 _  J, v

6 ~* a# R+ b& x0 z7 H! i% J' I; c8 V, _" Z" M

  k* V; O. O- g/ K: ~1 [; Y0 h6 B$ g% }1 i1 r) x2 r
/ W' S2 s0 S$ ~5 x3 ~6 J
. g/ k, n0 Z) O; _- x" |

  X1 Y5 G" W( B( U$ Q! a4 {- d& e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明* J( u, W0 h7 i1 ], y
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
' Z! v  M; Q  h(不过疑惑的是,为何单独DSP仿真就没有问题呢?)0 K7 j: p' ]  i1 ~  T+ u

9 r: h4 k& f8 E: E3 ~. J* C是不是需要在DSP.CFG中进行配置
9 z( I$ @: z* i' |* x/ y9 ~我现在的配置为
& @5 n9 M5 ^! R. X) X: \- X4 q$ J+ N" g! b, Y. V1 ^: U, \
/*
0 u. b; [- w0 b& j2 j+ k *  ======== Operating System Configuration ========5 E7 q8 E' m# c- _- ^4 T0 d& m
*/
6 j  l# b9 k  J9 N- [* u% p' C9 }- R3 k/ w1 ]; f
/* no rts heap */
. f* d0 I8 j# C/ _& n  HProgram.heap = 0;
) V. U" X% s; h6 C; FProgram.argSize = 100;  /* minimum size */- u& S+ U$ d. G0 S: u7 H, ]# ?+ {
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
1 V2 B8 u3 I# n$ P- E3 z: P, R. h
/* create a default heap */
: I/ X4 x) M; r* [$ yvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ `% s, z- r4 O+ J5 O
var heapMemParams = new HeapMem.Params();3 o( l8 u: v7 R9 P# S; [9 \  V
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
- q# `: J! X2 Y- l7 D: k* F: a" k8 a! M0 j' o
var Memory = xdc.useModule('xdc.runtime.Memory');
' ]  S& Q( q, T1 B* ]$ ?Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ V) T2 ~# E9 L# N: W; t/ k9 l5 r& Q: s2 `
/* configure System module */
. T% y1 d2 L1 l" q, S* v- O# gvar SysMin = xdc.useModule('xdc.runtime.SysMin');8 @& t+ C( Y3 U' i+ [/ c9 }
SysMin.bufSize = 0x1000;
! U7 |# p3 K4 E+ b* [SysMin.flushAtExit = false;
' b) P% j% ~" j/ [/ p
7 }( {$ j, b# Z6 Xvar System = xdc.useModule('xdc.runtime.System');
- T. l+ g2 L8 xSystem.SupportProxy = SysMin;' w6 f+ p! v  q  z1 {2 D6 W
' W2 F6 N, Z5 A$ T& ^* u4 ?
/* configure SysBios to use the lower half of Timer 1 */
7 v0 y# f2 n' s: }# pvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');8 M7 D8 w+ r* ^. c  G3 V( n/ t; K
var Clock = xdc.useModule('ti.sysbios.knl.Clock');# V; Z) A5 R, k, O
Timer.timerSettings[1].master = true;* @1 w% P7 l, F8 c/ Z3 \
Timer.defaultHalf = Timer.Half_LOWER;
) y$ l% l. L! ?, R* B. B8 f& zClock.timerId = 1;+ \: Y; L1 @+ x( O. n
3 ]( U5 K7 k% ?' P/ a
/ N( f1 r# j/ D4 F* F# p2 |. c
/*' O# v( L. f) f! o* e$ V5 i
*  ======== Miscellaneous Configuration ========. E2 q, p! ^" m! D4 o
*/! R% R/ [! Z/ U! }4 k# C: A( S

1 T, l3 E5 u' Z0 \: N7 H/* set default diags mask */" ?. E1 Y* _# }  M$ w" ]
var Diags = xdc.useModule('xdc.runtime.Diags');9 k. ^+ g9 I0 A, H
var Defaults = xdc.useModule('xdc.runtime.Defaults');
9 J$ J- B* c$ S7 ]# s/ i) y' W; |# B$ U+ D5 f/ ^
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
$ t/ K. W0 y- N& |Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;1 S! a) z& F: t# A
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
& ?$ O' M3 N0 i0 M1 lDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
8 r* b# l% R- L- l- i* t4 t0 Z2 PDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
$ R0 x6 d% ^/ J( U9 YDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
7 j2 [) k% l% b$ S3 DDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
1 q$ Y9 [3 W% ~Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
& |7 T. @  U7 g, Y; v/ w) `Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
- S0 Y& ?4 Q. f) Y0 ]8 n# NDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
& a3 g9 ]* k* l: g  @! T* ODefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;2 T- U7 g% d- R- B: [0 c
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;) c* \# x3 k! {7 H4 B
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
6 \' S$ h; C! W, MDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
, X# n4 x' z- \6 I" I6 p1 o0 A/ r  K% J+ M. e, Z
/* override diags mask for selected modules */
: ]: z& W$ N: l1 w0 J  }xdc.useModule('xdc.runtime.Main');# m4 d5 B6 L; g* q+ S/ ~
Diags.setMaskMeta(+ v; A; o$ V% M2 E  W. `% x
    "xdc.runtime.Main",
2 S' ?' n& x. v* w6 j1 O$ W    Diags.ENTRY | Diags.EXIT | Diags.INFO,
6 K1 m' N0 X( Q+ R0 y    Diags.RUNTIME_ON
1 p6 i, p/ q/ W  I);
% _$ S& O' D  t! @2 s# l+ \% J1 T( s/ e5 g# N! Y
var Registry = xdc.useModule('xdc.runtime.Registry');$ w3 R4 z# c2 f* T$ @" Z+ u
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;1 x  g1 V, _5 R6 \" ~
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
# k( E7 w( L- W, `Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
4 `; N+ K/ ]  o' W% h/ ORegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
- S/ P9 D0 p4 s' o# W( Y8 C6 v# P) W+ z1 g7 e9 F1 Y
/* create a logger instance */
! n+ Q8 w# U) l$ u# W# M: Avar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');+ K& x2 y* Q4 F
var loggerBufP = new LoggerBuf.Params();. @6 ]2 A- V1 [* {3 s4 e  R6 Z
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
7 t5 ?- V) C* Q. \6 M8 H, d! xloggerBufP.bufType = LoggerBuf.BufType_FIXED;% p( o1 ]1 f* p! q& }
& I( y. v: S+ M0 B; l/ r
var appLogger = LoggerBuf.create(loggerBufP);
' f/ d; P1 ?! ]appLogger.instance.name = "AppLog_Core1";
( T& k- x2 `4 I7 j# O5 O$ CDefaults.common$.logger = appLogger;
( M8 M: K8 Q0 j; r/ n0 |2 ?Memory.defaultHeapSize = 0x8192;   
# {' n  U. P6 s" {8 sIdle.idleFxns[0] = "&LEDStatus";0 Y# C; ]; {- |
Cache.initSize.l2Size = Cache.L2Size_32K;
1 y9 B( P/ A" A; _( s+ m) ^" }% u) n( O' T( v
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
- V. \9 R  ~2 _var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- ?  w/ p/ _4 N  A  u) V5 ~6 W$ {9 y. Wvar heapMemParams = new HeapMem.Params();7 U6 k. s0 _8 {, Z. E8 x+ n4 g: F/ [
heapMemParams.size = 0x4000;
- g- z: m2 H  v& a7 r/ k5 k% Z$ ]2 G6 i3 u/ U( h2 R  [- t
var Memory = xdc.useModule('xdc.runtime.Memory');. @$ h; F' n6 g
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
) r' k7 ^6 [' u
$ W' u1 Y. a/ U' X1 h3 }我大约calloc  每次共计大小为5K*16bits,# P4 x3 \! f4 I5 M1 y
而默认配置才0x4000、需要改大。
) ^: D1 G, S; W9 a2 Z" Z
, N1 J7 }4 u: Z9 i) s/ W( Q9 G
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */" ]4 S' u% w1 d
Program.heap = 0;8 ?- b# h. P+ E
Program.argSize = 100;  /* minimum size */
1 w  ^% O4 m8 p4 _) K9 W4 v: O* dProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-2-5 23:19 , Processed in 0.041589 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表