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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

9 N" G' a9 [! s7 Z( K. o    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2560 X. e0 q6 b2 `% |- D( b. p0 d

; A7 X- Q/ [4 R0 e' M1 u2 H$ G0 W其他程序段。。。。。/ i0 x2 [8 ]  S1 a9 q* s

  A0 q8 H$ K* ?. d' D1 O5 U5 f% U   free(x_d);$ a. R5 d4 o+ W9 k
4 F& W+ x$ h$ `( `& o
使用DSP侧单独调试功能,验证动态申请没有问题,
9 `# P3 G" I* }6 W5 a
) R$ _4 [* G  t" F  _: [但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
( z+ T7 C; @% `6 K7 @9 l: I

2 ^' q$ v) M5 o8 G9 n7 I
3 I2 g2 z7 o5 c0 |
1 A" s& X1 u9 k* K% d4 B" ^# ~" r( o/ v, q( ^4 V6 D
8 [7 ~/ o  m( o% q& P. T
4 n' M+ U! m, m7 f9 w7 K, V

  _- d- t4 O: A3 W5 p" g: C) a+ e  e  e2 m6 q( S4 I1 ]5 b

: ~: n! o- g  l# @$ k. J6 W9 C. ^( T; [6 y( k/ ?! K: ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
7 ?, s/ t9 `7 [! o( m, ?5 G1 Q% q3 CProgram.heap = 0;4 ~0 u+ Y$ i4 v# l
Program.argSize = 100;  /* minimum size */
5 g- X9 |1 o6 w* U2 Q9 O# kProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
4 O1 ?% Z; O" c1 fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 v  v# X; J) A" ]# W! u% u/ lvar heapMemParams = new HeapMem.Params();% S% F4 {! S. p/ i' p$ S
heapMemParams.size = 0x4000;5 Z& ^0 F  ?; S; Q, u  z5 v4 A
+ ^0 Z; z( Y" m/ A* }
var Memory = xdc.useModule('xdc.runtime.Memory');6 g! L+ j! ^1 C& l( i! K( Z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);, _' z2 c) d. y+ L
! N( b) q3 I# b' }
我大约calloc  每次共计大小为5K*16bits,' g4 B! @* T5 q
而默认配置才0x4000、需要改大。
, l$ K" E6 z* R) S  P
; \; ~8 C/ n) a2 d$ T0 s
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明- b. r& W1 @5 d# W5 ?
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
+ {4 A& Q! J" A$ h" A* u. S3 [7 r3 c" g(不过疑惑的是,为何单独DSP仿真就没有问题呢?)7 [+ \2 ^& J- h; M6 _" z
( @) |- i. ]! k; X+ d/ W( Y
是不是需要在DSP.CFG中进行配置- J7 x7 F- \4 M; x: L
我现在的配置为
: ^2 J1 ~7 w' q+ F, i
3 q, t5 e+ {1 t+ x/*
2 c$ L5 k. Z  e7 e7 V *  ======== Operating System Configuration ========
2 p2 t& y( W9 k# l# a; e */2 M% M0 j* k7 q- p0 D, C+ I

# _3 Y0 u& `) t/* no rts heap */
1 [5 N% S9 P( g/ C. yProgram.heap = 0;1 n: N7 p! b) K: F: u/ a& J, j
Program.argSize = 100;  /* minimum size *// ]) G& K; D+ q0 f8 `* d4 e  ]5 U
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大  Y4 M5 E( ?$ a$ u/ v
" C% \4 X& m3 `2 w
/* create a default heap */
" y7 o: d* t) P( y0 j+ r7 pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; n6 ]; `9 _' A" y; r& a( I
var heapMemParams = new HeapMem.Params();; j' V1 m4 O% p9 E# H* {
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大2 }0 Z. p) g6 L/ N
& w  F: n" a/ Y2 q: E( L" s
var Memory = xdc.useModule('xdc.runtime.Memory');
" V  a  k3 o  H8 }% d# r" _* ^Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 H& C! D5 N+ ~" I+ p* L9 p/ b% O2 n8 y4 o7 A$ R
/* configure System module */" ?, q# l0 H; d
var SysMin = xdc.useModule('xdc.runtime.SysMin');
" t7 z! R2 c# D% d. q; MSysMin.bufSize = 0x1000;
3 S) n; N$ C# e: c* h6 aSysMin.flushAtExit = false;6 ~3 ?! n+ V( D/ c( Z' E7 V

