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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

+ F8 f7 \! Z9 s    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2567 X6 u+ P# Z0 L

, x4 p! e5 X: a, `9 s其他程序段。。。。。
  g) c7 y8 c0 B. i2 {% J1 M
* U2 |5 f2 h) @4 T( r, m   free(x_d);
& U4 o8 b+ x3 [2 ]' f+ l% a: r* ?6 E6 t6 q1 v9 e# ?& @' |
使用DSP侧单独调试功能,验证动态申请没有问题,
0 |7 w) O7 e* [3 J" F( \+ M
5 R4 a/ d; E' C0 `/ ?1 [* F# \" i但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
9 J6 L$ M6 b  M& Z1 J& I9 x

, Q5 }; i5 ^. Z! G( ^
2 f2 H1 u. T7 ~, V( A4 @  M/ N% O! C" c2 r' t8 X
" [1 G# B$ n( K: [! D) C2 i
2 H! q. A$ A9 ~- h; T" ]+ j
3 s) Y4 ]2 h. k. h4 Z8 J, U* I* E
2 e" v7 X" F! v8 E1 p; h

+ X3 `* X, l0 ]6 z6 m& f: I- Z/ O$ g1 `" G

  u3 l  Z! _' _5 s7 Q* |. q2 x' I4 K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
