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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构( b$ Z3 U, O9 ?: U0 d8 N5 O
& i  C: u* L2 ?& R% k: t3 c
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
+ ]) Y5 N4 V+ C( ]% f+ ~9 P; P: J! h" u" {7 ?" Z. D" E( z( X7 M# P- l
其他程序段。。。。。+ ~4 u, V% M6 v3 x1 ^
. `  g3 i# O9 b9 E; |' d1 i
   free(x_d);5 y+ b1 L+ j- u. e% c3 E, s
. T8 g, T& }0 J  Y+ @: Q
使用DSP侧单独调试功能,验证动态申请没有问题,
# f, U; ]2 @5 U1 i, p: d1 S9 I/ G+ Y8 O* Q0 v+ U/ B$ v- M  o# Q6 q
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。8 x- m" M! x8 {- n# V
3 l5 Y& l1 [2 K' Y( G

- A3 K+ f) W; d" ^9 m: I; |& F7 d$ n2 S* o! e8 ^1 Z9 @9 D) q/ p

' D% V, {8 @! s
; h9 c2 [7 G6 h# @. k0 I9 `! _5 x
& O' p% i  y, ]2 f( p6 n8 @8 e( o- o5 E% y, ^- m/ Z( V: s+ K

& K7 X! X! t1 V5 f! q9 U7 A: Y5 U+ c7 Q6 H
' x- Z" t3 K) U9 U2 j! V! |. d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明: n0 f5 y8 f* z) E' F0 f4 k  l
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
# d7 X9 D! e/ j* s2 Q0 M& G(不过疑惑的是,为何单独DSP仿真就没有问题呢?)# ~- F* C8 `2 E# O  j8 W) ~6 v

% f. p; y  U6 B) l: A* }; r是不是需要在DSP.CFG中进行配置) m4 {/ S5 V5 ~
我现在的配置为
+ [# U- `, d4 F7 h0 A( a2 W8 k  Q& Q* D
/*6 Z" B) r( E4 X/ Y, G  r; z
*  ======== Operating System Configuration ========
. y3 E- G; T+ v% X! s7 R! G */! I4 {$ f. J) s9 F
% y2 `3 L! R4 i4 m
/* no rts heap */. [# E% d0 |2 r% R' B
Program.heap = 0;4 C$ O! D, P4 H  p% o% e2 ^
Program.argSize = 100;  /* minimum size */
; [! r0 K$ w: V$ o0 w' \) e) gProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大. {8 m. w6 _' w
4 j5 D  b6 b- A' ]+ a+ l
/* create a default heap */
+ N4 K  z* z/ F3 J) pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! {( D! F6 e4 U! K  Yvar heapMemParams = new HeapMem.Params();8 ^! }" ~* q* t$ Y" {' [
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大# n8 W8 A/ H/ u4 ]8 B

9 G, l5 Y3 f5 j" A- B
var Memory = xdc.useModule('xdc.runtime.Memory');
( k: a$ a' K/ }: k8 Y2 |5 a0 dMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
% _. W; c% X5 Z+ u( [4 h: _8 L, h; ?- J) g
/* configure System module *// t2 U9 x" I; e$ V0 P# q
var SysMin = xdc.useModule('xdc.runtime.SysMin');" H' b9 H- b2 v( Q! e/ U3 P9 z
SysMin.bufSize = 0x1000;* @0 a( e* c/ w, W9 z* K
SysMin.flushAtExit = false;- v! p/ i- G# F8 T1 X! _

! B2 P: D8 A7 {2 h9 Y" N" Z$ Dvar System = xdc.useModule('xdc.runtime.System');
4 a/ E2 b7 h  Z5 }3 Y1 m% MSystem.SupportProxy = SysMin;5 Z0 }: ]7 D- ~7 e- N! ?; m2 P
- w" w# ~6 X$ i) V, y7 Y$ W
/* configure SysBios to use the lower half of Timer 1 */( L8 ^8 `+ ?: ^$ P9 r0 X
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
) W; J0 R! }1 V0 X! ]var Clock = xdc.useModule('ti.sysbios.knl.Clock');
- ]4 V% V2 E+ wTimer.timerSettings[1].master = true;
6 P& P* L3 M( c/ r6 R4 o1 xTimer.defaultHalf = Timer.Half_LOWER;
7 o0 h/ Z5 k) C7 s% s9 lClock.timerId = 1;
- ]. I, J" G' ~( g& C4 _9 {( C; i0 V& G, _. b# d, i3 f
- B  H. C/ ~9 u
/*$ Q" y( D9 V3 k$ i" i* T4 \( a5 x
*  ======== Miscellaneous Configuration ========
8 _3 _( Y4 E2 \, ^( D% R */! L0 S# g4 C1 s8 l, h" I
0 }3 s1 n' y( H: t
/* set default diags mask */7 a6 o! M, F( S8 w1 n( V5 ^
var Diags = xdc.useModule('xdc.runtime.Diags');
' Q5 r# v( l, x5 r/ G. Y  ]var Defaults = xdc.useModule('xdc.runtime.Defaults');
& ^6 L- W* t1 l1 |( p# W0 h1 N# J
8 T5 N$ M* J5 l. ], t1 v6 @  e, \Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 b) S: ?; o( j+ @9 u2 _- XDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;$ i0 m0 q4 V& f! g& Q' }5 C" c
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;5 X6 w: n% G1 G4 R" ?/ i- T
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 ~! a/ x% p0 ?
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
. Q2 [, a- O. u+ O# N/ u; ?Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
( H2 p3 t7 @# d: P7 u2 |( H- qDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;9 w$ b; E2 d1 t* I8 U0 D
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
, z1 K7 F; P' e; y6 E8 nDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
6 `, {! @% E) l9 SDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;; Y$ {; n' |5 N6 @( {
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;' r5 H9 H' b7 [) T/ H5 P
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;1 q7 s& O8 U3 F& E% ^6 r
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;, H3 O- f; N$ `* Z/ U
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
) f- R1 q$ S4 G* J% Y8 s% R* B, d# k1 l5 \4 y2 C) |$ t
/* override diags mask for selected modules */0 ~3 R. X- H2 k: t6 e) a
xdc.useModule('xdc.runtime.Main');
" p/ ^; V  @, y  k" ~+ mDiags.setMaskMeta(
( [2 b7 N# _/ J$ P: A# l% i    "xdc.runtime.Main",
6 @' z( ]; Y" l7 y    Diags.ENTRY | Diags.EXIT | Diags.INFO,
4 q0 d2 h+ Y2 L. D! a' d& [    Diags.RUNTIME_ON
% U# @# E2 ]' e" P);
' T1 h4 E/ S- U- N' j- _% }4 P6 {0 H" L
var Registry = xdc.useModule('xdc.runtime.Registry');  S& X) _7 |. J* K$ k$ @3 v
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ P8 E9 Z8 B- u) h
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;6 r# B' o) W: t$ O" d7 t4 k
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;1 S, C/ @: l# v% V' I8 |
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
* h6 Q4 W' K6 c2 q) @; q  k4 n" ]. D  w0 j# G
/* create a logger instance */
, g3 x: S" J) ?' S7 E- W" p/ g8 F( lvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');  n' B7 o* C/ `9 b
var loggerBufP = new LoggerBuf.Params();% ^) W2 J9 O3 L, v: ^5 H0 _! W8 U9 Y
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory *// Q" x3 w  |9 j. n; U8 Z
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
, a6 F) M5 I2 |+ v+ J
. P$ q+ E5 Q% h/ E' lvar appLogger = LoggerBuf.create(loggerBufP);! F" X" j9 b9 ?. T  S
appLogger.instance.name = "AppLog_Core1";% x7 F! T* |/ y, ?  r
Defaults.common$.logger = appLogger;$ {% H9 n( Y, Z( I
Memory.defaultHeapSize = 0x8192;   
$ k1 E  ^& @  B, aIdle.idleFxns[0] = "&LEDStatus";' G2 J% ?0 d$ l
Cache.initSize.l2Size = Cache.L2Size_32K;6 D' O9 x1 Y+ \6 W: p
( g: U. w' A$ V1 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 */  k* Y  H, M8 |# |9 M: f# `# H
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 H3 i" o7 T0 E/ d: X+ W  R6 u
var heapMemParams = new HeapMem.Params();
5 r7 k5 J4 v' dheapMemParams.size = 0x4000;
  g! ^3 B' i! y8 W3 Q* L, ?- L9 E, l5 M4 a% E+ k
var Memory = xdc.useModule('xdc.runtime.Memory');6 `+ P  l5 W$ s* \2 Z8 `0 M% A( t5 O
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);. R: u$ q  K4 }/ i# Z3 l2 E
. w2 T5 O1 r6 h0 `6 V2 b4 z6 ~# r
我大约calloc  每次共计大小为5K*16bits,
) K9 ~9 G' _6 D2 [0 k而默认配置才0x4000、需要改大。5 ?" O+ H, `8 M6 g) y+ E
6 @8 v1 `& V! N$ L9 q& m+ |4 J7 M; A0 j
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
: r3 Q& b3 M4 |) _Program.heap = 0;
1 u: G- S7 K8 i* e. P3 p: [Program.argSize = 100;  /* minimum size */5 j% c# x' r2 h5 n3 ]# c4 M
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-30 23:10 , Processed in 0.042925 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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