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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构1 a" K( z) y! J# H/ |, y+ \

: J9 [; f6 R1 |: c  H    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256, h- ^0 B" i- K2 x; W2 @" z) S

7 V  t3 p+ g8 _4 g2 [9 k# t其他程序段。。。。。4 b/ {# ?% t& ?- F

6 S% |4 C2 }; f  I! n: L) A   free(x_d);' f5 U+ I4 l' l  V
% c+ G5 Z) Z7 t: j2 p
使用DSP侧单独调试功能,验证动态申请没有问题,
, T2 l4 B5 T9 C. [% G7 N$ v( w
6 r$ V6 n) N+ f4 g8 @但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
& \+ j8 O7 V9 L9 }$ y. W
3 O$ V2 N3 F) Z, W/ ~
* X$ l- f. C9 Q  U
  H& F- W& r0 E# B

7 ~* \, e8 g* Q  A3 B; c
' R' ~+ I3 a( X. T; Q5 O5 U+ ~$ b$ b2 f+ @  C2 g6 B

  J3 \+ s* U& ~9 u/ m; v
6 O& p0 |% i/ l0 i/ ?
$ D% W" F0 |( ?) z6 Y5 t
/ @6 Z) C8 j) |( i7 z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
8 F; z( V, _7 A$ `+ t+ w我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下2 [1 _+ @1 @, l: J8 y) Z
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
# W9 ?' _% Y% m$ t5 F4 O  X2 p& r) ^
9 z% l3 N2 j/ m8 g: t
是不是需要在DSP.CFG中进行配置1 u0 B) @0 v' `9 q! K
我现在的配置为/ T0 b1 r, D$ O; i. }4 K
( {! T1 ?7 @4 g2 B8 D
/*
5 p% w9 F0 J) _ *  ======== Operating System Configuration ========) J2 ^7 \4 ^) ]7 \4 w4 O
*/
; N4 A- k& m6 Z  W
, h& L, N& J* d  b$ D, {  |/* no rts heap */, O! e# R5 b2 A: C9 p6 E: y
Program.heap = 0;
% Q' W: E4 ^+ b( HProgram.argSize = 100;  /* minimum size */
. Z) K( L" [4 u0 f' t/ |5 S, O2 dProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
1 F. \! r+ e3 H
% K# \& v: H- P, v, U/* create a default heap */" Y" Z5 i; L2 k' F8 q% N
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" J2 L1 ?: u) |1 [1 F. n
var heapMemParams = new HeapMem.Params();
1 r) H, D- e1 C% a3 m/ q# zheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
2 [: C# T& @; s% y2 Q
  h% m/ K" e" n3 P  c! [% q- I
var Memory = xdc.useModule('xdc.runtime.Memory');
2 ?7 _/ A, g( @) _; e: T4 EMemory.defaultHeapInstance = HeapMem.create(heapMemParams);" b5 w; F& q/ m# b

: s) a% n4 Z& d7 l/* configure System module */
/ N0 W4 J/ e5 B& rvar SysMin = xdc.useModule('xdc.runtime.SysMin');5 M& I. \6 T) r7 M  g$ c  h) M
SysMin.bufSize = 0x1000;
9 c* M8 r) d7 Y* U4 v2 S8 x& s  E2 rSysMin.flushAtExit = false;
" ]+ @0 t# c* ^$ x1 d, q
$ b/ M: }- ?9 k' Jvar System = xdc.useModule('xdc.runtime.System');
( M3 _/ B5 X( s9 x" O$ }System.SupportProxy = SysMin;
# [0 H. d' R* Q& C$ U  @1 h
5 P  e* X4 T# b5 d( _7 O/* configure SysBios to use the lower half of Timer 1 */! O8 t+ \. H0 ]  M9 G- @
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
$ C6 P3 w4 K/ q% b0 ^( I# v  u5 Yvar Clock = xdc.useModule('ti.sysbios.knl.Clock');: S4 _+ V4 u% E) R6 c5 ]. J  `9 Z
Timer.timerSettings[1].master = true;8 f2 Q. `' ~$ r, V. t
Timer.defaultHalf = Timer.Half_LOWER;
! d4 J, z# S& f% c9 RClock.timerId = 1;
6 S- h" n) s$ V6 t  N# V+ J; }! V2 K$ Y4 O/ X8 U( T: U

' V" r, c) U$ R$ d5 Q+ ]/*
* y) V6 A0 v% w *  ======== Miscellaneous Configuration ========
, b. a& O! ^! `$ S* b */" d. z! d2 ]' ~) c# d8 V7 N
) t( @! S" w9 [6 ^
/* set default diags mask */* Q" m% |( a) K2 C
var Diags = xdc.useModule('xdc.runtime.Diags');
" g7 E( `; G7 n  Evar Defaults = xdc.useModule('xdc.runtime.Defaults');
" r% N6 U$ t  O1 j: f3 E  l  q
7 i2 \( Q* w; v3 i2 f0 n, xDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
. {; E$ ?8 G$ t8 B  k7 H6 |Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
9 p# Z" i$ e6 eDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;  d  Y& Y  K+ w2 n7 s
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */  s6 H" t: N& u$ d5 W1 B
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
+ ^8 ]. ]: |6 H. g! p8 N$ H8 Z! ?Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;; N! {: u  V0 h% \
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
3 ~+ E4 d8 t# j# [Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 E5 ?2 o6 [0 j/ l8 c" c9 ZDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
. Z3 ]( D( `) |" z6 WDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
& ^2 k, C2 A) G2 q& u& XDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
4 H3 m) W: R5 ?( v6 }Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
. O0 f1 |8 H2 ?' c7 E  S1 q5 fDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
; ^4 }3 q' B3 I4 H( w0 ?# nDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;3 h0 L% \& F. R7 e2 ~$ W

. H7 I' V3 u$ R$ ]5 z/* override diags mask for selected modules */
. l3 C$ L' K% i" L# j/ m0 zxdc.useModule('xdc.runtime.Main');+ `1 P% r7 p$ G' i* [+ M2 U# q5 _* X
Diags.setMaskMeta(0 G* u, h' W1 B3 A
    "xdc.runtime.Main",$ B9 [2 I9 h* x2 ~3 j
    Diags.ENTRY | Diags.EXIT | Diags.INFO,4 u- o& K8 N9 c! ~* n  s
    Diags.RUNTIME_ON
: P0 \+ b& R  x% ^);5 ~+ R8 [" y# i, j2 ]' b9 p7 D! I5 I- u
; @2 N- j; M4 q4 B0 H
var Registry = xdc.useModule('xdc.runtime.Registry');" e' }$ \1 n/ @, _3 w  Q
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;5 T8 V+ M; J) x; E8 T* u5 f! n
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;5 A1 C. T) p2 d- C0 j! X
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
9 v8 ^/ _4 W0 _* Z. M# w% `' rRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;* [7 T- {. S9 |0 c, Q5 `5 y/ N' q

; g; q7 o, ^$ L3 K/ B5 D, W/* create a logger instance */
& @2 C" ]; f- Lvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
/ l+ P& `( ]& S8 ~! r# c' a4 `- H2 K) ]var loggerBufP = new LoggerBuf.Params();! g( w% F6 X0 z5 K7 @# L& J
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */) c- V' w, u: ~) X1 K) R3 H
loggerBufP.bufType = LoggerBuf.BufType_FIXED;9 X  l; r: \0 D* t! a1 m
4 e2 y6 i: \/ H6 _0 l! \
var appLogger = LoggerBuf.create(loggerBufP);
* z; H; T( ^0 J, o: [+ o; ?4 _% RappLogger.instance.name = "AppLog_Core1";
2 s4 {* f; r/ d5 @Defaults.common$.logger = appLogger;
1 j! b+ C- Z2 e" T& M- w, v$ HMemory.defaultHeapSize = 0x8192;    ) F) j$ s, V! l& Y* R
Idle.idleFxns[0] = "&LEDStatus";$ q$ c2 Z7 B% I
Cache.initSize.l2Size = Cache.L2Size_32K;
4 A+ y$ q6 f% Y: T" Y9 p9 u6 }/ Z0 R& N) U$ G; H7 |
回复 支持 反对

使用道具 举报

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 */" s. P' G: ?% M3 F  d! G3 X8 s
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' P# i1 Q6 s, Z) P) H6 Z% bvar heapMemParams = new HeapMem.Params();/ P9 l& _% ~! ~$ n' R5 Y
heapMemParams.size = 0x4000;$ Z+ i" a) h' I! h# k
. i7 r2 R; I4 ]5 A* R- _
var Memory = xdc.useModule('xdc.runtime.Memory');
6 ]7 u$ G! E+ r5 ^0 ?Memory.defaultHeapInstance = HeapMem.create(heapMemParams);% J7 ~% }; C4 k# T& P+ a% F7 X3 @

& ~7 b, w* `7 R我大约calloc  每次共计大小为5K*16bits,9 \: u! V1 ]4 c2 T+ u
而默认配置才0x4000、需要改大。$ [$ A; b* |3 E+ `; o  b; g8 F
% a/ n9 h8 r2 D. I5 j
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
$ a' ^9 k! u! |+ F# i4 B9 WProgram.heap = 0;
! @- u4 D  e4 L; wProgram.argSize = 100;  /* minimum size */
& U& H. P3 C8 uProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-22 17:41 , Processed in 0.041056 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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