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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
0 `, f8 E5 Y  r
; j" B# s1 J. ~1 w0 x    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256* s# b- u  f; U  [* U4 q- ]' u

2 f- M2 t& f: |% H+ x! b9 h/ q2 W其他程序段。。。。。
+ S4 _( d6 T# {& M5 ~
% J$ y  X- w& P4 e   free(x_d);, |; U1 Z2 m" ^

9 ]- N/ j0 u: W使用DSP侧单独调试功能,验证动态申请没有问题,
$ o  i* o7 R/ s, j" j# v( H
2 S4 E! |. a' D8 [3 j( |! f' H, R但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 j( i0 [8 b$ t* M. c9 k- k

! [% W) ^3 @/ G) B+ [
0 J0 [9 @5 y( j- I- b6 k
; F$ G5 S7 Y2 d5 h) [* `# _
7 a4 s8 [7 k" W' `
, E) I! i4 `4 P7 U
! ~0 l- q; ~0 A$ P
% d$ v8 V$ G/ k% ~/ [* L0 }4 R" a  Y' C# a1 @
: T2 g: E* \0 h3 i! b
; |7 G9 G4 x; M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
( x! @- s& A. x' p我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下" I3 l: F" d( F1 G9 D
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)3 I6 c1 Q3 J' N4 d) C  v

  O/ p: O6 f/ Z是不是需要在DSP.CFG中进行配置
3 @2 I7 g+ C% ^1 n% k* m; _6 }我现在的配置为: N( U4 W0 X( B1 B
- d) L" J9 v+ I% X% i- ]
/*
2 A* Z1 v3 p% f/ o *  ======== Operating System Configuration ========
6 T+ N: Q: U% _# g& O& L. [8 z */  ]2 b" y) |( u, J, n
! e4 p1 S. Z% X, x
/* no rts heap */
* f" W; `  k) F$ M- DProgram.heap = 0;
5 V- z4 |4 ~& O. ?6 E. VProgram.argSize = 100;  /* minimum size */
+ T9 ?. q/ E& y4 cProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大4 q. N0 m* j/ F' T6 f

