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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构& U: r1 Z7 b7 J0 ]; V

& k# N2 f7 s( s/ z    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256+ {2 V4 X: o3 e2 @  t5 I3 [

& A& L( E* E4 P& T$ D4 t其他程序段。。。。。
1 b1 Q! T6 c7 Z
3 ?- T/ m9 W5 J; L7 \, N   free(x_d);, U9 t' B% ?# Q$ P0 A
) b9 e* e$ T  |7 \
使用DSP侧单独调试功能,验证动态申请没有问题,
2 N- b1 S  f! y' M4 Q& E1 u6 v+ F4 H7 e2 j
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! ^5 `2 M# K, ~) l+ h$ i
* s; @: p6 `; _7 [2 `

6 h  ?3 m5 C7 \" n6 Q$ p/ y9 Y. B
" m$ n, |5 [* Z' m$ T+ g! o4 Y! a( s+ E

, X7 O  |- c7 ]4 |/ B) h/ T1 y6 s8 k! r
) Q+ V+ e$ P5 a- _! h1 v$ U

6 U7 J& M$ o* R- s( t% A! v0 u: G# p5 c/ F# t# `( T: n

! t9 U* x( E( K+ O  J* G
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明( l  \; j) `" p
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下* X9 [- V. v7 r. s
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)% I5 K' `5 z1 V4 D" O! H

5 n6 ^2 R! k6 S7 X是不是需要在DSP.CFG中进行配置* D: i' ]; f6 q, N+ S% T
我现在的配置为% q% y* Z) b% T. {7 h2 J+ U2 C! V

, a+ V7 p1 {9 ?1 M7 J  `/*9 I5 c3 L* J/ i# ?& n; p4 k
*  ======== Operating System Configuration ========8 ~: }9 \% V7 @6 A  H0 M* y
*/
! m' t% P, N2 G& A% ~* X/ Y; b8 }0 h" C& G+ P9 O/ I1 L* }, D' e
/* no rts heap */8 Q$ {2 G! y! `: W3 m3 @) m  e' w
Program.heap = 0;$ O5 ~2 T1 g) Y' m+ R
Program.argSize = 100;  /* minimum size */
) w4 B. v7 }0 q4 x' v6 FProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ p# V& T7 e; ?. D5 Z0 i, F$ n+ k+ T. e# q+ |
/* create a default heap */# O) n$ j9 y& j1 Y, C2 ~5 j
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' O! N: j6 ^# i  s/ c) h* |6 f- L
var heapMemParams = new HeapMem.Params();8 M' X% G# U# l. B; K
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大; [1 N  O  }: t/ @  L) @3 r

