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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构- f8 c# Y& O: Z) g4 c* a  \
+ w, @) g$ D* P9 h6 G3 q
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256( A5 |- }/ w  e: i' a- Y' a

: G: ]+ Z, W; o+ v' R9 G: K$ [其他程序段。。。。。
- Z0 c2 q7 {; d9 }$ y; B2 w5 X5 ` ; w, i- M) `2 @7 {& c! k: N
   free(x_d);1 r# f/ s* [, o/ G" k& v
* D- ^# e- Z; b$ I+ h" g
使用DSP侧单独调试功能,验证动态申请没有问题,3 c5 E, ~* x" [5 ~# L$ C: b
1 a/ h4 ]$ i* i5 l8 E
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
* _1 l/ W4 [' i! C, ]

. l' ?& Y6 J& Q& h; T: n/ H% T8 H9 z5 K
% F7 B" K+ b% f4 Y; Z) m7 s- m- n9 F

* W5 h+ o2 a; C- N7 E3 Z, @5 k  g( ^  I. a( O

* {: S( \8 z2 u* p# m5 z: r2 a( ~) a# z0 i

/ `$ t: ~/ c4 w# ?9 }/ @6 z* e5 k: n5 X4 p

% f' u! k. R+ b8 X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明, y4 C2 m/ r$ _8 C$ d1 G) V3 q
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下* S/ @" f% e, Y$ P: X" {$ z
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ [; E  R. n) T8 d
* G& C* P( @& o3 R; _7 k- V
是不是需要在DSP.CFG中进行配置8 n: _( Q. J  w
我现在的配置为
9 f  b* U5 ?; U" j' l% m. s( \! _( v7 N+ @& R/ A
/*
& V8 G' O  Q" C! j *  ======== Operating System Configuration ========
4 M( g6 F; N8 k/ r' Q& W% u */6 p; N' j: q5 k" q
' b3 Q/ Q- o8 G* Y. @
/* no rts heap */+ r/ N" Z$ k: a1 H" h* a
Program.heap = 0;4 @: ~- I$ ^. M+ Y! W% ^5 f
Program.argSize = 100;  /* minimum size */' F9 u6 T. J# u
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
' o. x* B* z6 a$ H: f. e+ ~, X
* x' a# l) h: F# m* X/* create a default heap */: o. X& B4 u, `
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 o& J9 P& P+ y8 o. G
var heapMemParams = new HeapMem.Params();
) m- J% n7 k- H: P: I' _5 hheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
' r/ F% r8 {! k* H! P: r3 ?" d- F, O) v$ x! [0 e) n3 q) x
var Memory = xdc.useModule('xdc.runtime.Memory');
" c8 B. i3 L( q6 c7 ?) T5 cMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ S& r4 s/ N, I) S$ _' p! q  a* E8 H$ _% ^
/* configure System module */
# F& M/ P" N+ k: Bvar SysMin = xdc.useModule('xdc.runtime.SysMin');
0 g" v, Z& U& j4 b- w: B6 R: z6 ]! VSysMin.bufSize = 0x1000;* J5 h  L1 M8 y" t: I9 n2 c$ z
SysMin.flushAtExit = false;5 z) N0 ^! t7 V3 B+ |
/ ~4 N3 x0 _6 o; ^1 w
var System = xdc.useModule('xdc.runtime.System');8 m2 L* |5 }. B9 L
System.SupportProxy = SysMin;4 r9 B4 \) p9 _& O+ t' B1 [2 n4 o
9 I+ s* z: I4 d4 ^' [. L2 Z
/* configure SysBios to use the lower half of Timer 1 */
: r! c0 t7 l+ A. Cvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');/ M& h$ d0 E! L& I
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
+ D# @) ~0 v; v1 b, n! H) {Timer.timerSettings[1].master = true;% j  i6 `. l/ v
Timer.defaultHalf = Timer.Half_LOWER;" [- M* g, n6 |6 V9 H$ ?6 m- W
Clock.timerId = 1;+ a. B0 w- }- E
) k% c# T+ n% r: T

