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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 S; N# K6 H7 N8 F3 f) Y7 X
) v" w: G7 F# H    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2562 B. N- G4 }2 p' v7 B- O
3 F8 s" J4 h. i$ i$ Y: q9 c
其他程序段。。。。。
0 _, X( H$ N6 D5 ` 0 R* ]" F% _8 m) I* v% y
   free(x_d);/ E, z  R; C# C6 q0 B; r
- h8 T( }2 g$ F; q! k; W: C
使用DSP侧单独调试功能,验证动态申请没有问题,+ }8 \$ `% v- g
' N; g, m' e  D) _
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。4 g) I. P4 `; ^+ ]
* \  i8 }" ?6 v7 d+ F7 M; _5 {
0 W( I% P4 M: F$ K3 c. y+ N
: D* L" k- C6 _7 }
, s1 _, ~2 E8 k7 W( F: J: a# t
4 W* F& s! V: ?4 g& M9 y" c3 b

) j  n  C& w" _1 v+ N4 ]2 ~
: z: r8 A; r7 B! x
- Z: c' `* X4 P( ~& N3 G9 E. y/ G2 F
3 Y  y) R' D9 s1 \3 J4 ~3 W' k* {- F- ~6 I: J6 \. S4 f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明9 v# n1 M$ U/ M0 z
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
4 a+ s, P  W( d- m1 I(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 T0 K# O0 u- S, t+ \1 s% D5 b; ]

) y( s- ~4 w3 W+ j是不是需要在DSP.CFG中进行配置
) X1 i8 u  P! N$ Q' N我现在的配置为
9 l# c! @* f% T" ]( a/ L# _/ @) X: s: f
/*
) h( u+ `$ [+ i# k0 ^6 Z4 [ *  ======== Operating System Configuration ========
+ P8 }3 f. y' o: i3 ^, g, X5 M8 c */
' k  P4 D6 n; d) q* Q% P( ~, p1 A6 Q% t( |% K
/* no rts heap */
+ g" V' A1 M& U' J( N0 eProgram.heap = 0;' W" p, ?" w5 S0 R. z
Program.argSize = 100;  /* minimum size */
' M; M/ V  y9 O: @0 nProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
, ^6 y: V( [  s: K& t
( N. }5 Z7 p3 r+ H! F/* create a default heap */
5 @( _0 K4 q+ |; }; i: ]: Qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& I8 t9 m: e; N) i1 s% y& ^: n
var heapMemParams = new HeapMem.Params();
5 j$ W% {! k' b4 e, S8 N( q) oheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大7 |1 h3 p! J  Y1 G1 j) J! T( C  o
% o1 p2 a- n1 H; S2 f
var Memory = xdc.useModule('xdc.runtime.Memory');
1 Q+ F6 k* R9 s6 ]0 BMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
& p9 Y8 T1 v3 R; |1 }  R( C; q  @7 l
/* configure System module */; _2 X/ W4 @  L/ C$ H4 j
var SysMin = xdc.useModule('xdc.runtime.SysMin');. Q3 T$ o  e( i) x' C. f  _
SysMin.bufSize = 0x1000;; J. @  k8 }6 K% N, s# R! B" A
SysMin.flushAtExit = false;
6 Y7 P6 B5 r- D# E3 Q; {9 H# T1 ~) H+ ?
var System = xdc.useModule('xdc.runtime.System');& i' P$ ?5 W- }* p* I: B
System.SupportProxy = SysMin;
2 F$ F  [5 N, r, _6 u
1 ]' Z% [5 `6 {+ Q2 A/* configure SysBios to use the lower half of Timer 1 */9 T& Z5 W, P" O; |5 f" `
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');% V1 s& b, ]% ?5 n( f3 P$ {
var Clock = xdc.useModule('ti.sysbios.knl.Clock');9 x1 L1 E2 R8 w, p* A4 m" K
Timer.timerSettings[1].master = true;
! z3 K# b% w& v1 A. J- UTimer.defaultHalf = Timer.Half_LOWER;
+ h( Y0 v/ j2 S' S# U4 NClock.timerId = 1;( ]% E1 h! n* x  A& |
; T/ k8 y% r. ], r  A8 q

( U9 L- ]- s9 m* u/*
$ B% @" V' b* [) S: t" ?8 l *  ======== Miscellaneous Configuration ========+ w( C' [, O5 L4 d( u
*/1 V: ^* \. d. ]

