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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
6 \& g9 f4 X+ K0 k" B6 M$ Q' i) e0 c9 o2 D; G! L# {$ L; ^" P* @
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
7 z" V9 q5 X: b3 P+ {
7 C/ B8 ^  S" i3 r5 I其他程序段。。。。。
+ e9 ]0 D/ h  X9 x3 H
" t# L( A' b1 D$ w   free(x_d);! `1 S4 M; H' ^  ?
/ R/ f% P6 T! R. v8 @) z
使用DSP侧单独调试功能,验证动态申请没有问题,
" S& o) Y! n, d8 D8 @$ F/ h0 i* G* v' r5 r
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! J; w2 y8 t4 p# ]
: F: l2 p( o1 Y, d) y) X' K
& Z3 O# H$ i8 y7 s  K" B
4 s6 `" a; G5 Q6 f
/ C  E6 K7 ]4 {, }) h7 n

0 I$ }4 S- J* M3 P% I2 n6 }) I0 [4 `9 ^& Q* q! S/ f
, |* a; e) V3 L1 R% O+ h
8 f+ v& P* V5 \* l, e
0 U- w8 o6 V8 |3 C2 Y+ q
! {4 _0 g) C* I* Z4 E1 x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明$ P( y  j) C7 r: W1 r' a! j
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下' f; Y, x: K$ W
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)! P. ]) D( q8 b$ ~/ e

( o$ h8 j& q: P5 p5 v, `是不是需要在DSP.CFG中进行配置+ }' m- p6 U: z0 |0 L8 |
我现在的配置为
1 x; i* M- `" M; A& Z
% x' ^2 p, _: w$ Y* r  Y+ c  I/*
2 `! g. c$ _% [5 C  h  { *  ======== Operating System Configuration ========
: }) I# f" a( p4 u$ o4 ~, E */
/ ]: G7 ~# X- E& r* e% }$ I, v0 M' z+ ?0 o+ j/ {8 {
/* no rts heap */
- X, K  x7 N6 C! `9 p& h8 wProgram.heap = 0;
6 J/ |+ y$ q' M! @2 wProgram.argSize = 100;  /* minimum size */3 D5 E, w, q) r/ H$ y, t  e; e( _
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
; b( x6 i5 z9 h& h
9 x. F; \$ ?8 P/* create a default heap */+ F; h2 [5 V0 W9 i  Q+ W) i
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" [- s' Z* Z$ U2 u* A' b5 v7 z
var heapMemParams = new HeapMem.Params();- f) r/ k. ^8 A- R
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大7 c) g0 C2 B/ O) _

! X2 ~" Y8 c* b/ g
var Memory = xdc.useModule('xdc.runtime.Memory');
" q( \: X6 A! xMemory.defaultHeapInstance = HeapMem.create(heapMemParams);5 a  G" K/ h; I! t2 ^

% [: N, ^3 F& Q/* configure System module */
) v& I1 d, ]4 u# E. c* M$ gvar SysMin = xdc.useModule('xdc.runtime.SysMin');
; w' D0 l; s8 M9 n0 [SysMin.bufSize = 0x1000;
: S9 }) e& H, T$ eSysMin.flushAtExit = false;) f+ g: n- e# E: M
1 |& G9 i- ?! |8 N! \9 F
var System = xdc.useModule('xdc.runtime.System');
8 I  T  R* C% D' H& Q; K+ L" LSystem.SupportProxy = SysMin;4 z" b% j# @  k6 U" A

3 c  ~1 H3 J  r6 a( Z/* configure SysBios to use the lower half of Timer 1 */  @6 l0 ^+ O+ T
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');7 H, b8 @, }$ g! r7 S0 A
var Clock = xdc.useModule('ti.sysbios.knl.Clock');5 ^7 Q; w3 z  e9 ~* Z
Timer.timerSettings[1].master = true;, K- q% ^% H3 ?2 a. E9 ]' p
Timer.defaultHalf = Timer.Half_LOWER;
( ^/ H5 `9 N2 g! J* U' O6 kClock.timerId = 1;
6 R# l& {; R; n! ]; H. P% P! |: U( f( K$ Y
, T0 s; f1 n; Z+ {5 u
/*
7 O, o- t7 [8 \- G# Y* x *  ======== Miscellaneous Configuration ========
; |2 S3 Q% [5 A5 s7 E2 h */6 r5 A- J# d- C6 ?: `

) R3 \0 |& ~2 a6 a/* set default diags mask */1 e" A3 o$ q0 E
var Diags = xdc.useModule('xdc.runtime.Diags');
, U6 H. _6 Z; t& cvar Defaults = xdc.useModule('xdc.runtime.Defaults');
( H1 x6 ^* D* W4 k" \/ G/ }% K1 h/ E$ X6 v4 }3 ^& Y1 |- J" d
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
' N3 z. }9 x4 w! y4 s( v3 YDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;+ H5 S. V1 E( V. M6 E0 \$ n4 N
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
0 ~3 _9 n0 s3 A  q- j5 sDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
0 V6 S5 v/ w( @  d" HDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */% R( Q+ b- T7 c4 Q
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;. H( R* k9 C" Q" m
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
2 o+ I7 N1 s8 J* n- ?! z, j9 MDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
* n4 Q8 ]& i/ D3 |9 a; P/ }6 jDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( }9 g1 |: `# E; }- i+ h& y
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;0 V. Z2 t: a* X# k# b5 `. N9 d
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
) t* _) q, k1 o' l" K2 ?' n5 oDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
, y; s: y9 f) i. Y( aDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;9 }; [5 z' T; E  ?% Y4 X
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;) h2 Y# E3 Q0 X4 r8 ?