( `! \. s/ x" s* B& x# {" i/*- U- h/ v) @6 J! c1 D
*  ======== Miscellaneous Configuration ========
& d+ i) P. x2 b# Y6 @* u */
0 Z% j2 _: P, p4 T  [) s6 Z  K% |3 f% d" ?5 t
/* set default diags mask */8 P/ u% z7 Q* u7 A+ b: \, b8 Z
var Diags = xdc.useModule('xdc.runtime.Diags');- S- A+ ?2 ~) k6 d5 o# P/ l" q
var Defaults = xdc.useModule('xdc.runtime.Defaults');
; U) \7 r! g8 n0 D* Q& K1 v' ]! }/ J, H6 T& y
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;# G/ h/ h4 Q; k4 d) o& n. \
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
  F( l! l1 @8 K) rDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 F: H" @4 K' W4 V( L3 DDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */: ]& t# j( m0 q: T( h$ F
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
6 a1 p% ^! a: k) M6 B, E# h0 b6 mDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
3 @; h5 h6 k& g0 G: q" sDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;% z1 s, p! ^& `0 }4 W: @6 o1 E
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;; [4 F' y$ M  i9 L+ _
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;5 c7 ~/ B( V1 S* n' X
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;; k! V7 x7 [0 R; n$ N  k! F  i# M- ]
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
! V; s& S/ `1 W/ p  w# qDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;" O' N  a, ?3 o5 r7 p4 p$ O" f
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
4 y/ y+ E: y8 Q5 u) }Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
! P+ H" F& N9 V! n" z, Q' U5 c+ j/ G+ `8 x+ I1 ?
/* override diags mask for selected modules */
) [: x- S/ }/ ]( N6 D- x9 A  ~xdc.useModule('xdc.runtime.Main');/ j4 |. ^- g7 ^9 q% X% b
Diags.setMaskMeta(4 U# _$ u3 e" v1 h
    "xdc.runtime.Main",
3 E: l0 X! @  C1 Y/ n+ ~    Diags.ENTRY | Diags.EXIT | Diags.INFO,
8 q4 _. z4 F, H5 f% ]2 k    Diags.RUNTIME_ON5 B5 `5 f. v# y( o( r
);
% d* O- R. g; T% I5 p
  U; y, v+ T' C" y* b8 w1 z/ Tvar Registry = xdc.useModule('xdc.runtime.Registry');# b" l5 r/ A6 `# x6 D& j
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
: e5 h) T) m& N* e. b( B" gRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
& g, t2 {" E2 g/ wRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
0 {9 Y( j. s/ ?- ]$ w, q' fRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;$ k& l. I9 q9 ]9 Y8 K9 r, n7 I; Z

% ]* B6 z- ^& z- ^4 V/ D8 ]' p+ `5 C/* create a logger instance */2 k( \4 @8 W, W  n
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');# p' B; t" N% q0 h/ X
var loggerBufP = new LoggerBuf.Params();
: p* z' Q' S! o- n! L# {loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */9 Y# Y' F# S1 v" T& q7 E& A5 v- @
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
6 o2 Y( o( X/ K3 \7 S$ d' o7 f% o0 f1 D+ t! W
var appLogger = LoggerBuf.create(loggerBufP);
! Q, M4 H  i: |. b3 O; I' @appLogger.instance.name = "AppLog_Core1";
  S8 x/ ^  m# H- B! nDefaults.common$.logger = appLogger;2 ]/ q8 D2 v3 }6 H( w
Memory.defaultHeapSize = 0x8192;    6 |! N* [0 T+ ]: {
Idle.idleFxns[0] = "&LEDStatus";
. x) |. s' C4 P' rCache.initSize.l2Size = Cache.L2Size_32K;
( m" H3 ~: y0 @+ `* o4 k& ~2 J2 |% G0 E9 ?6 P9 A' P
回复 支持 反对

使用道具 举报

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 d; X1 c5 Q8 S0 O; _" Z1 p: ~2 Dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. O9 O" v9 z. K
var heapMemParams = new HeapMem.Params();
3 K6 i5 j6 ~4 HheapMemParams.size = 0x4000;
5 y" ?% i8 O9 U9 G: {" r7 [: r# I% v0 \# }9 t: k3 }8 N/ E8 b
var Memory = xdc.useModule('xdc.runtime.Memory');6 P" q+ U0 ^' n& [$ C5 G$ s
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);+ ]% i1 X4 {8 U0 @/ b" X
6 s( E% Z* q+ w
我大约calloc  每次共计大小为5K*16bits,
: @/ _8 m: H$ j0 O而默认配置才0x4000、需要改大。
9 O: v3 q. r4 ~# g" r8 _9 m% c; L% a9 f& S' L$ f
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
6 l+ K0 F3 l5 O  x+ gProgram.heap = 0;: i; {3 C: n# I* o3 ?
Program.argSize = 100;  /* minimum size */
) k; k" E% h4 M6 `8 CProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-8 19:21 , Processed in 0.050477 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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