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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
( v  q5 p" |# b/ G
0 U4 ?# s, ]# a$ Z1 Z    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
: A1 F. `+ V9 Q) v: ~8 P: ^9 Y8 `1 }
& ?6 H4 E+ Z! s! V! v: W其他程序段。。。。。
  H/ B7 A% ?1 u, [ ; z# D% [4 U! U
   free(x_d);2 a8 w* j0 o; G. q

, g' _: b3 W6 A3 J使用DSP侧单独调试功能,验证动态申请没有问题,: t3 o6 B: j- ]' }+ z
- {; ^4 t2 o) b+ g2 m+ I( o) j) ]
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ U; G( e6 e5 e! q% R" a0 R/ W

1 c2 m! ?! C, Z
: H( x+ u1 L7 e
" M! i$ u3 W& B5 k/ r
0 ?  o% G0 z1 m' E; y9 A7 X0 Y
/ r2 S$ ^) ]" S  t% G6 \
7 N' ~: W/ _. {- f) c5 C/ B" u% r: |0 {1 A! ?) r  R: T
0 o9 Z# f) ?& u% N

; R) C# G$ _6 n3 U( Y0 u' [2 [5 H* a! \. L( b1 K: x1 @
分享到:  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 */" [$ ]5 j; J1 W
Program.heap = 0;4 {7 ]% a2 {! _: b
Program.argSize = 100;  /* minimum size */
& T; y% {) M6 E: B4 m- XProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */( f, Z( f. v9 _1 W: S3 \5 t8 Q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 i2 z0 V! b2 w! Ivar heapMemParams = new HeapMem.Params();# c: R! F; Q& j8 \. e5 l/ D
heapMemParams.size = 0x4000;
6 \( N, |/ d- h$ C. g
/ d: {$ v2 _3 g5 fvar Memory = xdc.useModule('xdc.runtime.Memory');6 ~; J9 F% V& Z9 J3 D' I0 Y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" C* V7 W5 w% B3 N; ^- a  t1 t$ c

6 c% {; e% R7 T7 d( ?% T0 w3 m我大约calloc  每次共计大小为5K*16bits,9 G! m. y( I2 V
而默认配置才0x4000、需要改大。" K. b8 V) ]" J0 G4 |: @
2 ]$ z  D: |- c. x/ N6 U
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明) }& R( ?9 v- V2 x" t
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下+ _: N6 k2 G0 J- z  _
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
) q) g$ V3 l! F. [- L0 e$ t+ O
; q+ h$ s) g( J$ s; T
是不是需要在DSP.CFG中进行配置; ?6 O0 Y- W; d! ?  ?# S2 ?9 y
我现在的配置为+ ]; q0 E8 [& D4 A
0 O6 V- s' w" Q( w
/*6 [1 @$ I+ V# w# {
*  ======== Operating System Configuration ========
6 }6 s) L5 X5 K) C */
( j) g9 Z; ]2 m7 Z6 q' j# Z4 o1 W5 C! @
/* no rts heap */$ G, @. w+ V1 z
Program.heap = 0;
4 @' J2 O" i) M  z+ m( f! p" VProgram.argSize = 100;  /* minimum size */
8 z+ ^- V2 T3 v9 r1 s3 t' iProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大, c0 t( N5 n" I& P$ R

: G( Z  e4 Y4 m/* create a default heap */$ N/ {' t+ G4 R8 Q- w& C3 [, b
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 x: D  C/ r' d3 b+ Y1 }var heapMemParams = new HeapMem.Params();# x: I9 i; t; H8 V+ V6 l
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 J! D, b( ~% R) v' t9 q; |( A3 x8 f8 ^$ D
var Memory = xdc.useModule('xdc.runtime.Memory');
. ~1 B+ h; P/ G! |8 AMemory.defaultHeapInstance = HeapMem.create(heapMemParams);! s) p0 R. h3 Y' |4 Y; m

2 H6 a8 D6 ?4 g7 I) G, d/* configure System module */4 l( H* E7 r6 I6 f
var SysMin = xdc.useModule('xdc.runtime.SysMin');
2 ~# M8 B+ C! |+ n+ e2 rSysMin.bufSize = 0x1000;
9 o& L/ \/ K/ d9 I. S. n9 `SysMin.flushAtExit = false;' ^7 \8 U" G8 h7 a  r

& o$ X' n" `% ?  K( q' d' Wvar System = xdc.useModule('xdc.runtime.System');
2 I, Q3 F1 t2 ]6 k* c) z* `System.SupportProxy = SysMin;
, b0 P9 G9 z5 ~/ m* t& y
% S( D9 f$ f0 ^, |) a/* configure SysBios to use the lower half of Timer 1 */
2 K/ \1 W8 r3 L* Z5 h; h# mvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
9 W( D# N1 x+ H3 D% uvar Clock = xdc.useModule('ti.sysbios.knl.Clock');+ O6 s5 A+ d$ @* |0 D
Timer.timerSettings[1].master = true;
) j: S& I0 u# v; r) P9 A/ wTimer.defaultHalf = Timer.Half_LOWER;
2 j9 I+ B+ D* e# l' H8 }  VClock.timerId = 1;2 u8 M: O/ n1 G, W" n* V1 d4 F

2 x# ~0 h0 @' M" d! p8 ~: _6 x, b9 t+ m
/*4 w, N( g, z0 C) J; ^) k
*  ======== Miscellaneous Configuration ========% T# t/ H4 F! e3 N1 B- u
*/
; P3 z8 U' H  j/ W& Z( _( I- J4 @$ U6 v
/* set default diags mask */
5 ^3 D0 p% z5 s6 u  I- Ovar Diags = xdc.useModule('xdc.runtime.Diags');
* u2 _0 n1 d4 J9 C  ovar Defaults = xdc.useModule('xdc.runtime.Defaults');
3 b/ k& F0 k0 F( Q2 c
$ F! G* p7 q% y( rDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
: h7 C8 a7 A. G' c! X2 B' C9 TDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+ M$ N& `4 _7 a& c0 O; b' QDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
. C- A' h( B5 u6 N; y7 ODefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */' X3 Y( r2 E: E, N- P# O
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */$ V  p! P5 _7 u+ Q! k$ ~9 i2 b6 T
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 e  S( y( S/ z, h6 q+ K
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;2 F+ Z( m1 G/ u3 J. @
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
- n8 `9 c& R% DDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
+ r4 y, v0 X5 x% G/ g1 E' |Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
. F, _: D2 Y+ {# k$ B6 t- HDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
; M4 O0 P0 E/ |. xDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
6 Q, [; L) U; fDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
0 w7 c1 @8 o9 H  nDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;+ a7 J  h# L3 s$ U) f/ b& [' p
' v- B( m; B7 |6 S2 W* P
/* override diags mask for selected modules */, o2 Q' m4 x+ a- z! ^8 q
xdc.useModule('xdc.runtime.Main');- r" X$ h& h: l8 u1 U
Diags.setMaskMeta(: n$ Z) e8 V  L( ?* S
    "xdc.runtime.Main",
/ }# M" T# S' P) o$ @- g    Diags.ENTRY | Diags.EXIT | Diags.INFO,
; n+ i1 u* w) {4 t4 Q4 G    Diags.RUNTIME_ON0 `" g  Y# ~; ?& [# t6 M( g" p
);8 s6 \' f+ s  ~6 m$ o( @5 r' C
$ s% M5 n1 d; x
var Registry = xdc.useModule('xdc.runtime.Registry');
5 b" {7 P4 l0 k' ]& oRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
! K+ p* b/ D. b& J3 e; wRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
/ D$ e7 Y8 G. n9 d$ bRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
2 |# H  l. @+ [: J; d: |2 ]Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
; C1 n, H' E* g, a" E" Y
2 G* a& {0 d( k9 w3 W; S8 K" w/* create a logger instance */  Q( G" t; [' j7 Q
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');  |- c' z" X" V! q/ j( k, w3 a
var loggerBufP = new LoggerBuf.Params();
9 z  Q- I( {" J! HloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
" _0 i" C: {( D1 R5 CloggerBufP.bufType = LoggerBuf.BufType_FIXED;
' ~8 w" h# C$ K
: H% l8 y; ~2 Q3 \% avar appLogger = LoggerBuf.create(loggerBufP);
! v, M- g+ g# m, U. |appLogger.instance.name = "AppLog_Core1";
" w. \2 b' Z7 _Defaults.common$.logger = appLogger;
; g; E1 J. y  o' F7 IMemory.defaultHeapSize = 0x8192;    & Z2 `9 F6 `6 |8 M! b6 G/ C
Idle.idleFxns[0] = "&LEDStatus";+ i& ~, c' X7 ]- m% g0 ]1 m9 I, ~
Cache.initSize.l2Size = Cache.L2Size_32K;# L' f4 Y+ ?  t6 ^( a

% g& A$ ^1 P- o2 e
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-6 11:01 , Processed in 0.042917 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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