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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
% }: A6 s# G$ b3 G  `3 _( O: z4 V9 E5 \, z7 r
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
/ _" o( C9 @  v9 v* g9 X. l% W" Y, \, n
其他程序段。。。。。
- S/ F: ~3 v+ }: ~. Z 5 X; @4 f  E) i( ~! z2 f  z% j. y
   free(x_d);
4 h0 ]; R* B$ Z# b9 ]6 g  Y7 s: C" I4 J: J7 _
使用DSP侧单独调试功能,验证动态申请没有问题,
4 [: M" I+ j0 @" W
- h. }* v: w6 V6 K+ t; |1 [但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。: q8 _: ^; B/ C# s7 T0 b! a! A
/ T6 B% K: l5 P  S+ ?4 \" L0 N- w7 H
& z  b/ y/ r5 D5 ]  a
8 _6 R2 f& f( m3 q; t9 w6 r! b( `" [

6 P+ P9 p9 Q% n* \7 C
) j4 O! Q" A7 W) V+ U
" P$ W5 z9 a8 j# H& u8 j+ k5 i  Q, M' H- b
) t1 J6 k& Z9 f, a3 Z9 Z$ I% n
/ s+ I7 h- A$ }; n8 o# M

$ m' u+ Q; b' A' U7 R( b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明0 J" k, F8 z5 m7 U7 Z9 {- \
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下' T( `8 f! K% R: e  h0 \
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)5 X: L) t$ F4 Z6 S

  F/ M) f/ V0 @9 B是不是需要在DSP.CFG中进行配置
* w+ }# a& a1 a3 T- [我现在的配置为+ O3 v0 j% ?: Q- N5 k
- m6 W6 _7 s; A% d8 m& p6 V/ u, y
/*9 o" y- P+ R7 r2 n9 k! r
*  ======== Operating System Configuration ========
4 J; q) s2 y: d$ p$ k) a% i/ I */
/ W2 ?1 v, w" r# x& z9 M. X
( V2 _9 W2 n+ Y  R; ]9 |/* no rts heap */
* s, U0 j3 ?8 E0 o, y! ZProgram.heap = 0;9 U3 D' K3 x5 I; L5 _
Program.argSize = 100;  /* minimum size */
/ F* N/ F" u8 _8 o; k. AProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
$ `/ R/ K, j! d+ [" E$ r' a7 @! A+ n. e0 E& e) W
/* create a default heap */# t3 b! |3 c3 \! p' W; k8 D/ y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* c! k6 A; V8 Y' ?
var heapMemParams = new HeapMem.Params();
  Y. y9 {- T9 W5 h0 UheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
$ Z2 [2 t. M& a" e* i( H) I# O+ O" b8 `) P) J
var Memory = xdc.useModule('xdc.runtime.Memory');. y+ f/ @& V0 b, s! a; J0 b4 G8 i
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
  w8 i; C9 N6 v+ R- w# N# U9 i  r! F$ s
/* configure System module */8 x# r2 \# K! E  P
var SysMin = xdc.useModule('xdc.runtime.SysMin');' Z4 d. C1 t6 I7 o* j
SysMin.bufSize = 0x1000;
# {8 _" I, p' O! k8 FSysMin.flushAtExit = false;4 B; g7 M4 I, d, T1 f  x