$ g+ @! X* c4 c3 z9 d* o
var Memory = xdc.useModule('xdc.runtime.Memory');
6 H* `& P# ~( x7 ]3 zMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ V8 S! U. Y; i& q
& q; w* M7 B& t# H% V: _/* configure System module */
' O2 p. C' s/ U9 _; h1 g6 O* e8 zvar SysMin = xdc.useModule('xdc.runtime.SysMin');
' Q$ u0 j9 j  KSysMin.bufSize = 0x1000;
1 v& r1 L/ n* G1 s! L$ aSysMin.flushAtExit = false;
# g7 M. t- T5 a4 z% \5 ?
* l: _3 g  Q& a7 Z7 n+ g/ Yvar System = xdc.useModule('xdc.runtime.System');
4 j# b  K! Z% a% m2 I! H9 k. BSystem.SupportProxy = SysMin;
, h3 U( ]1 q/ I* Q1 k: _4 q) K* i! C/ w( D
/* configure SysBios to use the lower half of Timer 1 */
4 q( Q: `/ S2 d1 @var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
2 T7 `# K8 Q6 f" Y$ _* ~var Clock = xdc.useModule('ti.sysbios.knl.Clock');/ j, P7 p' I* @* Q; w0 D
Timer.timerSettings[1].master = true;
% R& [# I+ w) c; w5 U6 XTimer.defaultHalf = Timer.Half_LOWER;' ?5 C3 [/ m1 U/ d# `: }; Q
Clock.timerId = 1;, U* s4 [6 C% T" z( ?

" F6 r8 e1 M; u2 W* L$ T8 ]6 g5 j8 y) R8 S. I# m4 e
/*/ U3 [/ c7 m7 V' ^
*  ======== Miscellaneous Configuration ========
  \0 y$ n' T- ]) H  G */: _, h* M" K. J( p7 p

) k) z- N  L9 Z$ e5 `" z/* set default diags mask */
; X  @! _* N) }( X+ [( |; I+ `5 m+ uvar Diags = xdc.useModule('xdc.runtime.Diags');1 z) k- l* f' m* U: G7 n- M
var Defaults = xdc.useModule('xdc.runtime.Defaults');! l6 m/ V1 J" Y% O* O/ H
: W% i4 ?: L  W' e; ]% o
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;& u+ R3 P5 _9 Q* y
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;( L% b& u: x! V2 v, m
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 ~* e9 W- M1 F8 U; Z+ o  _
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
$ b5 I% @: y  }: U! @* f/ C, ~Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */& t1 X! k; \0 ~* l5 \4 K" F5 c
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
5 Y% V- a" D( c2 v) _Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;! a6 e/ @+ \% x8 u
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;7 G, q# K+ z4 x2 v, Y
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( N* a5 \8 f% |1 M0 j1 g5 c1 L" y
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' ]3 k, M# w" B& cDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
7 o' F9 S0 R3 m5 d4 K% Z0 LDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;9 X1 s. T: @7 B7 Z+ w- G8 Z
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
* I+ N2 A- e7 D# a9 [, U: WDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
1 d/ y: k; R# x
: z$ f$ ~# O0 |% {/* override diags mask for selected modules */
" ]8 S) Z* u, A; dxdc.useModule('xdc.runtime.Main');; d) j- W. c( Z& {1 ]7 n
Diags.setMaskMeta(
8 c# f4 E+ v  V6 h    "xdc.runtime.Main",, A- a: V7 I# g( y! @
    Diags.ENTRY | Diags.EXIT | Diags.INFO,* Y) ?! o4 l# F7 n( \3 f% Y
    Diags.RUNTIME_ON% r9 D, D2 X& l
);
+ Z. ]" r2 T7 u2 o4 I" k, f
: a, B; {8 _+ c' ~( |1 q% ?var Registry = xdc.useModule('xdc.runtime.Registry');7 B1 t- o) |/ S8 G5 Q) q3 @1 [
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
! P) }. k! `' r  jRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;2 T0 W; A( I4 P5 t9 D$ K/ G8 x% ?; j
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
; ?5 f- Y' s8 A" Z5 `: C$ URegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
8 X* e/ y& y& G4 k/ f8 G/ q
0 N2 s8 K9 v0 P' [, u- \/* create a logger instance */
! i, B. r& j7 M! q. b1 d& ]var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
2 P* e# K& `+ d, O# pvar loggerBufP = new LoggerBuf.Params();" s  a5 n% j! q6 i2 j# V
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
# H6 C! @8 g& K+ [loggerBufP.bufType = LoggerBuf.BufType_FIXED;# {9 x1 k0 E1 n5 @2 x
1 [: n% g% d2 D, e+ U3 }
var appLogger = LoggerBuf.create(loggerBufP);
( d7 E& j# J5 X! k& V! nappLogger.instance.name = "AppLog_Core1";  T. u% s9 d: I9 d! q& L6 I
Defaults.common$.logger = appLogger;
" E. Q' u3 [4 ~Memory.defaultHeapSize = 0x8192;    - K- @2 N+ r7 g" z  T3 C) q
Idle.idleFxns[0] = "&LEDStatus";% j) o9 l6 y' r/ B% W6 I1 o3 @1 c
Cache.initSize.l2Size = Cache.L2Size_32K;) N: Q' m1 K! P" U7 h) [4 x- r9 y
: h& N, x+ u1 [
回复 支持 反对

使用道具 举报

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 */
" d5 N6 H  [" Z( U. @4 U0 P2 hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 F) }& [5 {# G% [9 X
var heapMemParams = new HeapMem.Params();8 Y) Q/ w/ O( G! e( v. D2 g  N7 d% C- [
heapMemParams.size = 0x4000;
  c* M: X( Q/ \$ ^2 u# j. F
; o9 I3 w" x+ ]4 q: I* y9 \var Memory = xdc.useModule('xdc.runtime.Memory');
0 A& @% ~3 K6 j9 k. E) eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
% B' F% |  A' i) y, w7 P" x' ?1 M" {
我大约calloc  每次共计大小为5K*16bits,
! |2 v3 G$ y: t% s) }+ f3 z4 ?而默认配置才0x4000、需要改大。8 c7 @8 a: V+ V* N$ t9 d
' H. n1 B1 P, F8 z1 s$ q, Y+ J
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */. M' B! g* ^3 Q3 _
Program.heap = 0;4 E# q0 R8 D7 D) k" \; S
Program.argSize = 100;  /* minimum size */8 F# M5 X0 W6 p6 K! {
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-27 21:42 , Processed in 0.041618 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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