关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
( }: {9 {0 e5 q( M" [
/ `8 {% y" U( ^$ ~% y8 z1 F    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256  J/ K* \4 e* R8 @3 A
5 q) |+ x5 L2 O- o) V+ a! Z4 J
其他程序段。。。。。( P4 w, U1 j; `6 N  n  {) l; r
+ a, y- Q0 N* w  e
   free(x_d);
+ B2 n, Q- [% D. b
0 Z& G- E, J0 X4 V& i& A使用DSP侧单独调试功能,验证动态申请没有问题,
6 Y, |/ z, n. L5 t0 n1 Q8 \, x( O
7 C+ ?  d) _% q! r# y* _; u但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
  K7 l3 q  \9 A

  ]; ]/ v- q' s4 K' s' d1 w6 v( O+ ~- `) R+ Q# s: L
; k6 t- X2 @/ l; j, W; l
$ }0 T" y4 n2 e; _2 w, I( Z: Y

, E7 |+ u1 ]! m+ Z5 j4 G" _/ t3 b9 e& h

1 R7 ~1 |( a# x" C; b1 N* A# e1 I! h& H6 j

/ k) v2 W6 m$ g1 [: u2 r' G3 ]6 h! p5 I9 L3 \2 K7 ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明: S7 X% k) i- ^" j; ?  n/ M
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下& L" R2 Z3 _1 F8 D
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)% W5 |& r0 R! E1 |3 @7 t

/ P0 L8 ~1 D+ k/ d是不是需要在DSP.CFG中进行配置
- P: B' N$ H: k: v我现在的配置为7 I' h6 e7 I& C- H

' P3 f% a3 q1 p3 ?/*
  }, ~' \$ a2 k! k% c0 R( y *  ======== Operating System Configuration ========9 p  F( J; O8 ?6 ?+ [6 g
*/8 [+ l, _8 i. t( z

! v! ]8 E( K+ o0 B+ Q/* no rts heap */0 i9 Q4 w( y+ |9 D
Program.heap = 0;
! |# c. Z# |+ EProgram.argSize = 100;  /* minimum size */5 l! ^, N8 k( [9 x9 j# `) C, _: J
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' }: S. V1 O  ?

7 c( [9 d$ c( B4 x+ r; l# _/* create a default heap */! }1 H; q3 |8 q" W$ Y9 S
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; d6 Z: t3 P/ a" u3 L, c% Zvar heapMemParams = new HeapMem.Params();% N! x: l  s' h) V: f. n
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
2 o& j0 }0 Z8 w4 g6 W, F# @5 ]7 P
3 V; `1 V! I+ _# v/ a' s2 ?
var Memory = xdc.useModule('xdc.runtime.Memory');
1 V- _+ V- r6 b. F1 b. ^2 @Memory.defaultHeapInstance = HeapMem.create(heapMemParams);# e3 u0 s7 z& w( _! o
  u! {9 ^: J8 x9 Z( p; ?" s' e
/* configure System module */
7 L1 {. d( x1 y$ k/ y% Mvar SysMin = xdc.useModule('xdc.runtime.SysMin');
, u& g3 d7 ~, ~# @6 m& t0 M' \SysMin.bufSize = 0x1000;! H$ C$ b& G/ t+ x  V* n1 K: S' V
SysMin.flushAtExit = false;
% ^$ O' C/ C. K: b* ^9 }! X! T! D7 L& K9 D+ M. f
var System = xdc.useModule('xdc.runtime.System');
7 y( i- `$ \' P4 K3 NSystem.SupportProxy = SysMin;8 j2 q  O" D* C+ R. P

1 r% q/ e1 V8 ^2 K) T/* configure SysBios to use the lower half of Timer 1 */5 d1 S$ U# c/ y' V( ]) Z
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
9 h0 J$ K- c; P( Hvar Clock = xdc.useModule('ti.sysbios.knl.Clock');8 h8 j$ @4 @8 V1 a5 A
Timer.timerSettings[1].master = true;
( k- [8 o, Y$ @% }8 C6 uTimer.defaultHalf = Timer.Half_LOWER;# O$ m9 R6 U' t* _
Clock.timerId = 1;  ?) k' e6 H" x

: t1 |; K- r8 E; v
4 j* v5 `/ Q6 L/*! S  L3 j" `8 ~* t" O' W- j. F- J
*  ======== Miscellaneous Configuration ========
5 s* u5 u& h4 W8 E5 z+ |; z# r. c */
, J# Y+ R% g+ a4 c2 d7 z2 x
' V1 z8 h) O$ H! f8 B9 b/* set default diags mask */
7 c* t2 z5 a- _' J7 Rvar Diags = xdc.useModule('xdc.runtime.Diags');
8 j6 G4 Q* Q) \4 F8 w% S, w  u5 Xvar Defaults = xdc.useModule('xdc.runtime.Defaults');
* Q3 A! b) y# `4 j. J. ?
. A+ B; h5 R5 x) b: KDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
+ n  R7 B$ D0 Y* }. \Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;% ^) B" d  B, e% N0 v5 ?" o
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
& x5 c0 {: M9 B" _Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
2 d, T9 W0 q) U/ ODefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
, p2 p: _; ]" ]Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
/ D7 `1 L$ g3 [) c( l* }Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;) p; O5 {* A& T8 v  m( s
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
' i4 {% }- G+ p: iDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;" e- K1 B. o" _0 u5 Q3 K
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;! e) _8 ^: u' Z7 ^( v3 Z, B& r
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;; @6 R' c& ?7 {3 U3 {. ^
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
# A; \' ?' D! L5 lDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
" U( x. `8 {6 q) v, F( W! ]# vDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
/ V, Y4 t% x/ R$ h
1 |3 Z6 v. P. ^+ C; R/* override diags mask for selected modules */
2 d; ^% G4 |8 S' k+ a! Kxdc.useModule('xdc.runtime.Main');
( F4 d. |9 d7 |) jDiags.setMaskMeta(
* _! U9 e0 o9 R+ p- Y% _; I% \8 }    "xdc.runtime.Main",
, @$ I5 b. J  x    Diags.ENTRY | Diags.EXIT | Diags.INFO,9 k6 S, w* Q2 ~: m
    Diags.RUNTIME_ON