3 m: U* A$ Z5 A0 `/* create a default heap */
1 i/ a8 E* d& k4 n* {* vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- N! v# Z) Y" p1 j0 ~0 Jvar heapMemParams = new HeapMem.Params();
; ?' Q% @  N0 w: U8 EheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大+ |; I6 e; _) L# t7 j" V+ M
( W" H' J$ p4 Q9 G
var Memory = xdc.useModule('xdc.runtime.Memory');
! d( G6 w; C7 x3 [# _; {9 {Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& H* m$ c3 m9 E/ Q$ |

6 B: p; j& o6 S4 |7 ]) y; F7 q/* configure System module */" T# M- V1 x4 U2 m
var SysMin = xdc.useModule('xdc.runtime.SysMin');
6 [; |5 [4 m. l/ iSysMin.bufSize = 0x1000;
/ _9 Z+ u& c7 z" V" M4 cSysMin.flushAtExit = false;
0 ?2 u9 g5 n7 }0 ]/ B9 W; u0 N/ f- Z$ s. X; I: {
var System = xdc.useModule('xdc.runtime.System');
+ c/ J6 d) ?: z/ `, a7 F  X; y7 SSystem.SupportProxy = SysMin;2 B7 _5 z9 s8 s5 H! M  h
( Q$ B% J3 j; _8 @" b
/* configure SysBios to use the lower half of Timer 1 */' I3 i. S0 @! M( j; X
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');  o/ z; N9 l% L1 x. h
var Clock = xdc.useModule('ti.sysbios.knl.Clock');5 Z+ o: O$ C9 V, T
Timer.timerSettings[1].master = true;
  k! t3 z. W3 H& D* D8 hTimer.defaultHalf = Timer.Half_LOWER;
( W% f7 e! u6 w9 K- SClock.timerId = 1;4 Y' s' }. e# {6 L% t: _, [2 ^( X2 F2 }

' E2 p1 ?. H+ c! W. y2 p6 b: ?9 d! ^: h" ^3 f6 K* ~0 l
/*
8 d' A5 [6 Q3 L; m$ j. `, H/ \! H *  ======== Miscellaneous Configuration ========; x+ M  |3 m4 Y; B& L4 y" ^
*/
6 B' k( t; U/ E$ R0 x3 D) R( K0 L; F7 ?$ t
/* set default diags mask */  M9 a5 l  g: ~; c* I* k
var Diags = xdc.useModule('xdc.runtime.Diags');2 |% m5 g5 y; W& T" H' c* N1 g) `
var Defaults = xdc.useModule('xdc.runtime.Defaults');
3 }9 Y  {8 x$ l% c- T. |. q' Z* L
5 m* y1 C9 T( XDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;6 V  I( E7 l& }: \2 ^7 H6 W
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
1 Y7 z2 y/ j3 `: K& J7 jDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;; s6 l8 n8 q: }. U' w# s7 n
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
' ]+ q- c1 n( XDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
& z+ u9 i' J( `Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;5 s2 [/ e# J1 W
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;3 Y5 g1 l  ^" |/ i) Q- u: u
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
1 W! k/ R. p) Y$ ~& }& LDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;+ c; d# b1 b5 o) [7 s
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
; ?4 \/ `" q7 v! a5 p+ P. D0 ADefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
8 t) t* [5 R* ~& wDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;# _/ d- b" v0 t7 _- O" [$ {
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
* w. p1 q/ ?! A$ SDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;  d* o- r, v' H+ p% q+ b
3 y/ e( Z% n( ~/ Z4 t4 B
/* override diags mask for selected modules */
+ G. ^) k+ t+ G8 m( Fxdc.useModule('xdc.runtime.Main');
! t' P8 g# I4 h# i  wDiags.setMaskMeta(
  G9 ]4 Y' }7 p    "xdc.runtime.Main",# X: ^# c4 q6 _/ |9 }8 F+ g
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
- K7 N3 m5 z  v- d; L3 ^    Diags.RUNTIME_ON5 B5 f$ c/ {" ]  ^( u/ S9 o
);0 q  V5 c6 W/ y8 ?" M) r
2 A& g- m0 Q! q
var Registry = xdc.useModule('xdc.runtime.Registry');; d, K9 J$ ?4 M" j
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
) u3 L' d/ l( NRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
' H; @! \7 h3 Y; z0 C. d: BRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;% x- f4 q7 O( y. `$ ?
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;  Z1 O9 [/ ]) U* Z- Y! ^
& ~5 X7 e6 t# m& m& e2 l
/* create a logger instance */# f* t! Z' E- S  B3 n- A* p
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
! H1 A& l$ m9 ^2 t! B- Kvar loggerBufP = new LoggerBuf.Params();3 d4 v7 u  ?4 f' u) U  i
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
6 |1 l1 N$ y  S! n1 q- h1 UloggerBufP.bufType = LoggerBuf.BufType_FIXED;, P2 |# W0 }7 e$ W! U) @4 {1 w8 a
2 ?  I" [; E" E# @/ W+ G6 {$ q
var appLogger = LoggerBuf.create(loggerBufP);
' b% G6 k- d+ f8 `$ W' _% y4 LappLogger.instance.name = "AppLog_Core1";4 c3 E4 a0 S9 J& H/ ?: d8 @0 a
Defaults.common$.logger = appLogger;
8 T- A9 w, v( n+ D' @6 i* xMemory.defaultHeapSize = 0x8192;   
9 O8 W1 I/ m. k0 ]Idle.idleFxns[0] = "&LEDStatus";
/ e: [, ?& K6 ]8 j. S* y7 {9 r' vCache.initSize.l2Size = Cache.L2Size_32K;
  |! m: E7 m8 F" x; c  h* Z# i2 M* r* }( w  \6 `
回复 支持 反对

使用道具 举报

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 */9 u7 _& V( \$ o, ?7 A! H$ ?
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% [" w! l5 v! p6 P/ uvar heapMemParams = new HeapMem.Params();% r! w* J3 ]9 g( @- \2 U& _
heapMemParams.size = 0x4000;
+ _8 J# v8 N7 |& i
. t; a- N- M6 ^3 X8 qvar Memory = xdc.useModule('xdc.runtime.Memory');* G! P& ?! N# v) Q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 r% D. M9 E$ h# n* R/ z- F) o2 T& C+ J9 Z. c# j  s. {- A9 f
我大约calloc  每次共计大小为5K*16bits,* Z* c7 X4 ], a5 h0 }3 c, l
而默认配置才0x4000、需要改大。& k' p: B$ U3 H* w: G, s

8 h9 m8 K' h# p, x+ N% I7 A  A8 G
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */; G* h, z/ D  ?+ F
Program.heap = 0;
8 ^- u2 r# p7 C( f2 I4 NProgram.argSize = 100;  /* minimum size */
# q% D0 x6 a+ b$ E0 c2 @) bProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-1 20:22 , Processed in 0.043858 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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