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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构8 u5 Y5 [# T2 i0 t
6 F+ H: l6 `6 k; U9 h! I! U
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2566 U2 t% F7 u2 [6 u  i4 I/ i

2 W7 c; T9 `+ D& _/ ?其他程序段。。。。。% V+ Q0 e; S% y: _  l

2 S6 D" g  P2 I7 }   free(x_d);
6 t  {1 ^2 h' ?5 t. H4 |( }# C2 P' c6 h7 K+ ~3 X  k/ y$ b
使用DSP侧单独调试功能,验证动态申请没有问题,- B7 t' B1 r# T3 {& u7 i; {. n3 A
3 E" I6 e4 x9 s* f2 s+ b
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。& j+ q* q+ x4 j  r3 O3 Q6 s
+ A4 |3 H: v5 z
; \. K( K+ q7 b/ p5 n; y# i2 u

& W% v: P- X" Q' ~" j1 h! k2 H' o# w, A9 v, Z; l

+ T/ j$ O9 }* P, t
6 W1 N* f( Q5 d: e  U! I0 O
& x7 [: m# `3 d/ N( j  S+ V% A/ Z, T! q
" ]* H$ R! ]9 S0 z+ T) O
( F# w1 D: F% Q; u+ E( Z, g/ {- m( y$ L
分享到:  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 */, r0 v( o- a, A+ t+ K- Z* I6 B
Program.heap = 0;* u' U9 n# B+ a* y
Program.argSize = 100;  /* minimum size */
- l# z  [8 c7 g2 e  WProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */1 L' y7 u  m2 J
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 d" y2 I- J; Q
var heapMemParams = new HeapMem.Params();" P: J3 ^- ]  d
heapMemParams.size = 0x4000;! H9 L! u: L  R5 W$ A4 p

5 h/ V; _& }6 Kvar Memory = xdc.useModule('xdc.runtime.Memory');- q+ B8 i" M* }5 r
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' c8 v& D9 K) U# B5 C

9 }5 m2 A0 L/ H( d我大约calloc  每次共计大小为5K*16bits,! ?$ d7 s8 ~& `- A0 {9 c/ ]
而默认配置才0x4000、需要改大。
& f$ |1 W6 A( N" N
# C7 K- M% U+ g
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
0 K2 T! h: {' V7 }6 w: {6 u我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下, {6 t5 U9 @5 s$ T( n# a; W
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
# j- Y& s# k1 T* N1 V! W

$ [5 L  c3 W5 I8 b' }是不是需要在DSP.CFG中进行配置
1 [8 n1 r( }- G3 D  T我现在的配置为
3 p% W4 n3 h- ?1 U! Z: G* u6 O3 l; d; m2 g: g
/*
& x9 Z4 V( n5 R: u8 ?' {4 ^. Y *  ======== Operating System Configuration ========
4 M( e: |5 o- D */; b5 Q6 R# p, G
  Z% L& X1 M( I  D3 V- u
/* no rts heap */, G, E0 ~  V$ f! O- e/ c7 T/ S( w
Program.heap = 0;
2 y* M- ~! h7 K7 [2 F* vProgram.argSize = 100;  /* minimum size */
2 I$ [2 h% f: @* H5 \Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大2 R+ [4 p4 ]8 a7 z7 m
# I0 f* x8 N" l4 `$ x
/* create a default heap */$ I# ~* H* S; t4 o. g1 B& v
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) S" ?! V. }* ~* x/ v: `var heapMemParams = new HeapMem.Params();1 C( [! d* A0 a* [
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大) z: t% v) e$ d! k( F2 n

* ]6 i3 B3 N3 s! G
var Memory = xdc.useModule('xdc.runtime.Memory');# K9 m" S/ z% K+ b. a
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* U  @' B" f) G4 x( C+ T/ r

. I5 ]/ H& s* B$ B% U* G/* configure System module */
+ Q5 l- K! c1 Rvar SysMin = xdc.useModule('xdc.runtime.SysMin');
8 ^* c% X9 V+ h- i) L, CSysMin.bufSize = 0x1000;
: {3 ~! w8 G, BSysMin.flushAtExit = false;
6 ?/ b! [% O. A. Q$ |( e5 V
+ _; S4 T; T0 o* a* x3 M9 lvar System = xdc.useModule('xdc.runtime.System');9 u) C$ O  S8 h
System.SupportProxy = SysMin;
* A6 e% m0 z0 C! j
5 X. J9 w: H, k& B/* configure SysBios to use the lower half of Timer 1 */( i* @  R$ I- r* {$ K0 T, ?" P7 Z4 w
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');4 w' J+ l/ U7 e/ P% [( t! t
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
9 w  D* M& |' M1 L1 P8 h. u) N3 ^Timer.timerSettings[1].master = true;
; P4 s; g. k' k7 DTimer.defaultHalf = Timer.Half_LOWER;+ K4 `9 B5 ]8 i$ Z  f4 S' S( }
Clock.timerId = 1;/ Q, U$ L7 o  v' b
, s+ v' `. D, D) M. b

+ K% a0 V) D% m$ z1 w/*9 P9 K' ?1 M  r
*  ======== Miscellaneous Configuration ========
! m& t7 c+ |: [ */. W, p1 l6 E( j- d4 g4 c

% y$ I- }- n5 N) g/* set default diags mask */
7 ?" ~0 ?6 r8 x8 o+ X' ~var Diags = xdc.useModule('xdc.runtime.Diags');( s& T1 d, W+ P* e. u9 b
var Defaults = xdc.useModule('xdc.runtime.Defaults');& i$ t2 l3 P7 Y% k7 f: u' x; I
- E- v) a) ~8 r( W0 [
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
. p4 v8 d0 Z  ^& VDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  D, z3 D& v) L2 U7 b
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;9 D* R$ b) ?4 X+ B1 s7 c! \7 B8 N7 x
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */) B( e/ p' `5 h) X
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */5 ]+ f) p& I# Z+ i3 D
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;8 o0 G6 L# L6 h1 i
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;$ |& h5 @& K' v. }! T
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;0 o) t; w# Y+ {4 T6 _1 W9 ^# W
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
. D4 B' ]3 G5 E0 fDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
6 p" m! N- N* _Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
6 n& g- ^/ ?8 \& n5 O) ?1 b8 T+ D( `Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;5 s. J  O, z0 s# w7 ?  `
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
; w) U* g5 u% A0 x8 @' n# H( EDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
0 I) _) \( \* i8 c
  U6 M' n7 ?& _) `4 b/* override diags mask for selected modules */
$ W, S/ s- u. g) {xdc.useModule('xdc.runtime.Main');
3 X% S( _' s) T7 f" e* w( c  A9 m, oDiags.setMaskMeta(
/ X% y/ r  m6 L) T    "xdc.runtime.Main",+ p0 X$ e8 c% e' |' m, P
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
5 b, S  L# g0 M% \! J* X. p    Diags.RUNTIME_ON
- z7 [# e3 B1 q0 f% O% G# q2 g5 l);
% c( E8 x6 E# ^7 K7 L" c0 h' p: k; v$ ~- S. G, ~0 h0 K5 b" C
var Registry = xdc.useModule('xdc.runtime.Registry');
8 M- r! f2 B# L4 l0 f4 ]7 Z/ DRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;3 |  r# x0 M3 n' J6 u/ y' K, O$ d
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
. \4 p6 S" z+ N& A4 D: p- MRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
) `1 `/ [+ b7 ?' A* z6 ^9 i) U4 t  HRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
  x/ N. O, h. M/ D8 A
* @4 P4 }* G3 ?/* create a logger instance */7 z& v3 c7 S  S. k5 V' g- i
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
2 \* Z3 c6 I) Y; \) m" Svar loggerBufP = new LoggerBuf.Params();
4 c7 R9 C; G+ Z( ?# k* y* T3 iloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
8 J9 z7 L7 |$ T, x+ jloggerBufP.bufType = LoggerBuf.BufType_FIXED;
2 @$ z$ n; C& E8 X. W: f! V. C2 W6 L7 [: _7 x5 f
var appLogger = LoggerBuf.create(loggerBufP);$ g( D& P5 F- z' @) p/ C5 k8 R
appLogger.instance.name = "AppLog_Core1";
3 B  {- @6 N( {Defaults.common$.logger = appLogger;
5 R. O: }! w4 @# o, AMemory.defaultHeapSize = 0x8192;   
" F) c! O& `& T$ tIdle.idleFxns[0] = "&LEDStatus";
( R. U% C/ N3 i8 K+ G( \Cache.initSize.l2Size = Cache.L2Size_32K;
8 K+ r: n7 d2 q: u" f2 I3 R3 e: P! U: l- s8 K5 o2 }% [: e
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-31 01:56 , Processed in 0.042937 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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