, ~9 N; w! a+ v) t! Kvar System = xdc.useModule('xdc.runtime.System');
; Q( f6 Q# n3 Y/ }1 D$ J( Q0 Y0 }System.SupportProxy = SysMin;
1 t" n0 f6 A6 {  _
6 R  j) C7 y; a$ Y$ @- J. g% |/* configure SysBios to use the lower half of Timer 1 */
$ N& X, H5 k0 a, s; Cvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
9 v& \/ U; F* h3 y) Avar Clock = xdc.useModule('ti.sysbios.knl.Clock');+ A8 P4 l+ ?0 a% |
Timer.timerSettings[1].master = true;+ o0 {0 e  V$ `6 L$ G) X0 l
Timer.defaultHalf = Timer.Half_LOWER;
; |4 k9 F+ Q5 Z9 ]  A" r3 M4 v# yClock.timerId = 1;2 v' ~7 J2 e7 {% p

$ o  ^7 N8 q# p8 B0 y1 S/ ~
  K$ e  e# p: m' X/*
9 V% R) `6 ^, \! o6 v *  ======== Miscellaneous Configuration ========( q  O+ c3 W7 A& u" X! t- l
*/
& U+ N6 ^2 V9 T: i" E9 X
* }5 {+ l; N# p3 H% m! {/ U/* set default diags mask */
- g/ V/ E4 G) p  w. b* U+ f, \! evar Diags = xdc.useModule('xdc.runtime.Diags');
9 A9 I6 V4 n. ^: e3 w  [6 bvar Defaults = xdc.useModule('xdc.runtime.Defaults');
6 {3 ~/ B+ P7 n/ q' g7 m
" @' @" P# W5 |- DDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
# n9 G2 D3 J7 X' p" N" BDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
& H$ U& d9 m4 N3 h* ]5 V. R  aDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
* D/ _; n4 e8 O2 j5 d7 }4 X, C4 w% EDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts *// F" Q+ P2 P: V1 y3 {) H
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */; g$ d  G5 \1 N* `3 [# z) Z& b8 V
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
7 \- ~/ t- y* S. SDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;2 e  T! D- s$ w% E* s; c
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;$ t$ {$ ^$ Q' h# G1 u% L1 o5 `, C. |  u
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
7 n( Y: o6 h5 S% R# e8 B- |8 ODefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
( {0 _- d6 E* j" c5 E' t' FDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
: s# G2 @6 I+ ?( Y, \Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  Q" d( y5 B5 K  lDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
! ^8 V/ b% |, f& L0 n7 L$ j$ NDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;7 l3 o( p+ L' B6 q# P) z
0 ^0 h* n. b& Y5 h: a
/* override diags mask for selected modules */( k9 Q' {0 t! ]2 G' n7 Y
xdc.useModule('xdc.runtime.Main');& o, b9 b" Z; i5 E! v7 e2 u
Diags.setMaskMeta(
) [8 ]* Y5 c: B% C    "xdc.runtime.Main",  p9 u) y  w2 L0 b6 Q3 M
    Diags.ENTRY | Diags.EXIT | Diags.INFO,4 S! n  {/ p9 p7 j3 F& t
    Diags.RUNTIME_ON2 g) s; M3 W* I$ Q% B8 T1 |
);2 `( U. G8 Y) d  D! y

( i) v) C4 ~/ L0 U, Q" o' G( uvar Registry = xdc.useModule('xdc.runtime.Registry');
. E4 E& K9 C4 x( S8 }Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;' g1 e* O1 ^/ k# b9 ]# U: T
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;# |: _9 d, j! ~/ q0 k% X2 O
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;. K3 @5 }+ \* \
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
3 W, X1 v% g, f% l! z) N( `; {% _) Y
: \, W, n: D# P$ I/* create a logger instance */2 _9 w. W2 j7 B
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 h  r* m. ?! w* R8 `% _var loggerBufP = new LoggerBuf.Params();
! C. N: S; G( H) xloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
/ q% G/ c# ~' I( `5 h+ C  bloggerBufP.bufType = LoggerBuf.BufType_FIXED;
/ Z! Q6 X. F& f! R" i6 a: H) h/ K! F" {+ l7 r) N
var appLogger = LoggerBuf.create(loggerBufP);
# a9 t6 U3 y: B/ r. z! ZappLogger.instance.name = "AppLog_Core1";
% A; H8 A! o) \, Z9 A6 g" K7 yDefaults.common$.logger = appLogger;! r/ S. `, l: `+ t0 k8 Y
Memory.defaultHeapSize = 0x8192;   
5 u; r0 F9 V6 \. m+ K5 [Idle.idleFxns[0] = "&LEDStatus";; ], s& E6 {# Z
Cache.initSize.l2Size = Cache.L2Size_32K;
/ ~4 D. v( H" j1 I
& d- B2 |! z: y- c; E4 K0 J0 Z4 R
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-29 09:07 , Processed in 0.042545 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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