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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
  U) ~( b+ p* \+ r, S& s/ Y/ X- U! }" B
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256* V: K1 x$ q. F0 g
) @# L  O  q$ h- s, b% C5 ^( b
其他程序段。。。。。
3 H5 }  i, Z+ g  d8 S
/ N) V4 x1 ]$ c$ D   free(x_d);& |/ K/ t2 R2 M$ b8 J9 c

* A$ \  j4 l3 y2 g使用DSP侧单独调试功能,验证动态申请没有问题,' a4 P8 _3 h" i6 l- A

& O7 L- N2 |6 Y4 A  M但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
# W! u5 U! e9 N
: b6 e( x; l7 M: D1 I6 t

- S" K7 Y+ |3 j/ U7 j8 @$ m# y+ T; p5 H/ L3 C: a: u% |
" c1 l' Z$ n7 J& n- k. [+ [) b9 B* K
1 k* i: C1 @* t0 D7 f1 \! L$ G
- F* V8 a* D6 R4 n$ L6 J7 t+ Y
. ~5 S2 L$ k$ G, E) ?  ^

/ M4 a0 X, j# U
3 \/ Z8 H8 G+ W8 }2 e" J- T) M' \! L2 @% w) z: X" S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
' e4 d6 f$ D8 T5 {我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: ~, m4 B( z& {$ J7 d(不过疑惑的是,为何单独DSP仿真就没有问题呢?)& L6 \, k. f' q$ A6 _" f, M

