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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构3 F  u4 u* K* `5 G# ?. }

" V: H: O' e* o    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
4 c# D' L, V/ i6 g1 G" L( u1 r7 r/ x4 n  v- z3 ]# \
其他程序段。。。。。
/ o; N) c& v. f# @& d  a0 i 8 W' ^: D' O5 s7 p
   free(x_d);( A4 N9 [+ z' ?, T8 M

3 N1 j# l  m4 ]使用DSP侧单独调试功能,验证动态申请没有问题,+ D* O# _$ G, l/ ?( Z2 \" P% N

5 }% \( m) u* F2 h1 @! V但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
. f# ~$ s/ Z  \$ H  Y" b: k3 L

  H6 ]/ L2 T5 `7 Y+ a9 q- R; s0 d3 l3 b( t# h
' N4 w0 h9 D* z/ m6 @* Q! M" z

  W  ^8 H: @  k8 l4 H
7 Y' u6 p3 P2 X+ w, C8 n- T9 Q/ w& a1 F1 ?

0 Q& q$ t  a/ J. n
5 I  B' r! U" i3 ]. I: c
4 E: A; D4 u  h! g# h- t# h( R3 g0 O$ {- `
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
8 P- s$ [" F$ x5 P# X7 w9 Q我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下6 h( u6 ~  e9 b5 w4 Y5 _( ?
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
" m  G5 Z. e& R* ^! c& ^
6 X$ q4 C' t7 G1 \" o
是不是需要在DSP.CFG中进行配置
& k2 Q( J/ L  e- h( @$ S7 C, _. U8 d我现在的配置为. a  e* s2 e5 ~  {/ S; L* h9 `
2 D3 W8 b- n. M' f" h- h
/*! ^0 ^1 l7 F! q5 ]% S+ T. G5 }8 q
*  ======== Operating System Configuration ========
! M* x8 q5 d7 H* e- c2 f- n */
! x; L+ L& u4 Z, A1 L
% J1 }, ^- C2 l! d$ K( D" Y/* no rts heap */. l9 c/ n2 ]6 o
Program.heap = 0;
  h% s9 x0 E. zProgram.argSize = 100;  /* minimum size */
( [0 D& @( w! c; Z) @! TProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大( E! j- ~) M5 M" O* v  X

# g' E; U" S) y, F4 s/* create a default heap */$ L  B2 p; L/ W/ b
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ X; I* H* Z/ e# P- d
var heapMemParams = new HeapMem.Params();
0 s& |- z5 l2 jheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大% ]) y) ^9 h$ a( F* |

) q4 f1 S' l6 v' Z$ o5 e
var Memory = xdc.useModule('xdc.runtime.Memory');7 e; \# K4 M; n+ m
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ M) V7 m7 _9 r0 o- ~; b

1 o+ x- }7 W* c: h; C5 ?& E. Y/* configure System module */
2 t; q5 y9 x: p. z% h7 Q: Nvar SysMin = xdc.useModule('xdc.runtime.SysMin');3 `0 n" C: X% J' c0 G8 v
SysMin.bufSize = 0x1000;
  V  @: w+ H  M6 E  l/ cSysMin.flushAtExit = false;# M, `8 G2 j& j9 G$ ]8 T2 u5 @
+ ?( v5 u, u/ W) g. @
var System = xdc.useModule('xdc.runtime.System');
$ v' P1 u. ]2 G- C0 y% M/ f. LSystem.SupportProxy = SysMin;& J$ e  i4 E4 m- ?7 y6 U

3 b  ]: Y7 M) E) i# R0 M/* configure SysBios to use the lower half of Timer 1 */
- Q  N( N. n/ M6 m- G8 C6 J5 @: pvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
  m. M& ?- w5 u( L% K- K- Y$ _3 G* rvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
5 _7 C' w( y# o7 E" h( K) B* ZTimer.timerSettings[1].master = true;
# A5 G$ z  i+ [* t$ U/ }Timer.defaultHalf = Timer.Half_LOWER;
! {7 |7 u' s2 N5 h8 k: H) l! RClock.timerId = 1;
) R2 h# C* [( j  s
- @3 b  a6 ]4 W# k6 E7 a3 i8 \2 S9 k* ^& _. S
/*$ D. j- }# f. t" j/ F# M8 o
*  ======== Miscellaneous Configuration ========
% h/ `- R2 d- O% p1 s1 Q. ?$ C. _7 c) J */
' r% \/ H! E# i
! r6 v8 O, s8 E/* set default diags mask */9 K1 N$ r& |# X( D" v
var Diags = xdc.useModule('xdc.runtime.Diags');; R; g0 T' o/ j- _' M% X" X( V% n
var Defaults = xdc.useModule('xdc.runtime.Defaults');
3 D  g! }* S: r2 Q9 N
6 N( F1 h. m8 Z0 m( gDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;% [8 ?* Q* E: h: q$ ]2 y; Z
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
$ ]8 h" ^* z: b  dDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
* G$ R+ w0 H" [% `- `1 DDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
: G5 f4 p# C# I! w% UDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */2 Z8 P0 N& {$ ]! x- u1 J1 v4 c
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
9 |) h1 S/ y, o+ v! u* b& dDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
  F$ h2 [$ V4 ]Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;& n$ e# }. N5 }2 J% ?* p6 S. N
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
/ a) ?: f( m  W2 L6 NDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
4 S( y, V1 U8 \# @0 x8 u7 ]# J  |Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
9 G1 K: g8 m" L4 p3 ~Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
7 m3 [! ]( }5 s$ X; K. MDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;/ }, E1 T/ K2 L' w: }& {
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
+ n0 L) K% [- J0 y! A" \0 ^, t
1 z. @' j( P1 O0 b) [: n3 J& {/* override diags mask for selected modules */
' Z( a4 P4 u$ e; {0 I% O& Z% ^xdc.useModule('xdc.runtime.Main');
6 k5 {+ f! p  z. J( M- c# f: ODiags.setMaskMeta(2 ~# a) \. E# v8 Z8 ]! q. y
    "xdc.runtime.Main",! S0 o3 `1 R% G' P
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
* C6 K+ _1 u: y, L; B5 o/ c7 R4 a    Diags.RUNTIME_ON
) L1 ^1 Q) D, X& m  u/ F);) |0 D1 m; U# ]

/ S: y4 w9 D5 ?+ X& W+ q/ Lvar Registry = xdc.useModule('xdc.runtime.Registry');
" g) q& [. u3 a% F2 KRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
& B9 A1 S2 S1 A# B2 F8 k  Q  c5 iRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
7 |/ q3 G( B! ^  HRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
/ ^+ h5 t0 v; n) zRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
6 {. w& a1 e4 S" r9 t& q  ^$ |; \
, B/ _* j( `! |. \% o2 F/* create a logger instance */
- W7 V3 i+ _. x; Q$ A( N8 _" Wvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');8 U* h& k( Q6 M- Z9 ?+ v
var loggerBufP = new LoggerBuf.Params();
/ g2 H7 A9 h% G7 lloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */( G3 `7 [; Z  o8 a0 p  \& p9 P
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
3 K9 E2 j  G# p  @8 i$ V8 e; ~; q  N$ g+ M- D
var appLogger = LoggerBuf.create(loggerBufP);: {/ c: `( J$ X% Z* U8 O) f
appLogger.instance.name = "AppLog_Core1";1 f( Y  q" l1 U
Defaults.common$.logger = appLogger;
$ X5 y( a: f" |. I# D6 [$ YMemory.defaultHeapSize = 0x8192;   
3 o1 j( A  \9 VIdle.idleFxns[0] = "&LEDStatus";/ g9 @$ \" E( |! h
Cache.initSize.l2Size = Cache.L2Size_32K;
* E" U. V4 [1 S8 D- Y; U) z: C$ t2 w- O0 D$ d$ J& j
回复 支持 反对

使用道具 举报

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 */
+ g4 M4 S# L! V- y8 }! _6 P: ?) Hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 m1 I# G, T% ]6 \4 bvar heapMemParams = new HeapMem.Params();
0 o9 D  I8 x! P# i: R; u% L1 @heapMemParams.size = 0x4000;' F; j7 x9 I, C9 D& c
( O  ?; Z9 A* {/ X7 J/ w
var Memory = xdc.useModule('xdc.runtime.Memory');/ J$ ?( L; s; X/ n* Z! f
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
, f9 _4 O# ~1 |% V6 q/ l# z% ]- y3 d) v1 }( y+ D
我大约calloc  每次共计大小为5K*16bits,' z8 s: J; M, \& ?' ?& }+ v9 I* x( z
而默认配置才0x4000、需要改大。! ^& n# J* N0 v! m9 Z; D( W$ g

0 F, Z4 Q* h; i4 z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */. i3 O% n2 _. a2 A6 ~! w
Program.heap = 0;$ m- {  o7 R! m
Program.argSize = 100;  /* minimum size */" ^, ?* ?9 x8 D: [
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-1 18:06 , Processed in 0.040499 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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