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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构+ ?& m; N- _' I8 G
9 O) m1 s+ Z. r4 r2 C2 a
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
" e  ]% z* ]: f. I/ g- w0 N, U1 M$ F2 g3 }3 p# n' V  k' l( G
其他程序段。。。。。) S5 {! G. i) x" G- N) j

/ r3 \5 L+ T0 }( D. p( f% v$ M   free(x_d);. W3 ^) y, X; a* ~$ Y* b0 m

8 k0 e9 o- z+ Y' P" L. Y0 e使用DSP侧单独调试功能,验证动态申请没有问题,( C8 M/ V% }' p$ y4 v$ [
' U7 U6 ~7 E/ L6 g8 s5 q  H
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。9 m' a3 f5 K8 t, `2 f! d

$ k- u: V% N: ?9 I2 j, B# s. l' a2 H; T8 j: v2 S2 o  T  G5 o4 I
5 \6 {5 z1 i" W, o/ n. D( M
" o  |, V( s$ K& f) v+ q+ F. `- n! Y% {

$ V8 Q* T0 C6 y7 H' C: M8 n. W* `- p7 @2 [& [0 Y( g) I
, F  j* P! R/ t% k" b0 K( S
& U9 }+ h+ f/ f4 a* W+ s
  x% k, h; @6 L* o6 @

+ a5 |, |, K; n: `% Q  }! B, A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明( a! T' ~6 x% B2 Q8 ?( z
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下7 V. R+ f4 n$ U' _
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ l) s$ |* T$ [' ]

' x# W. J/ x3 s. p是不是需要在DSP.CFG中进行配置
! s8 H) l# H4 m, H; `我现在的配置为
+ C  A; k6 \0 X9 H+ U7 W' f
' W" q0 G/ P2 {" y/*8 K6 \! d: M. g+ }! {
*  ======== Operating System Configuration ========1 y! }. i6 K6 e: a
*/
: c4 D5 ~4 E, Q' v! D# X. {9 n/ `4 `$ a7 p5 j  f
/* no rts heap */
4 g! ?, A- ^8 }" q  wProgram.heap = 0;
8 O9 ]! L' t' [( sProgram.argSize = 100;  /* minimum size */
% A* \0 S6 c' vProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
7 y" H* y, K( J) {" _' m+ \6 ?/ e; R1 W3 n2 Z. S3 ^
/* create a default heap */
- H& s' M0 I$ z8 B3 N+ f7 }5 zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 ?. |' Z3 X, ]2 B
var heapMemParams = new HeapMem.Params();" M2 y. E4 S1 t# C0 z, Z
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大+ w5 ~2 z# C# C. W+ ^
* A( @% U; b5 N7 T
var Memory = xdc.useModule('xdc.runtime.Memory');
, W1 s7 o) n1 ~/ H# O: q+ zMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
* b$ j1 Y, }$ {7 s4 p: @
+ ]  W# f& k6 M/* configure System module */
% v! ?. e6 ~* V3 |. l8 Mvar SysMin = xdc.useModule('xdc.runtime.SysMin');
0 x& E9 F9 S2 r1 }) P  L! RSysMin.bufSize = 0x1000;
) E) O- s# @" |4 D2 ~SysMin.flushAtExit = false;# R3 c, {1 B$ v7 C1 ~" T

8 D$ f- i3 h4 m6 Z" `; _var System = xdc.useModule('xdc.runtime.System');* ^4 y- f3 D* {5 z$ G6 T5 ~, Z& }
System.SupportProxy = SysMin;$ X1 C' h5 \1 h; I