- k' @9 j  U4 Q0 |/* set default diags mask */
. C' q5 r1 k5 s' ~: d; Avar Diags = xdc.useModule('xdc.runtime.Diags');* h2 `0 \$ g6 A# _
var Defaults = xdc.useModule('xdc.runtime.Defaults');+ T* `) B( ?. S' f! S; u
* z+ G2 {' P, A1 {4 r, M
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;) A% W! ^7 r* o6 R
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;7 _1 ^2 j1 D2 \. \# ^
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;3 W& q* E$ X+ D1 k, a% A6 F
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */. j$ F2 A/ J( T3 s& Q
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */; S  ~! G: g  F' Q2 l4 @
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;7 @+ `+ U& i# S- O& R6 Z
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
) [' F; w! S5 |5 H" w/ b# \Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
4 w1 y6 Z9 e1 N1 aDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
7 V6 s# Q0 C# w4 F6 n8 D- W- T2 MDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;7 w* N6 O7 d: o, q
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
) w4 V# {) Y/ k! a# oDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
+ e7 F9 [' v8 t3 s) k, ADefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
2 E# e: r2 F% oDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
+ ~" q7 i% v/ V$ m2 T6 [3 \3 Z1 Q( s8 E2 J% M
/* override diags mask for selected modules */+ J. H) q. A9 d- W5 Z
xdc.useModule('xdc.runtime.Main');1 \: w! D. ]7 b8 m# Y
Diags.setMaskMeta(
5 L: ^/ `2 g" Z, ~* G2 O, a9 y    "xdc.runtime.Main",
" W. M& F$ w0 D& C1 i  i' h- j! q    Diags.ENTRY | Diags.EXIT | Diags.INFO,
& D+ J' p' p$ S! y2 U+ l5 D2 w/ D. ]    Diags.RUNTIME_ON
) V' x0 O! l$ P" o);9 K7 h, M1 f, [

6 z: U- I$ j% X3 a5 S4 M' k1 |! \var Registry = xdc.useModule('xdc.runtime.Registry');' Q* ~! V3 H& `
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;. V1 }' H/ _& B6 l1 W2 ~
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 U- A  Y; O: A# ?Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
5 H. ^3 M% H5 _. {2 U# r4 YRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;, Y) U  C# Z- Z; V

- ~1 r/ L! T" n8 i! F7 A3 D2 Z; P/* create a logger instance */
; g' {- m/ Q, O0 rvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& d  a7 t, O, s7 ^/ Y
var loggerBufP = new LoggerBuf.Params();' m  D6 X! [7 p9 O! |7 y% P6 l
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */$ O1 X: D) J% e& V
loggerBufP.bufType = LoggerBuf.BufType_FIXED;1 E) d+ Z/ S# `8 i, a" L0 q

# V5 ?: t: d$ n% @3 g- e4 L# R: Cvar appLogger = LoggerBuf.create(loggerBufP);
8 T' N! u& u4 Y/ V3 P. b8 \6 zappLogger.instance.name = "AppLog_Core1";4 q; ]! m0 a- F9 w9 }) R
Defaults.common$.logger = appLogger;
5 j9 Y! |6 ?' s& f8 c$ y" SMemory.defaultHeapSize = 0x8192;    0 ~3 c1 }4 S- ?' V$ v
Idle.idleFxns[0] = "&LEDStatus";
% u* r) H0 G5 XCache.initSize.l2Size = Cache.L2Size_32K;8 ^# c' j& g4 I! y! L& H" T

1 l% _3 x) ?3 l
回复 支持 反对

使用道具 举报

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 */7 E: r& z$ m# h4 Z$ y8 t
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 \  z& R2 Y, k
var heapMemParams = new HeapMem.Params();
0 m& h# X- y$ V- M; Q/ @4 OheapMemParams.size = 0x4000;& b% W# _$ V$ f9 ^/ j

2 B- V* U  W- b& |9 V3 L$ bvar Memory = xdc.useModule('xdc.runtime.Memory');3 }" Z2 s: i5 V! W6 @4 G
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);0 ~# D* z' |8 |& f+ D# e2 b
. [8 q2 }: @& v* G+ q
我大约calloc  每次共计大小为5K*16bits,( q( n1 ?# ^0 ]# F9 O, I4 k
而默认配置才0x4000、需要改大。
& X0 i0 }* ~7 d9 J( a
9 Z. Z* Y4 [9 h- Q" S
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
  Y; A& G" a8 A  e  p; ~! QProgram.heap = 0;4 N' ?! r/ u' W2 j/ O" M4 Q
Program.argSize = 100;  /* minimum size */( ~& h2 b+ r0 O1 S# m9 L1 x7 S% N
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-12 04:24 , Processed in 0.043155 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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