! d  N+ g/ h. M( V% z2 n0 ?);
% I# x  p( X$ T7 V! e0 B! N3 W; ?/ \/ r9 l! z* {4 }& u* W
var Registry = xdc.useModule('xdc.runtime.Registry');/ S# v+ L& G# e
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;: O7 [! l. e8 [  H( @
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;. m% c- A) C# H  b
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;9 g+ u) M  m; n- {0 y# G: [+ O
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
$ d# M# L7 o" j7 J, Y7 y$ P5 A2 ]  T+ ]
/* create a logger instance */& [% e7 R" s" r: q8 |0 m7 }
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');9 N9 S' ]$ P( w$ D# n( {
var loggerBufP = new LoggerBuf.Params();
' a- C0 F; Q8 Q+ ^- LloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */7 o/ W9 h% L/ ?
loggerBufP.bufType = LoggerBuf.BufType_FIXED;( u$ O6 L$ x! r; z) s
7 v) W- }2 c% A$ ^+ M; E
var appLogger = LoggerBuf.create(loggerBufP);
# C* r7 h7 x- {appLogger.instance.name = "AppLog_Core1";
/ i/ l) j* P2 Y8 o: r/ pDefaults.common$.logger = appLogger;/ ~  L$ F2 y) V2 G- F% R
Memory.defaultHeapSize = 0x8192;    4 v2 N. J  [6 o8 P, `
Idle.idleFxns[0] = "&LEDStatus";% V/ _7 a* _  v, v$ B( d9 q4 E$ d; ]% V
Cache.initSize.l2Size = Cache.L2Size_32K;6 v: l$ L2 l3 F7 x: W. D
" ^2 r/ s: @3 T. w
回复 支持 反对

使用道具 举报

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 */" S% b2 J+ ?# o6 o& \. {
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ r0 a6 H: X5 V* p, v" Dvar heapMemParams = new HeapMem.Params();
* c% u! i+ P9 x: [heapMemParams.size = 0x4000;3 p+ m. P+ b2 G9 j% J/ _

$ c4 x! n! o; ], b) l  J, bvar Memory = xdc.useModule('xdc.runtime.Memory');
. p' G6 P: C) @2 Q& eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);8 o1 C' [4 G/ Z. u

, r( M! M6 I1 m% g我大约calloc  每次共计大小为5K*16bits,/ M9 M) I7 C& Q$ ]
而默认配置才0x4000、需要改大。
. W" j7 B$ G5 |4 J# c- d/ I( W; m# b; o) b
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */3 T% d- J: K( E4 v
Program.heap = 0;
: Y  r' L/ z1 T# _' V1 ]5 ^Program.argSize = 100;  /* minimum size */- _% N; G9 n" v0 q( v% f
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-7 16:34 , Processed in 0.042176 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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