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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
# A! E+ u2 i, k0 D
, ^; x* k5 T* @' j    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2565 T# P! x" W' ?4 J9 x) b

, n: }6 }# {+ e$ ^$ w. a3 F& [其他程序段。。。。。
$ \* B- E# b4 c
" a2 ?  K. Q7 X9 l3 \   free(x_d);5 f- f! X  A, f, y& I3 ]9 p5 r( V
2 @- L) T& Q2 ?4 A! \$ Q& @- n
使用DSP侧单独调试功能,验证动态申请没有问题,
! Y2 w$ }; T- }; l" ?6 W( m* I$ V4 o6 [/ }& @# E
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。: l% E- q9 N2 M% W' C+ o9 S$ T) W
2 e; b+ Y1 o( |8 ?0 f/ k  p

7 m) K- H" T9 Z# j2 f# U* {6 W- ~: N( |) b0 p& o2 o) E

, M( c1 {$ {1 V% {$ J- T: v1 Q9 L4 j* F
. \* h/ v7 z- `1 A( O( d

( ^- P- }( u5 O1 P) z8 F* W3 f4 L. h% q. [& ^9 d
7 B+ k8 r  F% a5 D* }

. c* N' N( o8 n* W* x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
0 F' i% @: |5 ~: u. ^我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下' ^0 b' b- g7 h- Z
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 ^' Y* o5 u/ ^+ ?& o/ H
$ l2 x3 m5 I! G) o6 x
是不是需要在DSP.CFG中进行配置
) {2 y9 G: G, H3 R% M* E我现在的配置为7 X; O5 b; H" o
# I& w$ U  N5 m7 s6 B0 i
/*
7 T3 S" p# @7 D7 c *  ======== Operating System Configuration ========
7 J* ]/ _! g7 h+ h# n */
4 f0 H, }! P2 v8 _( v/ u; d- a* n; K
& \5 X4 K* |$ q# g9 }/* no rts heap */
2 o$ A: u6 S& ]7 K2 DProgram.heap = 0;
7 _% J/ h! s+ m. XProgram.argSize = 100;  /* minimum size */6 d. v# u# r  @0 A* v
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
- d9 r- @% h. p, q2 G9 \
7 j. ?% _5 i( ~* P1 ~/* create a default heap */' C+ b; C, \  ^5 y) g* e+ O* e, k
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 b! Z) g4 s% z' u
var heapMemParams = new HeapMem.Params();
0 f# T: h* K/ }9 fheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
( p1 a; E% c- K" S7 V% y1 p& {: l: V! E
var Memory = xdc.useModule('xdc.runtime.Memory');
5 y" J: f' v0 o: f* o/ EMemory.defaultHeapInstance = HeapMem.create(heapMemParams);+ C1 K% {0 d8 ]$ q7 R3 B5 U+ b8 Y/ P
9 v' G+ u% L( Y* C) R) h
/* configure System module */+ _" k5 C6 o- {) r+ b6 U
var SysMin = xdc.useModule('xdc.runtime.SysMin');" Q! S7 j* L& ~8 \% p# ]: f
SysMin.bufSize = 0x1000;
* N3 F6 U8 S) m) `$ I$ K2 wSysMin.flushAtExit = false;
3 v9 Q2 w: V5 f: D3 h& y+ _) \5 m0 T, W7 k9 ^9 T9 U
var System = xdc.useModule('xdc.runtime.System');+ U. X9 x+ Z' K/ ^) W0 e1 b: j/ |
System.SupportProxy = SysMin;
* ?# Z4 U( l) F7 s5 K6 {( D
2 K6 a) T% t; k% q6 G/* configure SysBios to use the lower half of Timer 1 */+ f- N, M% W( |3 c; \
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
5 r, D" r$ O; i3 Bvar Clock = xdc.useModule('ti.sysbios.knl.Clock');, o: x; H. t: u7 d6 c- N4 l
Timer.timerSettings[1].master = true;. \; z; @/ J( U( Y* z
Timer.defaultHalf = Timer.Half_LOWER;
; i: H+ p" @) l  q6 m: c. R2 dClock.timerId = 1;
6 v; s( j' j9 v, M$ x% q2 b, O, ?3 H7 q/ s+ R

0 h2 L/ [, U, R/*
! K7 v% n3 V, U" @+ B3 n& y *  ======== Miscellaneous Configuration ========
/ c, L4 w; P0 ?. W */% C# p/ [" m$ J7 f

2 w! B/ o/ w- P* C( q/* set default diags mask */
2 m( `4 y/ Y7 C; i% c! Ivar Diags = xdc.useModule('xdc.runtime.Diags');
& j' S- O3 L! P, l; d: }; Uvar Defaults = xdc.useModule('xdc.runtime.Defaults');5 C* W5 w0 r+ @
- ~" y2 Y! g8 m& n8 j
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
" L' t) W1 B+ V+ F9 a/ eDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
# a! |$ E/ A. E8 [) k6 i( ODefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;# S: U6 a3 s3 c8 K3 N$ _; L0 L
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 j/ X, \0 ^1 }' u0 |
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */( `! l$ V5 n: V3 i
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
$ M5 i$ C! m" @) r4 z2 i, YDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;# D- |7 p( j8 g8 F3 w3 w- ~- e0 H
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;# O$ e! f2 T% q. p) e3 E4 S
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 L4 M2 _$ D% b" f5 F9 N
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;' `! R7 _; J. x
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
; f0 d- k  m/ Y' [2 @Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; U& t& w: ~- w. u7 u! t
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
$ s* V5 n: c7 DDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
* X) x. s$ ?2 q- F% v  y
/ F4 W$ N3 \7 R$ D! T( q- y! T/* override diags mask for selected modules */) U! T: e; X( N5 d
xdc.useModule('xdc.runtime.Main');0 `4 i5 J' {8 }2 Z' ^
Diags.setMaskMeta(# Z4 h5 Z3 e0 }; H. f
    "xdc.runtime.Main",8 Y9 U  {5 T8 l' `" v
    Diags.ENTRY | Diags.EXIT | Diags.INFO,2 k- U: l6 s8 w' @: {8 ^0 h! w
    Diags.RUNTIME_ON7 J) g$ c) c) q* o$ L+ Z
);
% T$ l  ]- y% I4 h/ }! G1 I* k9 b1 u  ?) l' i/ D) m
var Registry = xdc.useModule('xdc.runtime.Registry');; [# y9 K  \* Q+ R7 M
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
' q* r) O; G$ L. m  [5 d! Y4 [: w3 mRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;" b/ a& U' K' W8 X' _0 t
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;! b8 u( E+ _! ^4 \& M- f6 D; O
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;$ F- e6 C5 @* ^! b8 r6 h
$ k+ n: w1 C( F4 c
/* create a logger instance */% j& S& x" b' g2 c# U8 {
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');/ F4 u0 d; T2 b" f7 ~; n8 P1 L
var loggerBufP = new LoggerBuf.Params();* s! c5 q3 ?! V; B: z9 M( c
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */& t" \% v4 {; G. ^0 J
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
7 V5 ?3 A6 I3 e; {
: v6 I- ^4 b9 Z+ F  T" w, bvar appLogger = LoggerBuf.create(loggerBufP);9 C& c0 T3 C; [2 I1 Q, s+ ]
appLogger.instance.name = "AppLog_Core1";
1 V7 O. r$ d3 Z- U( H7 `Defaults.common$.logger = appLogger;, H. ~6 n3 M% c* ?  y
Memory.defaultHeapSize = 0x8192;   
; Z3 Z2 \- Z0 C) WIdle.idleFxns[0] = "&LEDStatus";
5 d8 A: [* ]  tCache.initSize.l2Size = Cache.L2Size_32K;+ T) P" l% S/ T+ \

: Q* j- l3 z; w5 d" f" G' f
回复 支持 反对

使用道具 举报

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 */4 H, f9 l. ?- f  i7 P  S
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. v! R% q4 Q8 n# Y
var heapMemParams = new HeapMem.Params();
6 o6 H, `2 U* _8 T8 bheapMemParams.size = 0x4000;, J. R* I& i6 n. h+ A1 N+ \+ ]

3 L# @. I. T; Q9 M1 Wvar Memory = xdc.useModule('xdc.runtime.Memory');
) l1 H; z& j4 p$ j# u/ aMemory.defaultHeapInstance = HeapMem.create(heapMemParams);6 A8 b( b4 l8 h, v

  |# m. P( o3 f& O7 w" D- N我大约calloc  每次共计大小为5K*16bits,, Z- H$ P+ f4 _5 H
而默认配置才0x4000、需要改大。. }" T9 n/ B7 `  s6 P# e9 A

8 b4 J) P' _# D$ H
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
! N- c" }, n( |4 b" v. q8 a' hProgram.heap = 0;! \" A1 r# [3 H6 ^8 [/ O4 ?
Program.argSize = 100;  /* minimum size */* T. I' j+ K' }* q  R% \% Q9 e
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-4 06:41 , Processed in 0.042660 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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