/ T+ }! N! A2 e4 W是不是需要在DSP.CFG中进行配置2 z8 e8 P- ^1 j& [9 \
我现在的配置为' ]+ ~) ?( A+ t9 a" B% s
* j2 E3 k1 r4 Z3 o
/*
- g3 h% w4 ~; v! G' e5 Q+ i& c *  ======== Operating System Configuration ========) o6 N' G4 {2 L! ^, ^7 z7 _2 N
*// v( p( R- N4 h( |' Y

0 Z* Z5 H8 D7 G; J8 L/* no rts heap */
2 r0 S2 ~6 F* [' a' QProgram.heap = 0;
$ R4 p* X2 K4 c' R9 R& G$ E) b+ _Program.argSize = 100;  /* minimum size */
! W& \+ ?/ T. e3 W+ i: JProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
0 u$ W# i+ Q1 |- `: B$ l, O/ r% o5 L/ X2 h: \7 U
/* create a default heap */. a& W+ i) C) [; w
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. l" l2 j+ s/ k5 J
var heapMemParams = new HeapMem.Params();
: H5 w9 G' V- m* ?4 nheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大: E( l" X8 j, O* O9 X* P
% G: X1 P) b6 p1 d6 }, U
var Memory = xdc.useModule('xdc.runtime.Memory');
* f" C" a, B; v9 I; k3 WMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ h+ x; z9 P  i7 X6 R+ K+ i' X
. T2 `7 _2 A) x% k! z# k8 h/* configure System module */
8 F- R+ V! U$ Z  I# Wvar SysMin = xdc.useModule('xdc.runtime.SysMin');: Y4 ^, x, v. X: ]8 V) w  }8 L
SysMin.bufSize = 0x1000;8 i" m! H3 l# ]" j' `) y$ i
SysMin.flushAtExit = false;
+ N3 q1 M5 Q. O; L; a3 f/ u4 V2 `4 m2 s! l4 H; P  Q
var System = xdc.useModule('xdc.runtime.System');9 n( n% [( l& X7 w) W
System.SupportProxy = SysMin;* Z; t4 D( `1 B- t" n
; i7 b7 o! _% A  \% X
/* configure SysBios to use the lower half of Timer 1 */
9 T" h# N+ ~) Z  P9 Jvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
2 Z+ N. d0 u* y( O: B/ svar Clock = xdc.useModule('ti.sysbios.knl.Clock');! A- b6 {6 ^& A5 N& `
Timer.timerSettings[1].master = true;) u- _# y4 s# p2 w) c2 e+ E
Timer.defaultHalf = Timer.Half_LOWER;# ?; b4 L: r) S8 e5 F
Clock.timerId = 1;5 v" H& o: H/ M/ N0 g
5 v- e+ z  h4 |# t# {  b" |# X& x3 b
# J' U4 a2 Q- Y, g( Q+ X; y6 l
/*
, v' _. z7 ]5 f2 t1 ? *  ======== Miscellaneous Configuration ========
/ U; Q* q& \4 d( L  U */, w7 V8 [5 U! U* U% I

( _" H, q. W1 t, w5 `/* set default diags mask */
/ x# F0 g( W! xvar Diags = xdc.useModule('xdc.runtime.Diags');
2 z0 i! L, o( S1 k) Y6 x" R! dvar Defaults = xdc.useModule('xdc.runtime.Defaults');3 @  ]& f& O% T! v" s" N* |

6 W* R4 [" u* @- u2 h) J; U& j7 `Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;/ l4 E: w1 k' a
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;( N8 M0 S5 M# t3 _
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;0 e5 ?0 ^5 j# o1 v0 ^0 k
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
% V5 o. [' _* ?! u# h  ?Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
5 h6 i1 w5 A1 s0 ^- \% YDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 a: N4 x* U6 e$ P" }
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
1 w" X9 G4 {/ B2 E2 V6 g- jDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 Y6 P9 a3 `, k# ]Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;" K/ {9 ?& {7 a* {# F! f$ J
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;& A& Y7 f# q9 Y) O, Z
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* ]) s6 q7 D+ O) dDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;/ A9 ]( V# a7 G% E6 N! ]
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;6 l( }# N0 j1 ^; R: p1 B  |
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
: g" a$ \5 o+ l% G# I) o
5 S4 M) @3 _" k3 P/* override diags mask for selected modules */
  l' }: g2 a! g$ _7 Pxdc.useModule('xdc.runtime.Main');
; \; k- U+ H( S5 a7 w: h0 [Diags.setMaskMeta(
0 K- R" N/ T) W3 [    "xdc.runtime.Main",
, q  Y& F% Y6 q" d    Diags.ENTRY | Diags.EXIT | Diags.INFO,# E. P8 o: i/ T! a
    Diags.RUNTIME_ON- l4 D  d2 I2 h4 g# k, ~
);3 n3 l2 w6 Q" C, j, i5 n/ i2 _

- D: Q9 P+ f3 b5 u+ [var Registry = xdc.useModule('xdc.runtime.Registry');
# q, x( A* ^2 p% K$ zRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
  B1 e) h' o7 Y. BRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
5 j, y5 Y: ]5 m7 Z+ |Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;4 S2 m& ^3 ^0 v9 z# ]( B8 W5 b4 c
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;- u2 L7 J" N2 _
) i4 A  A& T1 y4 w  V) i
/* create a logger instance */
& N* ]' \: u' i$ y; ~var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
, m$ E) x0 Q; a% ^: `var loggerBufP = new LoggerBuf.Params();: B4 _: K  ^2 q8 R# {& _
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
, u. e( q$ [% h' y% S4 x" }loggerBufP.bufType = LoggerBuf.BufType_FIXED;4 l8 R* n8 B; X& o) T$ x8 _) a
1 p, F& ]: v" D
var appLogger = LoggerBuf.create(loggerBufP);" D/ {, x" w7 r9 R# l
appLogger.instance.name = "AppLog_Core1";
* j7 y; r7 d/ e" nDefaults.common$.logger = appLogger;
& n; l# s: N) l+ x) H4 G" E$ p5 A7 I, AMemory.defaultHeapSize = 0x8192;    " |$ H2 G( N$ q* `
Idle.idleFxns[0] = "&LEDStatus";0 v: m+ |  J1 U1 u5 O6 i
Cache.initSize.l2Size = Cache.L2Size_32K;8 L+ a6 h2 [/ W( j0 b# c
  w- R; M. h: y' r5 D/ K) n  l/ f. O
回复 支持 反对

使用道具 举报

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 */. Y5 u' j# V8 |: c0 I* }3 R
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: L4 `' y7 V9 P/ X) ~var heapMemParams = new HeapMem.Params();1 r3 h4 r, x% x& l4 P" c% f
heapMemParams.size = 0x4000;: \  _3 R' z- z" W

$ r4 E# ~8 y2 ^: A& ]var Memory = xdc.useModule('xdc.runtime.Memory');' n9 G5 F6 c3 _
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ y5 B& Q3 |) u( C8 f$ @
; M% ]2 X6 f2 V1 Z3 w8 x6 F1 I9 Q4 M0 K, w我大约calloc  每次共计大小为5K*16bits,. B) Z- ?* }* _/ D
而默认配置才0x4000、需要改大。  Y) A0 A/ h2 S# L* E! B3 H
, V; `' \+ j& f, A( ?1 E( e
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
' M* f. r0 n$ I! V4 E: g/ x+ j6 aProgram.heap = 0;
# _$ |* F4 o7 x2 D: A1 DProgram.argSize = 100;  /* minimum size */" ~1 E. S  x0 C/ A9 ]2 ]
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-7 16:52 , Processed in 0.042267 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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