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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构# R9 b3 t; c- o+ Y9 z0 y
' N$ Z/ A, h: U8 y
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
' z9 R( j2 y6 E  b% v
* v0 r* ]1 C8 d# [5 U其他程序段。。。。。7 r, ]' j7 w& D

8 C( z/ f3 `: ?0 M* x0 e8 T8 X/ d   free(x_d);
! i  s! n* X$ D( \3 g# }8 R
3 k9 q5 R9 ]  e% B8 `, ?  r使用DSP侧单独调试功能,验证动态申请没有问题,
5 j- U7 R$ N4 Q" H6 b$ r  f: O$ ?" K, T
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
1 ?/ C# {1 D2 `) @4 V; j
4 X+ q2 k; y2 Y0 N

3 Q8 |, h5 Z( [1 Q, Q9 e1 m4 r; M- a" J
: X& u# U1 Q/ K
$ d3 c$ @5 k$ B. e6 }$ K2 `
5 P. m$ S9 u/ H

* k  a6 _- ]% Y, |6 w) ^8 X. l$ F8 R

" [* ^8 Q, g$ d  z
" r8 C) D2 C8 ?# h
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明) [- ^4 }$ W1 s2 j! ]- A
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下; T$ p7 \! n: w2 H! W
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
; ?7 Z2 x/ o5 \. a: y, Z. b

! }8 W  h) A! C是不是需要在DSP.CFG中进行配置6 o3 Q. q" W4 C9 F, r
我现在的配置为$ Y+ ^, ]. r% f3 i7 F

  K) l: Y* m9 b. `' K' l/*
' C. u! p1 K  o5 T  L6 B! Z% A *  ======== Operating System Configuration ========
+ m0 [" |; B7 @) u+ t( ? */
, C7 Z, i/ ?1 j4 Y- ~$ V$ F+ ~3 B% T, ]1 P
/* no rts heap */
* R& ~6 I% T& }+ H" ~- Z0 p4 eProgram.heap = 0;. ?6 D1 N2 s+ Y& d
Program.argSize = 100;  /* minimum size */+ `7 [( C- z$ r
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 F* \) x/ ^/ K% g7 M: X

3 N, c5 [' Z$ z4 o* c! p/* create a default heap */" f( k0 j( n/ y* i- P7 G6 D
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( Q) p0 F' B, Zvar heapMemParams = new HeapMem.Params();
2 }# Y, H$ o3 u% |# wheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大+ h' Y- I$ y  S  a2 U2 R1 j( h
) a2 H3 U* g& v6 K
var Memory = xdc.useModule('xdc.runtime.Memory');
' P7 o2 X  p5 z8 ~4 A% B' r9 g5 KMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
: C2 z6 [- |  ?/ T" v7 A0 a( u  G
/* configure System module */
5 }8 o) Q( f) r% |# r* [var SysMin = xdc.useModule('xdc.runtime.SysMin');
: r( D7 W) x& zSysMin.bufSize = 0x1000;
* H4 f8 W  _5 [) B- a# MSysMin.flushAtExit = false;+ u  ?, u7 m4 L! f% Q

9 H- I( d; F4 t' O$ qvar System = xdc.useModule('xdc.runtime.System');4 Y3 [8 [# n8 o. p0 o, Y4 j) F- }
System.SupportProxy = SysMin;- |! B5 h4 j. ~# M' o3 W
: _( @1 ?* F' @6 \9 R
/* configure SysBios to use the lower half of Timer 1 */
' c; W7 I- ]* C: ^5 r* O9 Nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');, a$ w- T' a  U4 a
var Clock = xdc.useModule('ti.sysbios.knl.Clock');& J' w) \/ r& g
Timer.timerSettings[1].master = true;
2 ^: B" [7 S5 ]4 X; k  P$ zTimer.defaultHalf = Timer.Half_LOWER;  w9 |$ M" ]1 ?8 w( c8 R9 Z
Clock.timerId = 1;& @" u  v5 q7 ^# E

* T! _. d% Z3 ]6 G6 U
0 p5 q" I- @; T3 E! g  h/*
' n$ I% _3 b( ^4 n *  ======== Miscellaneous Configuration ========
& z9 z+ H2 a- p1 p  S5 d7 ^0 w */4 ?' t) h% L5 P, ?- x. e! m; r3 ^% ~
4 N0 r7 b3 d! z* Q$ G
/* set default diags mask */5 ?& |4 t0 N& j: t
var Diags = xdc.useModule('xdc.runtime.Diags');
6 G; r4 i0 t1 r$ D6 q- k# wvar Defaults = xdc.useModule('xdc.runtime.Defaults');
8 |+ m: }) \$ j% N" r0 y( F( q% J. R7 M  b  J! e% w9 U
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
  u# _# K; W' o: u) b0 J4 eDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
4 W, x. |& ]/ b' f0 zDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;  u9 u) n& L8 f" `" z& i
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
5 W$ H* v4 Y8 C/ Z& K2 N  I' EDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */2 C& u! d8 N2 [' g/ t$ O
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
# R' ?9 K2 a* T8 Q9 A8 ?8 d: PDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
. N$ a' H, j6 h5 y8 ?. aDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;0 W( N$ V% ?0 ?( r1 d. C0 Z
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
# a8 b* Q; b2 `, R# Q* KDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;8 O: w) ]: Q, U" O8 X
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;/ Z- _+ p4 K; \0 v& b* Z+ K: p
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;1 @' [- Y7 A" G) B7 M  i' w' ]
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;, Z- p8 t! [* ?
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;2 w; }$ h2 H) u
5 c* y- y6 A5 d9 _9 {. l2 D" v5 l
/* override diags mask for selected modules *// V, L7 Z2 ~7 s" n$ E
xdc.useModule('xdc.runtime.Main');
+ g1 i4 `; I2 O$ ~* KDiags.setMaskMeta(/ s; M: U; |, p* O
    "xdc.runtime.Main",
- v' x# b$ _1 ?( C/ F2 i    Diags.ENTRY | Diags.EXIT | Diags.INFO,( ^* c6 [( a5 d; ^. C
    Diags.RUNTIME_ON
- q- B$ e* @% a  \: a);
* N2 K; N9 L9 V! u' ^6 \3 P; S) {# u1 K7 V+ o4 T7 }
var Registry = xdc.useModule('xdc.runtime.Registry');; g) e4 P# ~& P; _2 ~& ~
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;6 |, t+ t  c6 p6 ?
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
/ g5 b8 t8 R! I) v0 y/ aRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;( e2 m3 z  _) M" M1 W% `5 ?* w
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;2 f, A. E7 a/ ]7 h0 P
! d" C4 W& x4 C3 K4 q% R
/* create a logger instance */
8 L+ g. M- V3 N1 s" pvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
0 S3 I- ?- z9 Dvar loggerBufP = new LoggerBuf.Params();& ]2 K8 o; D) g
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */9 S( I1 R2 ~; q+ d
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
0 E& i: z' M" }, B. w
" C% q2 u- S8 Y3 tvar appLogger = LoggerBuf.create(loggerBufP);
% M( {9 J: I' @5 ^! ^4 @# bappLogger.instance.name = "AppLog_Core1";
4 {" p4 @1 O) ~9 o/ x4 ]* J+ R) \% kDefaults.common$.logger = appLogger;7 X: P" F' @/ S, k8 T
Memory.defaultHeapSize = 0x8192;    " r. s# y: R% W, Z' H* j8 o0 j
Idle.idleFxns[0] = "&LEDStatus";: m: g2 m: H7 v) i% @$ ?
Cache.initSize.l2Size = Cache.L2Size_32K;/ C  P7 w. B9 }! S9 N
! Y( D: T& M0 j/ ?
回复 支持 反对

使用道具 举报

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 */
' R- O) ~+ N7 Wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! B; p( @- ^6 n3 K1 {) U- X) D7 avar heapMemParams = new HeapMem.Params();5 k; o1 w* z0 H
heapMemParams.size = 0x4000;
0 m8 H4 S" Z. F% u) B- g) z$ N0 E# R) ~( x: u+ y3 q
var Memory = xdc.useModule('xdc.runtime.Memory');5 J$ c" Q% g9 H. A" R) S
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 C2 P) G) ]8 }% I
) z) ?2 J" ~% E/ q5 m9 U& `. D/ K- ~我大约calloc  每次共计大小为5K*16bits,
7 Q$ t. F9 ~8 v* R而默认配置才0x4000、需要改大。
+ g8 x+ r2 H" ?4 @& P# z. L  u, I0 i; I  Y) U' h
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
. }% P) s# K$ W0 ?8 T4 x3 MProgram.heap = 0;
+ L$ g% H- B8 r, W* [2 wProgram.argSize = 100;  /* minimum size */- q3 a: l; J/ C0 y+ ]$ F! r
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-7 16:11 , Processed in 0.049597 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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