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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 P1 K. \1 K0 m; R5 A& ~# G0 t* F. y& X2 @" ^
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256& O9 h* v8 u2 @" ]" C# @
3 Z  w( O! X4 h5 _
其他程序段。。。。。' u# X, a( @" D* S; [
+ s% k: L6 a8 c: }8 `9 k! Y7 D
   free(x_d);  J/ }* P1 X2 \  L) u5 X/ h
& `0 n/ i  m9 S% {7 m7 L
使用DSP侧单独调试功能,验证动态申请没有问题,
# k1 p6 I- o/ r6 _
3 l5 a$ A$ Y1 P! W但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
, e) B0 f- l1 s0 h% M' U
. I# c3 K& U( z% e* c0 F
2 p) c% u: [  L% N& h& G
  W0 C( @% ^: |: S$ m5 \
# R( A: x6 I8 B, a' K

3 W4 z+ x! r, r! U  c5 u' x9 y: H/ o3 t( ~5 y. Q6 \
  G6 _% O7 k8 R- {) y
/ L( ~3 ?# R3 k4 V0 j

8 G3 A! a6 g$ ?" j, y" ?; r4 l6 T& ^! y' F6 L9 z/ ]5 d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明, E" g. j9 S, n8 R
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下0 N$ R5 S& V8 K, e3 o% l$ w. w& ^9 M
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)  V/ u- {5 [. X$ `& O- L6 X* C0 [

  R5 S0 X/ X( r% K8 z是不是需要在DSP.CFG中进行配置9 `. u' O6 t: u3 d, o
我现在的配置为' i# n- ]  A: N1 U2 K# `! P; v
' W" M1 x5 b) a, ~4 i' T  y* g) q
/*5 g9 m9 `! X- M
*  ======== Operating System Configuration ========
8 n% I( G" R" l2 O5 c- F8 H */* x4 f) e* H, P
. L2 }& u- D$ B7 [6 e1 }
/* no rts heap */
: C+ B3 L" a8 @0 u" z4 x& x! MProgram.heap = 0;7 S0 u5 ^/ g1 Q# z8 e
Program.argSize = 100;  /* minimum size */
3 i6 m/ g, @: G$ a# FProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
% t" P) V) R$ @  c! I
$ l& b, O5 R1 ~% f8 ~! u  v/* create a default heap */1 d- y0 ^; Y& `
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: S) t, y7 h( x5 `  j; H5 p* d
var heapMemParams = new HeapMem.Params();
" u! v: S, e; X/ M: oheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
3 g8 U3 w. G3 M: D1 C, s* r
1 N) S- W& e/ [# m
var Memory = xdc.useModule('xdc.runtime.Memory');" k, n7 ?1 h, }* F' B
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);6 r2 s' H6 O9 Z1 ^1 Q5 f/ s0 `& ~
5 T: |- C6 [. d9 H2 K; R" q6 V
/* configure System module */
6 I$ D5 e% _+ |! Uvar SysMin = xdc.useModule('xdc.runtime.SysMin');
, z# L9 t) P6 p- \. PSysMin.bufSize = 0x1000;
4 E4 ]. @* R7 ]8 ?; t* t0 oSysMin.flushAtExit = false;" R$ @+ @$ v% J. a& ?0 d- m3 S

8 V/ _6 t- A  ]2 }; `1 \var System = xdc.useModule('xdc.runtime.System');
. o$ u& Q2 o# I  j6 b( CSystem.SupportProxy = SysMin;! T. K8 d6 ]9 y- _. a; ^; V
! s3 l2 g/ E3 M. {  |+ \* Y5 o6 j+ X, N
/* configure SysBios to use the lower half of Timer 1 */6 z+ J) H, D, `) ~& N& q  h7 ~# E& J
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
9 c1 X4 o8 J9 V! t/ t. Evar Clock = xdc.useModule('ti.sysbios.knl.Clock');
( y. w6 z& X3 `, Q* v* q+ ?Timer.timerSettings[1].master = true;
' `: T7 F& s0 |, k* u) r: g4 vTimer.defaultHalf = Timer.Half_LOWER;; \0 ?5 u0 Y5 ~/ w2 U% A7 T' t
Clock.timerId = 1;6 r+ m: W0 c% y, c9 R. w

