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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
& b, {8 Q+ O: F6 Y; }5 _- [# E7 {+ O  g) H2 c3 ~1 a- T
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256! K" e! E3 k+ B& `8 q

8 u! e! E6 T# R- z9 ?* p5 R其他程序段。。。。。/ V" A" B: J. X1 `

& J# f) Y7 l6 M' n+ R   free(x_d);
* N+ }7 o( A/ }# U( P) F
) t1 S+ L6 x/ q  {* n; U; G使用DSP侧单独调试功能,验证动态申请没有问题,
, F$ \# O' U6 k1 X  ^2 O+ h. T# Q3 k( i3 z: p7 M0 p
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
$ S4 }' T$ J, R
& j) V4 }# J. L
: O( ~- u% D5 o# f& A! L

" U) L" y2 q4 J) D
) Y) d8 @+ Y! P( N  y& L3 G4 V

9 R3 e" D$ t8 D6 m7 C. {! D; _0 d) A, i- J" L5 C7 O
6 }. h# S/ v8 W% |# }- q

# C* H+ i  Z1 b  W3 D0 t) R, `. u3 m+ l0 t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明0 ?8 F% ?* y- g- Q! G) @6 O+ ?
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
' r# h& I* I5 g1 N/ V(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
4 ~4 z/ F, U6 M# n, @

