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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
$ q2 {( M  ^2 B3 @9 [+ s/ L$ M( W, M# k7 O
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2564 f% L- J8 }( f0 x# p$ H7 [

5 e+ V4 D; L7 O4 D  r其他程序段。。。。。9 G% _' m5 y8 ?* S# q
1 @; s! e2 ]) X: ^9 M* H
   free(x_d);1 g% z! a: e* n
- N% s/ o/ d( k$ N
使用DSP侧单独调试功能,验证动态申请没有问题,
( l0 \, Q9 Z! ]  a, m  |7 G" ~% `9 u3 U! s
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。1 F  C, g2 g+ i# ^
! |! v* O. U) s" ?

: O0 \  U# s7 L# m* ]
1 ?$ t: H( Y/ H! V0 ~+ ?2 K/ E0 Y! Q+ p5 H. n9 {2 v  r

. N5 E% r3 q4 Y- S+ S$ W. F: ~# f; ]6 }

' u8 W- W- T5 W% Y9 ?6 L; p. [* h# ^; K; A9 R
; s+ T3 y  a  M, E/ z

# T7 P& Z% |+ \
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明( ]. x; P0 z' _) g6 M: u
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下* r& f. I4 G4 C0 v
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)% w9 |3 c6 O2 J& P) }! o! C0 J

5 ~3 n: I' E, W9 P& F% `% k- z是不是需要在DSP.CFG中进行配置
' {% T3 s2 q. M- W5 r" _我现在的配置为1 @, b0 T, S  H, ^! e$ G% ^% l

4 o: H! l6 v4 ]/*
! c5 a9 ?- G: \& \+ x *  ======== Operating System Configuration ========
  P" [5 z; z$ x; ?# Q4 p& R* t0 N# S */( ~5 s$ s) F* l7 v5 g5 Y3 F$ \

! r, G% Q4 |" U: F; [/* no rts heap */
" Y7 a0 M+ ?; [/ c+ T# a5 {Program.heap = 0;$ k. N0 x) J8 H+ y; {
Program.argSize = 100;  /* minimum size */
* j% W0 X- p2 G/ D- `Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
, L! @* ?) m+ g7 }
+ o" d4 K* V2 O7 a/* create a default heap */
4 k7 a4 Z% P# A  x  U! fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 J0 B. E, d, |) R7 X/ j6 ?8 hvar heapMemParams = new HeapMem.Params();
( t7 D! c7 o2 {* PheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大$ t; i$ `6 W. [5 v3 g
* d( i- ?) r$ y. m
var Memory = xdc.useModule('xdc.runtime.Memory');! q" I, W. l1 I8 i4 |
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);, {3 r$ O. w; U: Q

, x& G1 C1 r+ ]9 C) ^: P" A/* configure System module */
) G; w; e! m8 `  t5 N9 Bvar SysMin = xdc.useModule('xdc.runtime.SysMin');7 k! X: z" f6 K% @
SysMin.bufSize = 0x1000;6 V4 R: r: B) G8 V8 m% H7 W
SysMin.flushAtExit = false;
  s" `9 \% s$ V) B/ Q0 K& M6 C, O
" G; w. }/ |9 vvar System = xdc.useModule('xdc.runtime.System');
# r; J* O: B. \  @& O, t9 J& N; FSystem.SupportProxy = SysMin;- x0 k8 m" s' E6 f% y: H% z1 E
* `) d, h( A5 k: b+ [6 q" S9 F; B
/* configure SysBios to use the lower half of Timer 1 */
0 b; d: Q) T4 x- ]7 |" fvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
8 i- g- L) A* \/ m0 c) h5 V; w3 t0 J. wvar Clock = xdc.useModule('ti.sysbios.knl.Clock');3 d! M& L& @* Z, M
Timer.timerSettings[1].master = true;! W7 V; a9 E6 O4 P7 r" T
Timer.defaultHalf = Timer.Half_LOWER;5 x" b7 A, x- v6 ^! F
Clock.timerId = 1;$ G, X) s* d; }" Z0 a

7 v5 B  H1 t0 w- d! j; O% _+ V
: a$ P$ E4 ]  b4 y0 F  S/*2 ^0 `6 U3 s$ {6 y/ D
*  ======== Miscellaneous Configuration ========
0 b: l6 P! g: w, K9 s' R4 b5 f */
" c* _  l8 F; ]1 j  V+ @( o" d  ]
  E7 ^( Y+ z" ~7 x, d4 }/* set default diags mask */1 m0 k& ~5 P" j
var Diags = xdc.useModule('xdc.runtime.Diags');; Z/ u! P# r/ v: U) I$ F0 w  l
var Defaults = xdc.useModule('xdc.runtime.Defaults');5 J& W! Q) A- n9 B  e

