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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
1 }- t& a3 C; Z4 W% F* W7 h4 u, {3 Y
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
: A( P5 P4 G5 H* t& F
5 v- O7 C' Y  @3 I* }) n$ A其他程序段。。。。。, E0 Q2 z0 ^5 n* P' q
! ]) k2 A7 w# \! N$ D
   free(x_d);
0 @" H4 A0 |" K  H. X) T% W" y9 |: J; n8 u# W1 ~
使用DSP侧单独调试功能,验证动态申请没有问题,
- c- s# q8 n" u! k" D* h
; t% ], K, |$ _+ f# {但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
7 m  k8 L6 Q) A- z0 l$ O7 D

* _1 O5 H2 Y* i- W6 \6 ?9 D& @: M
" `- r! G! i9 a. v" S- f: L
. V" ~* I) [& l8 ^, t  r- Q$ h& F' _( u
5 Y1 p* f- G3 M, z8 J4 q% X/ X
8 e1 u# I: D- A6 x

  x! t! F, ]# U+ j8 b! C( ~, E
  ?! M, V0 r; t6 ?5 d: _) y* ~
) b8 o/ L5 _4 N$ [- X) S1 @( j; k/ R5 N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
& t/ E# ~0 ~8 M  {6 e我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下& V  l& W& z$ y+ H  o( z- o
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
$ N, g2 v+ y6 u$ `1 f

% b: e# E$ d2 P- U' ?" t  v是不是需要在DSP.CFG中进行配置: {: b+ B8 r  I0 v+ A$ u# N7 Y
我现在的配置为- R* H6 k2 N; \1 x5 l8 q

4 |9 l+ [' ~$ K7 Y7 t1 h/*% W6 }+ M, a1 M) m4 @: t' t# h9 d
*  ======== Operating System Configuration ========
+ q4 E2 Z; ~7 w. F4 f3 y */  X- p( M& b& u1 @

2 E! E+ S) N( f5 f, J. N, m- D/ T1 f/* no rts heap */
  l4 A$ Y9 Q, H- V6 A% L! HProgram.heap = 0;
" C! Y7 l, M) J% N& C/ vProgram.argSize = 100;  /* minimum size */! c( z- e) z! |8 j# e8 {, W  m
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大: O% N7 E8 \$ |* C

7 R- ~9 o' O) n1 d# B# u3 E( X/* create a default heap */, {; r4 X! F" ~. n7 b) Q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  Y/ s4 w2 h1 X3 N
var heapMemParams = new HeapMem.Params();
9 f+ K/ m9 Z8 Q0 V( ~7 T3 V+ K( fheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
# s* e- b0 i! A3 a' y
4 A# B2 q" o  j- J
var Memory = xdc.useModule('xdc.runtime.Memory');
8 u- G# Q+ G6 cMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 e4 k/ k- L" c0 K
& t1 c2 Z  I6 ~& x+ @/* configure System module */# @3 e9 d4 l& E6 Z; H- ]
var SysMin = xdc.useModule('xdc.runtime.SysMin');5 A) @/ J, r  `4 E
SysMin.bufSize = 0x1000;2 j1 O3 }$ M7 a* ]
SysMin.flushAtExit = false;" ?' j' G( f" D4 n7 x- }2 g* {, ]. h
9 F) Y1 ~1 L( v; x
var System = xdc.useModule('xdc.runtime.System');
, g" G% s! d  A5 t( QSystem.SupportProxy = SysMin;
2 m) f6 r) Q# H  ?9 R7 M& u7 y( P* v1 w7 K
/* configure SysBios to use the lower half of Timer 1 */1 o  R: s+ H- c' T
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');% Z, o! J- h7 x' S7 y/ s
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
, l( v9 W, g6 N. ETimer.timerSettings[1].master = true;
4 j" O. v! f& |* K$ s- x0 @Timer.defaultHalf = Timer.Half_LOWER;
; G9 I( o" U2 c  {: g' W& PClock.timerId = 1;7 f% ^* d$ S2 V. t( D) M) l
1 V0 U8 x6 `6 b) f2 A! _

- m! L. v' G9 S4 e/*, [: F3 S' E* _1 w1 D) V) U! B
*  ======== Miscellaneous Configuration ========
' {# Z& T* v$ O! j. C% ~' m* N */
% o- g2 O- x) N7 O" z
& I3 j; }! y* t1 J/* set default diags mask */
& E7 m5 z0 z& u8 ovar Diags = xdc.useModule('xdc.runtime.Diags');! b3 m& N9 _% {
var Defaults = xdc.useModule('xdc.runtime.Defaults');
2 B7 e: w) P) u2 M. ?% J
' `/ m2 c4 u6 Q( z0 KDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
9 r- ~9 [3 Y' B1 f& k0 i: G, H: `Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
; K+ r! `, V0 M: LDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
' w3 P' D$ l. L# h. BDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
+ d6 d5 N* n, U, S9 p( yDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
; v0 `& A8 `$ c( L% ]Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
7 z, V0 y# V' M( z3 U7 \Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;- D- [% {) W2 Z( Q; `
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- L& B$ J0 f0 P+ |
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! a4 I8 `1 J2 G8 M" wDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
# j1 f/ G. N7 aDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;' i, f" _* m1 |8 v% h& V
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;" i" B& W4 }* G! G- u
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
; R3 S5 g& _3 O. d# Z2 _Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
# d4 W% E( x' j8 w/ x2 v( c" X1 p- ^" w1 S
/* override diags mask for selected modules */
1 F! r9 ^2 t' Dxdc.useModule('xdc.runtime.Main');1 v4 c, U3 v/ O" A; q4 m5 d5 Y
Diags.setMaskMeta() |: L$ n$ w0 \' G" U, G! Q6 }. T
    "xdc.runtime.Main",8 Y$ B& C6 t* c1 O: Z6 e8 a, i
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
7 q. H" H3 P' ~3 z( W2 Z    Diags.RUNTIME_ON
$ s9 \" O7 i/ i0 `( F9 q0 o);
" d6 O/ t- H# m$ R$ h4 v. g2 m: k, \$ M2 `& k
var Registry = xdc.useModule('xdc.runtime.Registry');
. u. I2 R. o5 y- @Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
6 k1 r1 h2 |% ^, yRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
; U2 s, U  h) j/ DRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;. |. B) ]9 J' D' R+ j
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;/ p2 {7 s5 C1 S* b: v( L

9 d8 a% @5 l4 t/* create a logger instance */
9 ]6 q7 [6 R- S! V. f* A/ P  cvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
8 Y7 b3 F6 G8 K" W9 r3 ]$ Vvar loggerBufP = new LoggerBuf.Params();
& T: H5 Z& L9 F# l/ t* P5 G$ rloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
  T. `+ m' d! ]/ m6 s( E; ~loggerBufP.bufType = LoggerBuf.BufType_FIXED;' P( ^: P5 N) y3 s/ d5 D3 g" ]

( ^- ^* y4 a0 P5 A- t- W4 s% Ovar appLogger = LoggerBuf.create(loggerBufP);
+ p$ R6 \/ Z  iappLogger.instance.name = "AppLog_Core1";
; p' f4 b: O2 i' C' @2 v* ^6 IDefaults.common$.logger = appLogger;& t. @! u0 d- {+ C5 ~4 r4 S4 X
Memory.defaultHeapSize = 0x8192;    " U5 C* H( n; f3 A6 s7 ~9 L0 i
Idle.idleFxns[0] = "&LEDStatus";. H( q. Q1 _$ ^8 m7 ~, i
Cache.initSize.l2Size = Cache.L2Size_32K;9 y; ]; K% B7 u) c

* r2 E# m* V0 `  Z; |
回复 支持 反对

使用道具 举报

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 */! D: d, Y6 c* Z* I* r# C
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; t) I! o; T) B
var heapMemParams = new HeapMem.Params();: O) K# O5 Q+ C8 L  D4 `! G" M
heapMemParams.size = 0x4000;
$ y/ k3 D) N8 S/ [+ Z- M- T4 _* C# G5 N8 Z" I4 G, F
var Memory = xdc.useModule('xdc.runtime.Memory');7 C0 Q2 ^# B" d
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 Q, Y. n. M& h
. q& m5 H  {8 _; P; r我大约calloc  每次共计大小为5K*16bits,
! U- `% t8 K. ^& {4 y$ X+ N) b而默认配置才0x4000、需要改大。  }' b! v6 C1 Q  P  i
! i* ?! n6 y; N3 F1 l
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */3 s# P0 F3 ?2 ]# g: _) L- b1 m
Program.heap = 0;, \2 A. `. x4 C3 d. a8 f) \
Program.argSize = 100;  /* minimum size */# w% E  h9 `! t4 {/ }# o$ W& l# x
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-10 10:09 , Processed in 0.042853 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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