5 ?7 L! j: ?0 y% C8 N# n7 E是不是需要在DSP.CFG中进行配置" b6 i* o; q# F* O
我现在的配置为# ^% S& Q; |! i* a0 R, ^; P
& j8 _0 S8 Y( Q6 ?# f  l
/*
+ `5 U) `( K4 D$ D3 N *  ======== Operating System Configuration ========
5 l6 U" o5 u) f8 j( i. G4 a */* A) Q8 |& G( \( N* Q* _
# ^5 E' ~" ?1 N' ?. Z) s' t
/* no rts heap */. Y) {% S' H+ [. M( o/ I
Program.heap = 0;
. H+ u  E$ l/ y4 NProgram.argSize = 100;  /* minimum size */" V: S9 H0 F( l/ }
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
6 k; v2 U0 B, S% p( f5 z. e# F% `5 ?
/* create a default heap */. H3 Y' P* }6 c8 F
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% ]. K. v) v& vvar heapMemParams = new HeapMem.Params();
  x6 m% f: T) q0 ]( e: o% y8 F2 @, YheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大: E+ [# w7 k, _4 |. M
, X' E7 U4 [6 T3 \
var Memory = xdc.useModule('xdc.runtime.Memory');/ s, t. ?  t, q) e
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
; N( G4 V% r8 t4 W  ]/ h" B. d. \6 ]7 l; U% S7 r0 n
/* configure System module */# A* g* ^% ]" \: a& J
var SysMin = xdc.useModule('xdc.runtime.SysMin');7 o" }' b5 s& Q  g7 }* x9 {' v
SysMin.bufSize = 0x1000;
, \. W2 i/ X& \  \3 iSysMin.flushAtExit = false;
' z9 O. Q- z' R: h% N# m- M" g9 a% p; }
var System = xdc.useModule('xdc.runtime.System');
" O5 K+ P. b5 ?6 p- p. D, rSystem.SupportProxy = SysMin;
7 E# d3 f% Q1 [$ Y' P4 F) Z; o3 w: O" x2 P! o. p# x# i4 s
/* configure SysBios to use the lower half of Timer 1 */  k7 t0 {" T- l6 P4 K/ ~
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
6 L; B; c: C0 Xvar Clock = xdc.useModule('ti.sysbios.knl.Clock');& ~1 {/ x% h1 f! Y
Timer.timerSettings[1].master = true;0 h9 r  @2 Q( k
Timer.defaultHalf = Timer.Half_LOWER;
/ \4 }: S7 X% p6 p. Z7 \+ oClock.timerId = 1;9 v) T; F0 F- s% `) [& G. L

$ B% e. G% o, O/ Y1 t; c; O" q+ Q$ B4 B! {7 Y. z- k& {
/*
4 H( S" G: d* Y *  ======== Miscellaneous Configuration ========
, P- n3 X& H( L+ {# z9 E */
, t# Q2 G, S, {# A
1 j5 z, C3 c% Z$ l/* set default diags mask */
8 l" m% ~6 F* V+ O- M% {var Diags = xdc.useModule('xdc.runtime.Diags');
" {" H6 @" d! \var Defaults = xdc.useModule('xdc.runtime.Defaults');
- f- W( I) \! T0 ?7 K  E$ y) o$ E6 k6 X
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;3 }- A; e% O( Y% m) U9 H/ Y
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;0 C- t' b* I: r3 u9 q- V# K/ ]
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
/ M' C; u" b5 S2 o' ^$ s- UDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */7 k; F4 x/ V/ j/ }1 D
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */; e9 T: p# [, u7 y4 R/ v% ?; F
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;6 Y+ ~: V8 o2 W5 z( w% n: ^' E
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
2 B: d/ Z. u; V+ }0 l  IDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;' ?; H! Z  A! D
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;; D- O& B0 s1 f& i
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
# }- N1 b0 C( C3 ZDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;+ H  K  _: t& ?; j8 k' N
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;# W9 t: y: H/ `2 Q  _+ P
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;- ?) `4 D9 g  d. _
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 c2 t2 x5 Q5 b) ^; f9 B+ W; {  X

! I! N0 i3 D3 v# E/* override diags mask for selected modules */
! Q. |0 V' s6 m6 h0 vxdc.useModule('xdc.runtime.Main');
, ?; o' \+ b3 S- n# UDiags.setMaskMeta(
* j7 f9 p5 a) b! s* V    "xdc.runtime.Main",) F% l* A* ^1 _6 [
    Diags.ENTRY | Diags.EXIT | Diags.INFO,: h5 e5 c2 q7 y4 G, s
    Diags.RUNTIME_ON) d. N" j, S  u& J9 E( l( S
);2 C. k# u6 j  h8 `+ `3 W: {

) C9 i) S1 I) a* Hvar Registry = xdc.useModule('xdc.runtime.Registry');
# Z2 [- ^. ^& O+ QRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;" c( R2 o: L* e5 ]& D/ H) |% N3 G
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;, i$ ~7 c. K0 J' m) U8 B5 K' _
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;* U) o! ^% p4 z) w; s0 k& }9 V, O
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;  n; q. o7 @$ B. I0 K$ K
6 W- _) T/ v' D5 f
/* create a logger instance */' ~% P2 }! S/ p+ H: |5 ]
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');3 L" Q' A- c, R- S
var loggerBufP = new LoggerBuf.Params();. Z  f5 c8 X; c6 e  K! H
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
  f4 u; m( h, G9 w& I4 z1 G0 |loggerBufP.bufType = LoggerBuf.BufType_FIXED;1 |' O8 u+ n  Z; V" {

% k& N6 ~2 `& r5 E  q0 G0 uvar appLogger = LoggerBuf.create(loggerBufP);
2 w& T/ V3 Q- E" e, ?: `$ i9 K6 u- WappLogger.instance.name = "AppLog_Core1";( m( W6 S8 u2 Z) z0 x% E/ S) q# X
Defaults.common$.logger = appLogger;5 N$ j6 `7 V; @, _% e1 v/ k
Memory.defaultHeapSize = 0x8192;    ) H, w  \* X" c" }5 c
Idle.idleFxns[0] = "&LEDStatus";
" G( Y4 n' y# f% b7 Z8 @7 Y0 OCache.initSize.l2Size = Cache.L2Size_32K;
) [8 \) Q. N3 i- y- r4 f6 d) b* ?1 P8 |; f
回复 支持 反对

使用道具 举报

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 */
' [! p0 V$ ?5 e& F. }, d" |var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# M3 R. H2 L6 o5 s$ F* C5 K1 n
var heapMemParams = new HeapMem.Params();
: Y* m% _; {3 f2 I/ C, m0 ~4 qheapMemParams.size = 0x4000;2 \. w$ K1 w- ~# Q% v

. x* g' M( H! c" k- Rvar Memory = xdc.useModule('xdc.runtime.Memory');" X" }) `- u+ B9 B! P
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 m) A4 n( b. ^; c' \# B8 j" c6 _( E5 y
我大约calloc  每次共计大小为5K*16bits,- ~( Y9 {0 @4 a7 K
而默认配置才0x4000、需要改大。
$ @: W$ B6 h" l# q& R5 z  ^
' v& [" p* X$ Y1 A; ?# z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */; Q& z6 V! C( t- c; X. o, Q
Program.heap = 0;# G: Q! W/ \( {& s- B2 t
Program.argSize = 100;  /* minimum size */
% ?) p; e8 J. ?- V, z# xProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-14 02:44 , Processed in 0.044073 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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