/ D$ Q3 b$ n2 m- u. d- V. Rvar System = xdc.useModule('xdc.runtime.System');* e# \; r. B! i( M3 J
System.SupportProxy = SysMin;) v- @! M' Z" p8 z
- A1 [+ k! U9 ?+ c2 |3 P$ \
/* configure SysBios to use the lower half of Timer 1 */
* |9 ^! O8 q1 U/ r! ?$ ?6 u! Wvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
4 h" D1 g) e& i' S; Tvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
  P8 U) Q! K* s0 l, iTimer.timerSettings[1].master = true;$ s! ^7 I( C4 U% y  Z! V8 t- d
Timer.defaultHalf = Timer.Half_LOWER;
( R5 u6 {7 h% b! ~3 B3 sClock.timerId = 1;
* z! Q! O% e5 q, m. Z1 _" o! ?
4 t" m' N4 J  j4 ^. L2 v2 e# S0 P& B  s6 u6 B
/*+ @6 r& n6 G, p
*  ======== Miscellaneous Configuration ========4 ~. v  s$ T) c
*/$ h. d7 n; A2 T5 u: Q1 m/ u
3 c' I- y+ e( R: J& ^
/* set default diags mask */
2 a2 ?' k  G+ F0 Tvar Diags = xdc.useModule('xdc.runtime.Diags');
  `. p; L8 U5 |+ ]var Defaults = xdc.useModule('xdc.runtime.Defaults');
4 C; {  j4 a+ o- ~
/ U$ d) L+ o2 eDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;, \/ k0 S% X, W! r4 {* C
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;9 c3 w. ]  d9 k% O* j- w1 d, _. ~4 l
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;$ z+ J" B& i1 f5 i9 v$ m: ~8 _
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */. b6 {& c& v6 V  A
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */" J4 X* c; N$ [7 x# |4 g% j
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
3 n9 h! W( t* S# D9 rDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
& I4 A. \  U9 |1 H: hDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
( ~; z! F, s, d* |Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;# z/ \5 F: y% T2 e7 r& Y8 R
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
( O" o9 ^9 J) k1 EDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;/ g  \9 u# m5 x) ]- v0 T
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;! u( j: {. Y' P( I5 q
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;6 I. K+ @7 z" m
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;) M/ p- s7 f: j$ Z& v: R% @* y+ j
0 Z# O* A! M2 F+ N. T  M
/* override diags mask for selected modules */2 M4 {; S" ?9 [: ?( ~& X/ j' U
xdc.useModule('xdc.runtime.Main');
% C) g, O$ ?& HDiags.setMaskMeta(
# S9 d* F4 o* k8 _    "xdc.runtime.Main",: ~" L% s, a( U3 u
    Diags.ENTRY | Diags.EXIT | Diags.INFO,. T% }2 [- s4 [: [
    Diags.RUNTIME_ON/ X8 {6 f4 ^+ ~8 ?- Z1 z& [! l9 x
);& f% X  @% d7 z% @7 Z/ [: G
+ T- x0 M: W" r( N) q  I
var Registry = xdc.useModule('xdc.runtime.Registry');( g% C# J: u# e& m; {) ^
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;* @" d, V9 l# d0 ]% l, h
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
; m9 O2 m+ D8 `+ oRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;- \$ \4 d( |$ g$ }* j/ n
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
7 p0 ~* p: C1 I. x
  Z5 G! Y0 v% _6 i. }9 q- d+ C/* create a logger instance */
1 J6 B) X7 t; svar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
! Z0 k# o& R3 D0 |/ Xvar loggerBufP = new LoggerBuf.Params();
* W6 L. N. q) r, G# L! dloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */1 j% d$ \4 H: J* N% S6 Z
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
+ ~" U7 ], I) P9 H
9 y# h: S1 ?0 F! f& o2 Ivar appLogger = LoggerBuf.create(loggerBufP);
2 l+ ]; Z) I2 \& wappLogger.instance.name = "AppLog_Core1";
) F2 s( I+ S# v( t: }9 R' mDefaults.common$.logger = appLogger;
5 C, O7 L7 n/ s! ^, k! _- |4 n# |7 tMemory.defaultHeapSize = 0x8192;    ( |0 ~) f5 ~% y& z, N
Idle.idleFxns[0] = "&LEDStatus";
4 t% C8 q. m$ v3 M* i8 g2 V6 PCache.initSize.l2Size = Cache.L2Size_32K;
; t5 H- v) t8 P/ E  S  e% Z- J4 B3 c4 z/ I; [# m- q
回复 支持 反对

使用道具 举报

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 */: k, o/ e) O$ o  B, ~: I7 `9 _! S
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& `" E4 d' c4 V  T! R" V, a- }var heapMemParams = new HeapMem.Params();8 y& ^1 Z" x+ D1 @+ q
heapMemParams.size = 0x4000;
6 i; ~: ^) x( v& e  n5 G; k
. {+ e* C+ S6 A: c4 v  _9 Lvar Memory = xdc.useModule('xdc.runtime.Memory');( d' ~( r! l$ F" e, ?, E7 v
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 K1 t# w4 f5 L
  X5 M  U- [5 L4 ^8 e我大约calloc  每次共计大小为5K*16bits,4 n. [& t; k3 r4 O  Y
而默认配置才0x4000、需要改大。
) [, r9 n  @! V. D- g/ ?; S
7 e) {2 d) a% x5 g3 n$ V
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
4 \# c) a' t! m, tProgram.heap = 0;
) P" I. n; y9 |8 c: RProgram.argSize = 100;  /* minimum size */' g0 u3 X/ B" Q: R3 P3 T8 m* N, Y5 d
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-10 03:21 , Processed in 0.042053 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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