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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
& R% q3 V2 Q% h& X6 g3 F! o$ Z  J3 p8 u. i: L3 \; e+ Z3 r5 c" w1 x+ A
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
* @6 W- f* V5 s4 ~7 p4 k) l6 q  Y  [8 s% B& S6 H/ {- [
其他程序段。。。。。$ ]" j6 ?1 P  P, O, l" i

5 }9 w& H( a" |! L   free(x_d);
6 X( R) R/ S1 p. s
4 k) {0 N8 g. P* m% z使用DSP侧单独调试功能,验证动态申请没有问题,
: J1 s6 x7 U5 w3 }1 q: Q* ~7 J
" N" I1 n, u$ o) |: K+ F4 C但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。5 F* B$ Q) m& k) D( S$ C/ ^
, P2 ]! U: P/ B& t  w. Y# C
* k, [! C6 p6 I- [8 s! g
+ v1 `* V5 i% s: \4 q5 F$ V9 ]7 N

# S7 Q6 T' ?/ q# Z0 B6 f, l% G) l- [# H5 K+ N; i. Q

) {9 A' t5 V* Y: F4 I9 H+ I! a2 G/ x# l, g/ q

$ A: E# ?& N. m& g) ^+ U, j7 K
4 J$ ]/ V- B/ C9 J0 P7 \4 \1 J4 b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明9 }* m, f- d; P
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
" Y' S0 ^9 A2 k  I+ P(不过疑惑的是,为何单独DSP仿真就没有问题呢?); A+ S" H( B4 t* S/ a% W# ~; ^

& L9 R! f" ]( R3 X) Z2 C/ V1 g是不是需要在DSP.CFG中进行配置' r5 y, N( z6 }
我现在的配置为8 c7 C4 n/ X& M& k9 q

, C" c' w% g: r% R) o* ^/*5 W4 m2 ~* G4 `8 G6 c. z0 {
*  ======== Operating System Configuration ========
6 e5 P3 v) |7 m4 q */
* T/ P( m/ b# Z6 c3 t9 w' C# y0 H9 b
/* no rts heap */6 s! G9 Z  _( L& L+ ^; u' |( o
Program.heap = 0;
& |' g5 B: L. X1 u8 g0 G* HProgram.argSize = 100;  /* minimum size */+ c. i' i# }6 i
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大+ @8 w- c+ m" F

. S7 K: C$ l# }+ g& ]- k/* create a default heap */- t" i+ c* b( y7 p5 j# ~0 {' n! V4 D4 a
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 j3 B& I. s1 t  K! Ovar heapMemParams = new HeapMem.Params();
! P' N' h  F% h0 f! P) ]heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大6 x! V: i/ M+ J- v

: a; ]9 D) {, b& q% d/ S/ F2 ^
var Memory = xdc.useModule('xdc.runtime.Memory');
( r6 Y; X: q1 Q4 ZMemory.defaultHeapInstance = HeapMem.create(heapMemParams);' Z1 E3 _' G; Z/ s+ l3 ^, ]

- a+ A# W3 z! Y5 D' \8 ?4 b/* configure System module */2 a( G) V- G: r; _  r, S' s+ `$ e
var SysMin = xdc.useModule('xdc.runtime.SysMin');
2 s6 p1 ~, v+ GSysMin.bufSize = 0x1000;
& G7 g3 m( K8 q9 P  DSysMin.flushAtExit = false;
$ z% E( }/ {( g4 A* u$ ~% g0 y
( z2 `# n3 w) n' {* I! Cvar System = xdc.useModule('xdc.runtime.System');9 Y9 B6 K# O" S. f4 x7 q
System.SupportProxy = SysMin;' f7 [/ D* M' r" ^
$ k. q" B  f, j( _1 K* m! W
/* configure SysBios to use the lower half of Timer 1 */4 F0 R3 f( G: ~1 a
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');# q+ A) n3 c  N% ^- Y
var Clock = xdc.useModule('ti.sysbios.knl.Clock');1 c, d0 ^) i! V
Timer.timerSettings[1].master = true;
8 W5 I; w$ e( N5 s3 d+ o1 hTimer.defaultHalf = Timer.Half_LOWER;! e/ ?, O6 g6 e/ ?/ }- }& e3 p
Clock.timerId = 1;
( r* ^$ X9 V5 D9 c/ a& X, A/ |4 ~, v* X" y1 t; ]

  O) I$ _1 X( \5 W# S, O6 h/*
' O% t: L& U  ^7 C; J *  ======== Miscellaneous Configuration ========
; L4 w/ J* k' `* a */& e8 B- j+ M7 E1 G
5 }$ S2 L" b, W$ o
/* set default diags mask */
- {8 L3 B* M; V8 `% k$ Gvar Diags = xdc.useModule('xdc.runtime.Diags');
( V( h# q. h0 S) b( Evar Defaults = xdc.useModule('xdc.runtime.Defaults');1 _4 ?- y& `( D9 `- T/ E, l. x; ?: }: c

' _2 w: ~& v$ o* W$ F- f& WDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;+ L. _7 a+ @: p, |4 V7 [
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;( W' n- H8 M; a# U0 Q5 _& n  B
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
% p/ U' D; p) cDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */, ~6 P  O7 w; g+ C' ~
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */' S3 B6 Y" o; z4 o6 s3 H
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
2 ?0 n, z8 h4 v) {* oDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;) P: G6 f3 P4 s( h6 @: q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- W* q- d! ]+ \: W/ l( g7 `
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
0 n8 R+ Z/ t7 JDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;1 }2 y$ p6 R- k1 y) j) Z% v
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;6 {7 r4 A1 }" b
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
' h8 {  ?% B6 fDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;% O3 [. R' W0 s
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;3 P" h3 M/ w1 S& ?
! m( C. Y  d. j& |8 J. O
/* override diags mask for selected modules */1 C3 Z8 x  F, Z2 G6 G3 T
xdc.useModule('xdc.runtime.Main');/ Y: B8 F& j6 u+ J' N' |
Diags.setMaskMeta(  M8 s+ W2 G6 U3 W2 H' `
    "xdc.runtime.Main",0 `8 x  Z! p& m" T5 b
    Diags.ENTRY | Diags.EXIT | Diags.INFO,5 _2 I5 u* B3 e+ S8 E; G  n0 o
    Diags.RUNTIME_ON
4 j; W6 N8 o6 T2 E; b. n. ]/ p" `);
7 K8 y3 f! o7 z9 ^1 T' g
' v( ]7 d1 J3 W2 Tvar Registry = xdc.useModule('xdc.runtime.Registry');/ ^, I8 E- p& X; J- x  J4 l3 ]
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;) w% m, \/ E, f
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;! U# |# [# T7 R- M  {2 m$ i
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;. `8 D* ?* ?, J4 _* `
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
5 p. q6 g* Z8 `1 T+ A; `+ E3 p4 L2 u1 D: T3 O, a9 u
/* create a logger instance */# s4 u% B9 n8 I
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
/ s  H: ?" v4 `6 \2 A; T2 h3 V8 Cvar loggerBufP = new LoggerBuf.Params();
8 U! P: ?, j4 X6 ~; _0 {. IloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
( |9 q/ t' h3 D/ p5 c* ]. jloggerBufP.bufType = LoggerBuf.BufType_FIXED;
6 k. _! Z3 L  P' V0 G, i0 B5 s; Z: {$ Z4 O5 h: w. @
var appLogger = LoggerBuf.create(loggerBufP);
5 n: M; h7 _7 o% p/ S2 z$ S( l, FappLogger.instance.name = "AppLog_Core1";! W7 V% C/ l! s7 u0 {
Defaults.common$.logger = appLogger;' g! c# r$ d) N1 F2 n
Memory.defaultHeapSize = 0x8192;    & w; a) [$ t8 x+ Q# B
Idle.idleFxns[0] = "&LEDStatus";& X/ S3 ~+ f) a/ @, e
Cache.initSize.l2Size = Cache.L2Size_32K;7 [# b; e' \1 n# }  h8 y" o

, ?# g* c$ Y  e' f0 n6 T. y
回复 支持 反对

使用道具 举报

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 */& Z/ O% s" |1 U
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 r* f, s( b: \
var heapMemParams = new HeapMem.Params();
$ g* L* r: J; w0 Q% r% `/ D# ]heapMemParams.size = 0x4000;  p, O! z; d3 Q2 [( G
2 H7 ]( R6 r& w& |, C, s
var Memory = xdc.useModule('xdc.runtime.Memory');
2 u  Q+ k$ l% e( o0 b% U: [Memory.defaultHeapInstance = HeapMem.create(heapMemParams);: ?+ @& i0 A7 f: E0 r3 o' K

' s' L: K4 T. i我大约calloc  每次共计大小为5K*16bits,
8 i" Q2 J5 r& z/ f$ ~" R而默认配置才0x4000、需要改大。5 ], i( E5 i2 u) O! J) f, j7 d
4 s1 j& ^6 u  N8 C2 I& M3 A. `& X
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
  E0 F# Z: H( r9 ]Program.heap = 0;9 V! r6 n5 i  @) R; @$ t
Program.argSize = 100;  /* minimum size */
  j7 |* e0 U% G" |6 V6 MProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-31 23:27 , Processed in 0.042390 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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