% n. A& Y7 h& ^$ _9 ZDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
, L$ ~1 X( l' `% T/ L+ x- hDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;7 {+ {$ V( _# t5 r- q
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;% l# }* V1 {/ h5 B& \  q5 O' m
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
! O% r5 n$ P( U; P/ Q1 O% FDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
, j/ ~% ]+ e5 N% e' [Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;% \" V4 z! P4 \, h8 X# U3 \5 D  V# K
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
( A. @. r$ T( z. ?. g, H9 j& k! uDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
7 L; c  F7 `+ b- {% v1 O/ dDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
4 z  E8 E) Y( E' ?- ]Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;& o* y  ]% q) o! A0 Z' f: O
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;# o( {1 G* Z  y& v
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;# n# [/ v  @4 y2 k9 y
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;1 |; ~: Y/ S$ Z& \/ i
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
( H# z; ]4 s* z2 |( s+ ]+ f
6 y) P8 E% F( F) Z' i. s0 R/* override diags mask for selected modules */) W3 M- d3 @9 _5 I. a) e
xdc.useModule('xdc.runtime.Main');
4 g! Q/ k( O+ V2 XDiags.setMaskMeta(, [0 A: T0 ~  K: e1 I
    "xdc.runtime.Main",
6 ^+ R2 W' A/ ^6 T    Diags.ENTRY | Diags.EXIT | Diags.INFO,
7 B" |* u+ H1 g  ~9 L& f! i    Diags.RUNTIME_ON& j6 F" D0 r& n1 \( ]$ F
);! ]- i: \5 V  ]! J+ F9 q
* i% s4 S& ?- E7 _' Z6 D
var Registry = xdc.useModule('xdc.runtime.Registry');0 s; J! U7 s" x
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
# @5 u7 M: |4 y' L5 {Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;1 t; \+ e# O+ a: r2 i; v! f
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
4 i  [0 K. j. i) n3 f% WRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
3 ^5 a0 q! _6 o1 q1 p4 h( c) J5 i/ a
/* create a logger instance */
6 [; }5 p( S% p0 |* Q! d# kvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
- \% T, A2 Q6 N. c  Dvar loggerBufP = new LoggerBuf.Params();. D* H# {( ^& n
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
" q7 g! v& ]. HloggerBufP.bufType = LoggerBuf.BufType_FIXED;
8 f$ z  |% Z' R% Q
2 v" ^% M1 E2 ~9 N  y$ B3 F: Ivar appLogger = LoggerBuf.create(loggerBufP);  }* @" F7 h) Y0 V9 D& a- Z0 N
appLogger.instance.name = "AppLog_Core1";
  W! r7 \! B1 i/ n9 G; `Defaults.common$.logger = appLogger;& [) A$ I1 W# {! [! t. ?% h; l# G
Memory.defaultHeapSize = 0x8192;    8 r/ Y6 N% X' H# Q$ w
Idle.idleFxns[0] = "&LEDStatus";6 Z3 d1 X  W) f2 Q6 c" Q9 ?! w( l
Cache.initSize.l2Size = Cache.L2Size_32K;
  ]2 f% R6 J2 P' J
8 h  d: T3 ^5 {+ d( W* l+ |0 t
回复 支持 反对

使用道具 举报

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 */
1 P2 D& m) a) ~$ H, M) _2 A3 ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( L2 e7 R( ~9 Y+ U2 V/ g- G/ d$ zvar heapMemParams = new HeapMem.Params();% a+ e  v% K, I7 l, P
heapMemParams.size = 0x4000;8 \: {2 t' g$ A9 `2 t; p
7 ~: Y; M& _  `6 @1 Y) s4 j6 x
var Memory = xdc.useModule('xdc.runtime.Memory');( s, v% Q' I' x2 C
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
& D1 {5 ~1 E+ ~  K6 I8 y: {0 _7 }% Y5 F! _
我大约calloc  每次共计大小为5K*16bits,
$ ?( U9 u7 d  B9 U6 O; E而默认配置才0x4000、需要改大。
; e$ }& u8 O9 Z, e/ A
; T# B, l3 b3 Y; ]3 f$ L9 q& P6 [. y
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
' i+ J! c' G: R, JProgram.heap = 0;) V0 F5 |/ B/ R" T1 f0 S
Program.argSize = 100;  /* minimum size */! U* N1 H9 x# S$ Q
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-23 10:07 , Processed in 0.042994 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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