7 |! i/ L: w( R, f8 C/* override diags mask for selected modules */3 ?+ W# r4 ~: z2 O8 c2 a
xdc.useModule('xdc.runtime.Main');9 c' t8 b+ j4 I* r
Diags.setMaskMeta(
9 D' `  C# i) g% f8 b' o6 q7 \    "xdc.runtime.Main",
$ w. W9 j. {8 J6 v- S7 Z) M    Diags.ENTRY | Diags.EXIT | Diags.INFO,1 n1 _5 R/ S8 r% ]
    Diags.RUNTIME_ON/ [# s( y. B# H  I
);
0 ]' ]; [4 ~3 k# d$ i7 O7 P7 D! F$ z  y! J: m# Y
var Registry = xdc.useModule('xdc.runtime.Registry');
- l) z( C( w3 d4 n2 kRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;7 m" N9 q; E& \% B) ]
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
1 R% I5 b7 R5 Q' p# F& IRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
" b& p, T/ K/ u+ E9 @# Y% GRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;# w, t2 Q/ L/ K" F3 d- _# Y8 ~7 ?

7 l1 O* q7 r8 z$ ^5 }' e9 p/* create a logger instance */$ l. k1 n9 U! c* o: c8 P4 L
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');) F( X% H5 W# w3 B% T! ^5 G- G* g
var loggerBufP = new LoggerBuf.Params();
# L3 N) @& F' F" c* vloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */7 W, A, v2 q; s% O9 J
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
/ Q' N, E& S& Q( n+ I' }% \7 l# \5 q
  X4 W, S. f0 [6 F* B" `& I5 mvar appLogger = LoggerBuf.create(loggerBufP);
3 g8 Q1 U$ ^2 k& Z4 d2 {appLogger.instance.name = "AppLog_Core1";
" w8 t( u( p4 J: i8 Q) Q6 L8 q: wDefaults.common$.logger = appLogger;
1 ]* {4 @7 J, X0 M4 e. k" @Memory.defaultHeapSize = 0x8192;   
+ q, ~; H3 A! i5 c' J8 A4 M6 p. eIdle.idleFxns[0] = "&LEDStatus";
" b" b8 ^% I/ `2 l3 cCache.initSize.l2Size = Cache.L2Size_32K;" D- `1 l2 A8 |; s! h0 P$ o
  O  O* u& h( V3 q2 ]- g
回复 支持 反对

使用道具 举报

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 */
: {3 ~, ~. W0 i5 _  x7 E  e7 Xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ K- D' d& E8 V. ?! J& K1 f1 F% u
var heapMemParams = new HeapMem.Params();2 P" j, S8 q& C& i4 o* O
heapMemParams.size = 0x4000;
& L  q: r& E5 p0 s. D' ^' }. N' g' J% m0 J, ?1 {% ?
var Memory = xdc.useModule('xdc.runtime.Memory');: Z4 F. y4 h, ?
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 q1 l. d/ x8 h5 W& f* Z2 q* s
# a  H# D) {7 e5 n1 Z我大约calloc  每次共计大小为5K*16bits,
6 ]3 D) m, X) W8 D而默认配置才0x4000、需要改大。
8 V. K8 p7 v/ \+ [' ?
  B. `: o5 F! N* E& ^
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
. C5 W+ p* ~* i7 G" r6 d5 C* jProgram.heap = 0;3 S9 \. j' m8 B1 S' _4 r
Program.argSize = 100;  /* minimum size */
, ?$ S! e1 j" R7 E2 h* `) q2 PProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-24 12:21 , Processed in 0.043622 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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