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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
% x7 F: f% m2 ^* F$ C" B  q; T5 t1 D& {' r" {: T% ~$ _0 h
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
0 q8 a( i: {( I4 [8 z7 ?
  ?6 {( E& w; H* \$ V" x( O其他程序段。。。。。
/ y' n, y; }! q9 U5 n, g
7 a0 X* ]0 b8 G% l* ]   free(x_d);, Z/ J& Z( i( x$ r% d2 ]6 A# h
' e9 P, ~, s2 F$ o) r
使用DSP侧单独调试功能,验证动态申请没有问题,
+ u' P$ |" g" M3 V2 r. c
$ I1 H+ `  G7 K* C9 m. S但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
4 F0 |  Z5 ?  _; U
9 D- `* I1 E, o/ s+ C8 j  @
  q8 i6 w/ ]) p6 }- b
3 x/ q  X) ?, V, Z9 @3 ^

! v8 p$ V" u5 Z, n
3 V2 }/ M! q4 m" i3 N; j6 l
  {- \. U. m0 @9 E' l. ]. k" a' g$ ?7 l) k2 F
5 V0 C4 Y8 X) L' s; D

5 C1 J( e1 X1 k( h8 T1 w: {6 h7 J. f# a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明' p% k2 Z  H4 ]! z0 a/ H3 y
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
! p, p$ g. V; Z) a3 l; _(不过疑惑的是,为何单独DSP仿真就没有问题呢?)1 L. a3 U- m4 t6 {) F+ z

5 x6 X6 m# i9 W; o* @" D是不是需要在DSP.CFG中进行配置, M  h! i# y2 @& q2 W: E6 T9 n9 w
我现在的配置为  b2 J3 B8 v- d# t$ ]
1 F9 q: g8 G; d& Q7 l" E  W9 k/ }
/*
( A# t0 r2 c( | *  ======== Operating System Configuration ========! N! R4 p" d" D/ E/ ~0 w4 }
*/
: K+ X# C0 e3 k' w* A
3 l) [" c1 X7 |- ?/* no rts heap *// {& r( C, u# C6 I9 m
Program.heap = 0;
. F4 f7 ]9 v0 W" q/ n/ h8 o) U  r) pProgram.argSize = 100;  /* minimum size */' d5 u- U; N$ L) K; m
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
) p0 }' W% A! T+ H' O4 T4 Z7 m* G# J& C
/* create a default heap */
7 J: s2 Z& q) Z; L0 rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, g; A. T. l% P) m
var heapMemParams = new HeapMem.Params();
* w: i  H0 J) s/ t, X) \8 qheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大! y2 Y( b6 v4 O) W7 D% ~
/ K6 D4 o5 d  r/ v8 Y5 i) s3 o! e- ^3 k
var Memory = xdc.useModule('xdc.runtime.Memory');
4 K5 @6 K, {  X/ b  bMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 a5 T1 E8 Q2 b
: Y2 n6 o% |: Q" T8 v3 I/* configure System module */
( d2 y& ]" Q8 i" h) |var SysMin = xdc.useModule('xdc.runtime.SysMin');
  m3 V* o6 v+ G# R# Q+ n, dSysMin.bufSize = 0x1000;: i- O2 M! J! T