! K4 }) [8 b) m0 {+ J9 x2 X; n$ |# W( E" q& q+ @9 w
/*
9 H, @  I3 B5 Q" R0 U *  ======== Miscellaneous Configuration ========
3 g5 N* l$ J* C */
. v: n( z  v! _! W' u/ r( x  v' a7 v3 r: l6 z; B5 n. k
/* set default diags mask */0 P/ f5 ^. y2 G, z1 A6 q8 ?
var Diags = xdc.useModule('xdc.runtime.Diags');0 k. K% t, z3 [; r' O4 r2 R
var Defaults = xdc.useModule('xdc.runtime.Defaults');# @( J* b- w3 p, L, i

& D7 _0 i) l/ t9 w( f+ H/ g+ VDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
" ?4 a& g( [+ _. k# T9 l5 ^Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
" L3 j# \) a4 U9 o2 vDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
+ m# C- S2 C9 c8 n/ gDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */! I( J, G) K* F
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */4 J# Z! f' b$ p' N7 G- ]7 b) M
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
6 G7 `& C& |9 L; MDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;: B. O" o  T) h5 Z* r+ ^
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;/ A+ x5 I2 O  s
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;* c7 j, |1 E3 a' s3 S( b2 ~% l- P
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;3 z/ T  p2 X" |) Q; [
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;7 w2 x% ]4 @" l$ }  x
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;' {2 \) l) W8 {9 Q' w. y0 w
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
/ \4 w, @5 w) e1 ^Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
8 `9 E" S7 H+ E1 e
( v+ u8 j0 ^' F0 m/* override diags mask for selected modules */
6 F$ o2 j, A( k6 b9 ~2 ?4 ^0 a8 }xdc.useModule('xdc.runtime.Main');# j, F7 y1 k8 y. _" R
Diags.setMaskMeta(1 G8 S( C( C. X6 g9 n+ a2 y9 l0 {2 ?
    "xdc.runtime.Main",2 F  l4 k3 u$ U# f9 y; [
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
3 Q3 U: E  z" H' f    Diags.RUNTIME_ON
/ e2 H+ p  y4 U, J" s8 |);
: {  i. O+ s2 @1 u, {
0 w- U; }- L5 z9 `4 E3 D2 hvar Registry = xdc.useModule('xdc.runtime.Registry');, j- _5 f( c8 v+ h! e
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
% D4 y3 e4 S! h5 ^9 \6 Y6 `Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
1 e  Z6 f7 a" h  s+ V3 CRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
0 o- f; f# b% BRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
# c2 k3 P& u& P! g3 X1 u5 a9 B
' M6 ]! j% K" \3 L/* create a logger instance */: X, [3 I( M3 K! p+ e
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');5 f# T. u9 l) ?: {" j8 b
var loggerBufP = new LoggerBuf.Params();3 {1 B- y$ G  E. f8 H' U( k1 M
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* P" ?: m4 V, ?6 {loggerBufP.bufType = LoggerBuf.BufType_FIXED;9 B) Z( k8 X1 V$ F- S4 r

' Z) [; J# [" jvar appLogger = LoggerBuf.create(loggerBufP);
0 S$ F! e. t) c+ ]; HappLogger.instance.name = "AppLog_Core1";1 k% x( k( V0 L" N' D5 o" I6 a
Defaults.common$.logger = appLogger;
, Z8 ]1 K8 L1 H1 c9 {Memory.defaultHeapSize = 0x8192;    . `' L8 \) ~) ~2 j* ]
Idle.idleFxns[0] = "&LEDStatus";
* [7 C9 b8 F' x8 nCache.initSize.l2Size = Cache.L2Size_32K;
; |3 p. L1 m$ Y4 s9 S* B8 w8 H9 I( {2 }. O/ b
回复 支持 反对

使用道具 举报

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 */
. x; q/ M4 q3 H$ Ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" W+ w2 {. O( q) n* ^+ x4 k2 L- R
var heapMemParams = new HeapMem.Params();
4 y) }$ [" I# n% {0 C0 OheapMemParams.size = 0x4000;9 A6 _# `( n5 I  v. R/ j5 k

0 w8 E5 D. T) ^& ]" Rvar Memory = xdc.useModule('xdc.runtime.Memory');5 {  N2 I4 h6 J. A4 D
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
" }4 L! a( j; A+ l5 ^2 z% T
! d8 f5 ^. u. h  t' W& A% q8 L我大约calloc  每次共计大小为5K*16bits,/ v; W' V8 {7 G( K" W; L! b% h
而默认配置才0x4000、需要改大。2 e" A% d9 h# C) i6 y
+ [5 n! n& o) w
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */+ p# c- ^$ R, A' }
Program.heap = 0;: V$ w( T0 F7 C0 ^7 \0 X, }
Program.argSize = 100;  /* minimum size */
. l- J) i" N; m! J9 HProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-2 22:35 , Processed in 0.041352 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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