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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
0 q: q1 o/ P& I7 J2 e& R$ J  `
; `" E4 H" M/ l9 l    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
) j" Q) H( d, M, v# u* |, \7 a8 ]7 Q. P2 ~# ~: D7 p! T
其他程序段。。。。。
# ]3 C, I* f8 A' c& ~ ! r, d/ A1 R! i# W
   free(x_d);
. L: @) Z& b3 ]% z8 i# b% O" }' h4 M: n. B  L$ J* X7 c% {
使用DSP侧单独调试功能,验证动态申请没有问题,
0 z# q5 \1 D& P0 D- \4 r" w; x9 w
4 |9 X8 _: i; m* _. p7 w9 t但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。1 V- z* r4 D" |

. `$ W# Z2 J; ?7 e
5 ]" B+ o; q9 ~" s: a- Y
. s% ^  |" n! B/ g! d' T" O5 Q- u
& [1 ^% B9 y, w6 A/ G3 a) _" f; j1 k3 [$ O
# D& S  K7 r, Z: x  G
8 L4 r+ ]$ o5 W& p7 i* V

# r5 A2 H% H1 v- J- m7 f* I' u- V" `1 {/ q# v. i/ {
2 K) Y$ t" H6 m4 K2 i, _, @" k
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明* L0 U0 N7 N$ R' {3 R
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
+ F# Z$ g- N7 V: t: q" @(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
$ E& r( j7 q% ]9 {0 z
3 a: {, L% r" I; [- N% i) t# B( {
是不是需要在DSP.CFG中进行配置, Y- p' X6 [! h/ S
我现在的配置为
9 H6 a% ^2 {( ?4 z: ^* w
5 p, f$ \# I5 r. K- T( Y1 f+ r/*
& A! }: G) w9 B2 y( X *  ======== Operating System Configuration ========
9 n- Y8 I( I4 `* e */. a+ B' H4 x* K
3 j" |" c9 d7 k9 {7 G
/* no rts heap */
! F: q( k2 Z* F, N9 s% l4 z+ dProgram.heap = 0;& M( ^* m+ I. Z' C9 `/ U
Program.argSize = 100;  /* minimum size */
6 \  u/ ?9 x& J$ n+ x+ r' PProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大; ]; M0 ~% @0 m9 @3 V# v& r
9 h% F- H2 i1 W4 [2 I" y# d
/* create a default heap */) u* C; Y# S6 {+ _* C
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( I5 T9 U% o. B* n
var heapMemParams = new HeapMem.Params();
( N6 l9 _7 {0 h: j) f+ HheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大2 w4 k4 c) Y% G9 G

1 A! n" W2 y$ P) \5 `( T
var Memory = xdc.useModule('xdc.runtime.Memory');
3 [1 s6 k" Q/ z* J$ HMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
. t2 l% l: X1 L
( U6 C6 M! H! Q. o% h3 C/* configure System module */6 y0 R" R+ T* Q  N- U. f$ ^
var SysMin = xdc.useModule('xdc.runtime.SysMin');) e2 T+ U3 O# o% P' I+ C
SysMin.bufSize = 0x1000;1 R3 u0 ^% k1 ]+ z! V* d! e( l8 ]
SysMin.flushAtExit = false;
, s  F2 ?& b# _. y6 f2 p! T  o* N" G; G+ u+ y4 g& W8 [
var System = xdc.useModule('xdc.runtime.System');$ g, [+ M! b- p7 I
System.SupportProxy = SysMin;1 B- A' C. I& }  e# o$ s: S
/ U# U) o: @5 @; |4 a
/* configure SysBios to use the lower half of Timer 1 */
8 ^- c, T9 B2 J3 Kvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
7 ~9 C7 A: x% b6 \% jvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
. ~% U  }! P7 RTimer.timerSettings[1].master = true;/ u& Z1 Y$ I3 M: P4 C6 c
Timer.defaultHalf = Timer.Half_LOWER;4 P7 b5 @$ C; j$ E/ q
Clock.timerId = 1;. p) F. s( ]+ W0 ~% E

; C! k" q2 F. w2 ^7 t  A/ o5 I9 V4 ~' l# S6 N$ J" O
/*
! |3 b9 i. L" N# B. u *  ======== Miscellaneous Configuration ========
$ n/ q) ]5 s- o0 h0 Z */
- U2 ^) \+ T) x; L
  q% |$ j! I2 {( a3 n! E! F3 v/* set default diags mask */
3 s6 ]( b' \+ E4 ]# fvar Diags = xdc.useModule('xdc.runtime.Diags');
: D$ g  R/ G2 @" R! Dvar Defaults = xdc.useModule('xdc.runtime.Defaults');
: L2 R/ U/ i% e  O+ U; c0 m
0 }- `" b8 i! vDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;6 n* t: |- V4 }5 v8 g
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;, X5 ~. B) ]3 t  F- y' e
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;4 ]- B5 [# `" ]* O( h/ o0 O
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
4 a/ N5 S; s) y4 j% W1 j5 FDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */  @6 `/ f3 g0 |5 S
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;6 t" I" D+ `% D
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;. z9 [0 z5 r1 a( }6 u- k
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
+ I$ [: x6 [& R) m; YDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;0 V% p7 m* ~. b4 _* i$ `1 P
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;2 R+ {4 j4 |- S7 D) F( W
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ f4 N; p2 P: V/ L! o! FDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;0 ^: ?4 E7 H$ k5 n
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
* p. ^- k5 @$ N' o' x* h. G! P2 rDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
9 z: w* o. C0 I, o1 t, V
8 P! `3 Q$ J  _, r+ s6 L5 B8 i/* override diags mask for selected modules */
8 i8 y, t* R4 k( exdc.useModule('xdc.runtime.Main');
1 p  f# F8 o5 Z; o: \, X/ TDiags.setMaskMeta(
- G# v7 k2 l. G/ B" k    "xdc.runtime.Main",5 ]/ i8 h# g) i* d
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
% N! f, u- g8 y9 Y  r    Diags.RUNTIME_ON; V! B$ h* J7 B% O0 x  n) ]
);
( v' g: S  v) X: n( \3 d5 x% W
1 u) E! u% C/ E! v+ }2 b7 Evar Registry = xdc.useModule('xdc.runtime.Registry');9 w! Y0 P: L  o; C0 `7 R
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
. w; t0 c$ |0 ?1 {; x0 ^Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
  A! V* b8 |: KRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;4 f) Y+ p8 a9 ]  N6 G
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;* `5 E5 b. w; k% r$ ^
# c0 ?+ i0 ]9 p/ J9 O; S6 g8 y$ X
/* create a logger instance */
6 _4 D8 u+ V( `5 T( X. \2 j4 Tvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');" o/ R8 Q% h' y. e+ H* B' G
var loggerBufP = new LoggerBuf.Params();
9 F2 M0 Z# n- Z& j+ n- RloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
: \: K& t* j5 t; hloggerBufP.bufType = LoggerBuf.BufType_FIXED;
& C: i, x& _- p; b; L
0 C$ F* w4 b* A+ V( xvar appLogger = LoggerBuf.create(loggerBufP);
# p% D8 {: v% U1 u( z2 ]/ BappLogger.instance.name = "AppLog_Core1";
8 c4 L, b+ c! W  uDefaults.common$.logger = appLogger;
0 @, N6 p1 Q3 q! _7 CMemory.defaultHeapSize = 0x8192;   
. k/ i+ R8 w7 o& gIdle.idleFxns[0] = "&LEDStatus";- @' v7 x" D6 K2 C! n
Cache.initSize.l2Size = Cache.L2Size_32K;
2 z, z* J! u, A; @: V0 b
" T5 S6 K) k; O/ W1 x# g1 c
回复 支持 反对

使用道具 举报

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 */( s, Q( q1 n# R- a5 k
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" {6 E" x/ S# X% D; _6 w  T& k" T1 [var heapMemParams = new HeapMem.Params();! H1 V& K( x7 @8 x+ t$ `
heapMemParams.size = 0x4000;
( T+ ]; E( W; `  j0 y; X) i. N! {! E6 Z2 t
var Memory = xdc.useModule('xdc.runtime.Memory');
$ q7 h7 E5 u( h% H6 o: e  {Memory.defaultHeapInstance = HeapMem.create(heapMemParams);2 q9 R; A7 \9 q6 J2 s/ ?
% K6 N! G0 @1 _6 C4 p4 \
我大约calloc  每次共计大小为5K*16bits,3 G4 N$ [" K4 {* m7 z5 `
而默认配置才0x4000、需要改大。
; M0 E9 U, R1 g8 x7 y4 f" u/ _+ f% @( J/ R
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
* `0 Y, O3 x. A7 G, wProgram.heap = 0;
& X& N  I) P4 l$ D$ s: g( I8 fProgram.argSize = 100;  /* minimum size */
3 i4 Z, q6 e1 EProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-18 10:49 , Processed in 0.041351 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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