/ y: g  @. T2 _- c# T: R我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
# |. _5 G7 @& H% y1 C4 r; f(不过疑惑的是,为何单独DSP仿真就没有问题呢?)  m# v  F+ W3 b( C( i- Z3 f! V7 I; N
" Z6 y3 t* x. A5 q3 {, f1 T# U
是不是需要在DSP.CFG中进行配置
3 ]6 J8 Q7 P2 [# ?/ N$ Q) s我现在的配置为
. j# R+ I: t! r% x9 q0 C. Q
$ L- \' @8 a* j. O/*
. A8 U$ b0 w8 }. [; g *  ======== Operating System Configuration ========
( ]" p' O( K) e: {' ?/ p */$ Q/ P6 ?* n) X, A

8 G1 ]2 f9 X1 A5 ]/* no rts heap */
' S" y9 V  n* u9 D8 R4 t" B& EProgram.heap = 0;% P8 B2 J& k: s4 ?# k. C8 ]
Program.argSize = 100;  /* minimum size */8 i7 c3 W2 {* ^, K
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大0 Q9 L2 H9 l4 {
) ]$ C: R; m4 Z6 K5 i
/* create a default heap */) N- ?5 _; U3 l6 [- N" Y- Z# o
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, }6 c/ @% P7 x% K
var heapMemParams = new HeapMem.Params();
- `" B$ T1 o* ~: [# m# KheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大; ]$ V/ d7 a' ]# B7 A

, V8 R$ j- e6 u  V' o
var Memory = xdc.useModule('xdc.runtime.Memory');4 L% _# _# W6 k+ H: h8 `
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 k- T9 \, z- X3 h: k  `0 h9 s" z$ u0 l% i% v: n, Z* v
/* configure System module */$ Q0 M# [6 D4 F  Q- `: X5 r
var SysMin = xdc.useModule('xdc.runtime.SysMin');+ n; R8 a' v2 l; K# K- q
SysMin.bufSize = 0x1000;0 K$ A  I! P9 J" R; _) h
SysMin.flushAtExit = false;
, ?$ h/ d- g  V; p3 ?/ _; D
% J2 {. C& w4 ?  `; Jvar System = xdc.useModule('xdc.runtime.System');
) q8 ~) l% J+ m# o* a1 [4 cSystem.SupportProxy = SysMin;1 T/ k4 I$ @. G$ [2 o" F+ k1 ?" W

1 Q6 D, U7 o6 j  ?/* configure SysBios to use the lower half of Timer 1 */
! U. Q: D4 o' ^. w0 d' M& k0 xvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');2 Z+ S0 x7 P0 S" i
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
7 p9 \) v: y9 X8 `# ]Timer.timerSettings[1].master = true;* r, f( A  {7 P6 C8 |5 R- Q# C
Timer.defaultHalf = Timer.Half_LOWER;: z5 [, t+ t$ V5 _7 e+ N. h8 y% X3 B
Clock.timerId = 1;
3 R0 W3 A8 T4 V7 ~5 L" S9 J
  J, D# V; Y. Y; M
" n4 L' h) f( {# R0 z: x/*
. S2 `1 x* H. s" O9 V *  ======== Miscellaneous Configuration ========3 i8 ]5 m/ M5 s0 K- S0 Z
*/, H( j' r+ i1 j' p6 o

9 ~1 e  T3 H6 a5 O* O; B/* set default diags mask */
2 j. y4 z: f* [% \3 y4 wvar Diags = xdc.useModule('xdc.runtime.Diags');
- `9 H: Y; y& F* V( l; Gvar Defaults = xdc.useModule('xdc.runtime.Defaults');
( s# B4 P; S; m# @
# C: |2 t3 j/ }$ Z  b3 M% P# hDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
5 V2 s; d% j; `' `1 s# M  @Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;( M" j: U( D  l$ w4 w% x
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;% [: g) G6 W8 @
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
7 l( T" A" m! {0 P, u* z/ K' yDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
% i, M& O2 X, d. o0 h" c. U# iDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
& C  t! t% i6 l. O3 @: L/ ~4 tDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
1 M3 o+ b+ M# f' L( Z* J! IDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;% |0 x1 c0 g$ Z# \9 a
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;& d2 ]% X) B, X% H. c4 ]
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
  K# O1 _2 @" ?8 A+ z9 tDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;$ U$ e' P2 B3 {, [' v2 P, ?
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;6 R: K! R8 F) ?1 d4 q2 \
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
+ ~8 @/ g7 o0 L! N6 UDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;( n+ b4 A2 W) g6 M9 P* P3 x

. ^$ O6 u1 v. h# u/* override diags mask for selected modules */3 p+ I! x; Q5 \9 u, D) |( F
xdc.useModule('xdc.runtime.Main');
- ]8 C* k  n* G2 o" q# |Diags.setMaskMeta(0 D+ R  q. l/ ], ]0 t9 J
    "xdc.runtime.Main",
( ^* K, T& I3 W    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ u( s* A+ M4 r  y1 N) H    Diags.RUNTIME_ON
, ^" l. w8 l& [- P5 W! _& F0 p% A);
  a: {1 |7 j/ L# z( B' X* h7 }- h
  J* L% w' O7 gvar Registry = xdc.useModule('xdc.runtime.Registry');
+ y) l( L( P% ~4 v) TRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;; c, C' `3 H3 X. H7 C5 Q* N
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
+ W- e  {: V. t' v! gRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
1 ^% V5 h) u8 a$ v' L. O  ?Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
: H! l' P# @1 s' {
! s( M1 G6 ^. a/* create a logger instance */
$ o" E4 {! `5 j8 g0 ivar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');2 E2 q' g2 N% l* r& c1 L* W
var loggerBufP = new LoggerBuf.Params();% _! y" \# B1 M  ~! W
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
4 z" h: x" ?6 L# |0 rloggerBufP.bufType = LoggerBuf.BufType_FIXED;% ]8 H( i' a) p3 U0 c" e

1 e/ y; x  h. E) T5 w5 m' j: ?3 @var appLogger = LoggerBuf.create(loggerBufP);
0 Y! S2 A  O8 o, wappLogger.instance.name = "AppLog_Core1";
/ g; {2 Q! f1 S; \" _Defaults.common$.logger = appLogger;
, _/ ~5 H* Z% i, G; B+ ~' o6 QMemory.defaultHeapSize = 0x8192;    % @, Q2 U/ g: q+ g* X* i( o. t
Idle.idleFxns[0] = "&LEDStatus";9 z6 R1 P0 Z  }; Z8 z5 Z* A: L- W
Cache.initSize.l2Size = Cache.L2Size_32K;/ a  W8 Q9 M2 i& P3 S

& \1 k/ I; n* ~/ k
回复 支持 反对

使用道具 举报

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 W  c  Z7 f2 G7 l+ {
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: s, t" M1 Q0 X; b3 Y; y7 ]
var heapMemParams = new HeapMem.Params();* L* t# g9 N# _% L( F! p1 k
heapMemParams.size = 0x4000;
: ^2 b+ }' L! D. N* S$ A# ^. P" O& Z5 ^
var Memory = xdc.useModule('xdc.runtime.Memory');
' P: y* }7 E0 `* M" WMemory.defaultHeapInstance = HeapMem.create(heapMemParams);' |1 V4 a- z0 I8 i/ R* ?9 k8 u
' R7 R2 V$ r/ u& V* g  C$ f$ ~
我大约calloc  每次共计大小为5K*16bits,
$ _  K$ ~; V2 ^- D而默认配置才0x4000、需要改大。9 m# z4 C6 s4 |' t
) u9 Z1 ~2 G7 `, }
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
+ N. y2 Y- m' E3 f3 P5 l! KProgram.heap = 0;
$ h5 W7 N" L8 X* F9 T+ ?6 XProgram.argSize = 100;  /* minimum size */
+ s1 P4 k, H5 V% I+ AProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-18 21:57 , Processed in 0.039378 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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