SysMin.flushAtExit = false;
+ D" `5 E9 S: c4 H! F. d: f) ]1 v: c& v  A, C8 F
var System = xdc.useModule('xdc.runtime.System');
" H) w- d  R5 E! h! CSystem.SupportProxy = SysMin;7 H( X  c7 u& n% |1 x) N# I
0 _7 l' ~9 y/ c* h
/* configure SysBios to use the lower half of Timer 1 */
  i% i) `2 ^/ p4 lvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');  b& S. ?+ R) o
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
4 O, `1 u. {: M( X7 u3 @6 q: E' q7 _Timer.timerSettings[1].master = true;
- `! t5 S- b: N4 g1 XTimer.defaultHalf = Timer.Half_LOWER;
+ b( B' ^3 A9 [; R) P$ F) nClock.timerId = 1;/ F5 D4 |5 c: V6 x4 ?4 `

2 c3 T7 W& L! A5 {# E4 Z
" E( }% ?8 a: @# T  y/*9 X) ~, w# X" i, Y* v
*  ======== Miscellaneous Configuration ========4 D' i4 h) b7 X! l9 }5 P! m9 _- D
*/
# }4 r! R+ r/ R6 w% I: B8 b2 {! ]$ W4 j- [7 X$ y5 S
/* set default diags mask */
! C3 v6 X; h  W2 W* tvar Diags = xdc.useModule('xdc.runtime.Diags');
2 Q5 Y: f1 X8 Y1 {. V0 R1 hvar Defaults = xdc.useModule('xdc.runtime.Defaults');% i$ L% z& k# g: R+ i
5 a5 y! J1 I  l2 h/ c
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;1 i# \8 b1 J& ~. {) L
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;0 G! f( v2 Z  [  V0 t/ u" O2 b
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; y6 {. y' ?5 h3 z& aDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */% E6 C+ J1 V% d6 c  u
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */8 G' T3 |; j) X! q9 A' O4 i
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
% K  U, d, T+ A/ Y/ {2 e2 X9 a5 q2 GDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
! D) B; g, h' \4 o  N3 G+ DDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
: Y) ^* _2 m" o$ u; pDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
0 o/ I- E6 M8 Y2 n& Y: hDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
( f8 I; n* i% [* x5 KDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;& n) s& b! x2 S4 e# g( x% \
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;  h& O. A( W3 X( g% o3 x, ~, V: b
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;$ t* r5 w. w4 Z! Q
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
8 C' \! y5 E  m8 S& l2 ]9 f' j: Q# k9 M5 w% w' r* y" a$ H
/* override diags mask for selected modules */5 z6 s# r7 ?1 h; I3 }% a
xdc.useModule('xdc.runtime.Main');
- O9 ^' t6 N4 i# Q2 {! Y* Q# I$ ]Diags.setMaskMeta(+ I; B( q3 P7 q# _0 P
    "xdc.runtime.Main",
7 H0 [2 w4 a2 O8 [& L+ J% A" F    Diags.ENTRY | Diags.EXIT | Diags.INFO,, K7 G+ n4 _( B& f' k2 d% D6 |
    Diags.RUNTIME_ON
3 S7 e7 r1 K5 L  G* j0 M6 t1 f3 D);) S0 ]* x6 Y# y+ n8 [' K" {

% V( t) a8 {+ U4 G" W  m; ~% gvar Registry = xdc.useModule('xdc.runtime.Registry');4 B2 x# C. v1 D: v/ C% S
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;4 U1 S. Y6 u$ N0 \1 m
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
' u& [6 `' E+ ^Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;- v. S$ i/ B7 e( ^) S* P
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;0 D5 u5 V$ o- j: @5 F7 [9 u
, V( N- p$ k+ e
/* create a logger instance */" Y( f, n7 h5 v3 H/ Z* O4 I6 b- ^
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');2 Q# O2 N1 k; P: O& Z) Y0 W; X- e
var loggerBufP = new LoggerBuf.Params();
" d: R6 q% A9 E* J" AloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */. r6 \- m8 N: `/ a4 x
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
1 u3 Y: B% S  W, `1 P) y
( P( j0 z7 n# w0 V8 ^var appLogger = LoggerBuf.create(loggerBufP);5 e! R  n/ y$ M# g" q/ P
appLogger.instance.name = "AppLog_Core1";* [3 R( H/ X+ f0 g
Defaults.common$.logger = appLogger;
" H$ Y7 i/ |1 v" h6 `2 }Memory.defaultHeapSize = 0x8192;    2 Z5 j- o& _" ]! s& J: y# b
Idle.idleFxns[0] = "&LEDStatus";
: ~9 F0 q, k& v! S- g' p# QCache.initSize.l2Size = Cache.L2Size_32K;
6 w! Y$ a8 f/ ^, K
' n) C9 Z; V8 a# H% F! U
回复 支持 反对

使用道具 举报

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 */5 Y0 ]0 T. z0 J( g( |8 S
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 X: V/ K- p/ \' R
var heapMemParams = new HeapMem.Params();
, v2 T1 T# _& u- Z& NheapMemParams.size = 0x4000;
$ k  |& x# [  A- O& ?
7 z. Q* T3 S# V9 g4 ]' B" svar Memory = xdc.useModule('xdc.runtime.Memory');1 o% Z6 E: q/ b8 g; [$ O. b& P# A
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
; q8 U  ?! J! K) e9 y$ i2 _9 r) i1 Y" v/ S/ v
我大约calloc  每次共计大小为5K*16bits,8 J& W1 X2 h( w- E9 Q
而默认配置才0x4000、需要改大。  ~- l5 W- T0 R: F  c: @; _5 w

$ Z: g$ s: G; f, W* a
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */, k+ z$ P9 W; D; S4 X/ A1 J
Program.heap = 0;
, J& ~( S$ P5 n& N4 ^Program.argSize = 100;  /* minimum size */' V+ @) P# ~% v- o- ]
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-7 04:48 , Processed in 0.041984 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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