9 |: B- @+ h- n) W% `/* configure SysBios to use the lower half of Timer 1 */) K. ]; A0 t9 v: t
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
; b: _' Q4 V! o+ \var Clock = xdc.useModule('ti.sysbios.knl.Clock');
/ u/ \$ V8 t% e8 @4 DTimer.timerSettings[1].master = true;
* }5 @3 Y, A# J9 \' _- GTimer.defaultHalf = Timer.Half_LOWER;
) O  O! b1 ?8 p+ |Clock.timerId = 1;3 P8 V8 I9 U* H3 m1 [+ e
  q  @* h, L. P+ ?

+ g# I0 x/ V* u; X1 X- _# X  [) g/*: o, G/ L" L& s7 g& A) k
*  ======== Miscellaneous Configuration ========) W( n$ N- i9 c- r4 t
*/
0 ~6 Q% B! O. Z4 p& i
4 i, y+ K! |- c0 z5 F$ L/* set default diags mask */
; j4 a* r5 k4 i  z1 C' Evar Diags = xdc.useModule('xdc.runtime.Diags');
3 O; J0 X( z0 h& @1 s- _var Defaults = xdc.useModule('xdc.runtime.Defaults');6 w; \, |5 B2 I6 @1 S( n
1 I0 A- T- h' P+ z+ N
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;- M6 {  A/ r% x/ E9 \
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;6 ~( u9 N  f% j7 ~
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;) r& q' e4 D3 `" ~' ]
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */6 `* g, l& m* Y+ M" W
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
8 q$ c6 z. z9 e# T$ I7 U0 `Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;5 x/ D3 n( V3 O( Z& Y" ?7 g$ f5 P
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;( N2 g( L! _& }- M) O
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
; A: X! Q! |& Y8 d  q- `. CDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( p, b" e' g8 R% U) O& \) ^
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;0 ?! w8 e) N% L5 {+ [
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;; n+ W( G6 c0 H5 T) g% @
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
: B7 i  b0 i  F, HDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
9 X& {, u) c, S2 HDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
% p0 J' @/ }" Q- |* \. D: Z) d
7 E2 N: E( y1 p; v) i* |/* override diags mask for selected modules */
% B; P4 M% p# r4 m9 wxdc.useModule('xdc.runtime.Main');( E0 s, z3 w1 l
Diags.setMaskMeta(" ]) N7 u, }" u0 x# V+ m( K$ V
    "xdc.runtime.Main",
+ \9 ?- i5 T5 y    Diags.ENTRY | Diags.EXIT | Diags.INFO,+ B& S+ `" }  y0 j; h% B6 w+ d
    Diags.RUNTIME_ON, A6 ~) z6 q/ S0 J, m# t( E. i
);6 O5 {3 s* A8 Q

' a4 b. G; e0 U* k  D4 R5 u' \% N$ l  Qvar Registry = xdc.useModule('xdc.runtime.Registry');5 ^5 |: \8 U9 P% y! b/ y
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;3 [6 |" T0 r9 j) }/ N& t% C
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 q' r( X) E# n. Z2 g' lRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;+ Z  m1 `6 z" U+ `3 y# P
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
. G" D) r; Z" n4 r; ~* f9 k# o! s  F( N/ m( u+ j; Q1 s
/* create a logger instance */9 A$ E' s3 I4 N# |
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');( A( l7 W& j3 C
var loggerBufP = new LoggerBuf.Params();
: V: \  W: e" t7 D( iloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */* z2 C- x1 C* x1 c5 S$ m
loggerBufP.bufType = LoggerBuf.BufType_FIXED;+ @: }' W  M  L8 H6 R

- l/ Z) I7 g3 U* N3 _& w4 Qvar appLogger = LoggerBuf.create(loggerBufP);
. w2 D% g$ C( G* |appLogger.instance.name = "AppLog_Core1";7 [6 u5 a, C: X4 g$ b% t
Defaults.common$.logger = appLogger;
9 A8 {) K! y- iMemory.defaultHeapSize = 0x8192;    8 ^2 E1 U; u' i) \* q7 D7 g1 ?
Idle.idleFxns[0] = "&LEDStatus";
0 Y# @! G, A) [( JCache.initSize.l2Size = Cache.L2Size_32K;
2 W5 D6 s9 M& L6 [( l/ o) ]. P
: Q6 H/ T0 \4 R' p& M
回复 支持 反对

使用道具 举报

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 */0 z8 x5 R( K* o( U+ c2 l
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" K8 C: Y9 k2 X5 s2 Bvar heapMemParams = new HeapMem.Params();  ?* {+ J& Q4 }! e$ \3 L3 s
heapMemParams.size = 0x4000;/ y: ~; G" x! I1 i0 V+ d
9 J' T( B/ _5 k* L& O& Y5 [
var Memory = xdc.useModule('xdc.runtime.Memory');
( I' P4 E9 ?  dMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 H9 i5 t' c8 n; d3 [
2 f" l+ u7 l7 A4 Z$ A* I  F( X% Y7 g, _我大约calloc  每次共计大小为5K*16bits,- w: B% W1 s! t! N) E
而默认配置才0x4000、需要改大。( r% h% P- ]  A( P( a

; j- E) z' w9 C* V
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
: V- q+ t1 t0 bProgram.heap = 0;
7 u8 Y8 A6 J6 \$ C' e, `, KProgram.argSize = 100;  /* minimum size */- I- Y8 Y! q- Q$ u" ?; }& f+ b$ i
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-3 11:32 , Processed in 0.041787 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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