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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
# X- I& E  \% v/ [7 A, `$ a% |6 ^9 Y
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256, n9 ~6 @, h9 S4 J7 P

3 y! v8 u: t4 e  v/ V其他程序段。。。。。
0 r1 i, v* B5 W: e
/ n1 X4 t6 g' k8 T   free(x_d);
& k8 X! j* e1 F& I6 G- u  E# g6 h  l4 }; Z
使用DSP侧单独调试功能,验证动态申请没有问题,+ T% x$ Y5 _' Y6 j  p. ~% E
7 a' [+ Y( Y( F4 T! G, Y0 Y  W
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。; N3 N5 k1 x$ R4 W( L1 C- q

, A! k; Y# K; [% K5 ?2 P0 b. P5 D) \! k) N! _

, L6 ]% d5 Z; e, W  `  i5 k. U! b- S, D4 r. E: `  P
! a8 e+ ~1 @6 n* G3 f5 N! ?; w' S2 o

* R. P. H6 ~. K9 N5 X' m
# B# B; n, l$ \, c* {! f7 j2 c2 @! q  Q" a- P

2 H7 G' q& f5 g0 @* t- R: ~* ?9 v2 G
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明" n. h1 O6 W  ~# ~+ j$ P7 m5 k- g8 G
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下# k/ L8 d9 k/ i+ X' a, t
(不过疑惑的是,为何单独DSP仿真就没有问题呢?). a+ J) o; v2 Z0 r$ c+ w
) J/ O9 \8 f) Y# B) d, Q: w) i( I1 S, b5 z
是不是需要在DSP.CFG中进行配置
, Q( N! h9 X- r3 i5 ?4 }: `3 m: g我现在的配置为
( S0 F; }1 H0 M& ]* d& ?4 \4 w' }5 h9 M/ X- `( S
/*$ Z( c$ s9 {$ f
*  ======== Operating System Configuration ========2 y+ \5 q7 E0 o6 ~5 f  O! m
*/
5 s. q* N8 t6 ]% X' c; W0 T$ R5 ~( {, O% b
/* no rts heap */
4 C& W7 H# X% IProgram.heap = 0;
! T% j$ k( K# `+ e1 ?0 ~2 w. {  w$ jProgram.argSize = 100;  /* minimum size */  |3 J# o- y8 R" L# e+ n/ p, s
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大1 _4 Y3 t; T- B, T
, k) g! W! h: [; f' c
/* create a default heap */
2 Z' E* E: R3 r$ k) Fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ a2 k( P# c" N+ |/ o$ o" V! mvar heapMemParams = new HeapMem.Params();
- a% L9 L' `3 O3 D% wheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大; t$ v4 C0 [- b' L9 q. L; F
8 z' o* D  q- q1 r# N
var Memory = xdc.useModule('xdc.runtime.Memory');* h% R6 U' |! k
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);. n- k6 [% V% M  K: J3 q# n) {

+ z7 K* Y& ]7 L" K  @$ V( _& C/* configure System module */& ~2 w/ ?7 e6 C" ~# c
var SysMin = xdc.useModule('xdc.runtime.SysMin');
# N: E2 v5 i4 N1 ySysMin.bufSize = 0x1000;$ X+ {$ W9 L/ k3 d2 F& U3 i4 c
SysMin.flushAtExit = false;
( s8 C& ]+ r8 [3 u; Z# [: ], {
var System = xdc.useModule('xdc.runtime.System');3 l4 _3 Y. \- l" K
System.SupportProxy = SysMin;
) K# t4 _3 `! K. |4 i& ?4 U* T( f$ u  \' }" H5 V: z. D
/* configure SysBios to use the lower half of Timer 1 */2 |8 `3 L3 t+ l5 x! X
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
7 s* l$ \( ^9 O+ O0 ~var Clock = xdc.useModule('ti.sysbios.knl.Clock');
3 A+ u1 s3 l& |0 w$ Q. G6 V# sTimer.timerSettings[1].master = true;
$ x' R6 s) w3 {Timer.defaultHalf = Timer.Half_LOWER;
" R: P" v8 s7 j2 p/ oClock.timerId = 1;9 f. C4 q, Y8 b1 P

' \" @6 f6 Q9 W  M# _8 \& S& \
, I! v# G8 n8 d3 P5 ]  i/*
( Q$ t* J! S) |. d# v7 u0 z *  ======== Miscellaneous Configuration ========
2 Z- }+ X0 t8 m0 [ */
+ \4 y3 w6 ~( e  @4 p
: U* M5 N, A( b1 B/* set default diags mask */$ C* T7 D3 \5 T! ]
var Diags = xdc.useModule('xdc.runtime.Diags');
7 b1 w% j% g1 X  V! g3 D# M0 dvar Defaults = xdc.useModule('xdc.runtime.Defaults');
) L/ Y% I: Y- R3 u9 a9 t7 B# w) N8 J8 ^' c
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;* r: l8 e- ]/ c. z$ U6 w( o
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
4 {3 e+ g/ T0 y5 eDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
$ q% Q: j4 `* c$ W( ?2 H. e' t% Y2 B" fDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */5 `" j" b9 }( @5 g
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
$ t' J8 y) E; }* JDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
" w* o4 E7 T5 ZDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
  |1 x$ i1 p( `  dDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  m; b; P/ a6 B  A* R) yDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
+ D6 b/ s0 C+ X; s; `3 \0 nDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;# q. O) y7 c' h7 v/ E) r
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;6 s3 H2 f7 @, v4 J; ^0 v- r
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;- R& J" N& @1 K5 e' l8 N
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
, V* T- q) X1 [; a) |Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;' l/ J+ n6 d% m
  S  u& A% k" R( q& N$ N" I
/* override diags mask for selected modules */% c! t( G; \$ t) s
xdc.useModule('xdc.runtime.Main');
" N6 `' z, E! q0 PDiags.setMaskMeta(8 d- \' J, b. I+ c
    "xdc.runtime.Main",: t: N% A" L0 A6 t. _6 B5 F! ?3 C6 t
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
( W' `6 v  r5 k" Y1 T% g    Diags.RUNTIME_ON
) I5 ]7 I2 W. l! n2 z& {: _( J);
( B* p- d" f' {' D8 |
/ n. t4 r8 w& o% ~" \/ Vvar Registry = xdc.useModule('xdc.runtime.Registry');: u, h. M7 H, {: D) G' S
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;( z$ n! o- W  M2 ~+ |4 N
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
9 {9 J, n$ n, t/ c- d' {Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;" K; m, n4 p3 J- P$ J  ]+ L1 J& e
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;' Y! R- b* `0 u+ c

# m- I3 A8 o! W9 d6 r/* create a logger instance */
% t. R% G# B9 X5 ^1 Wvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
2 Z( e: ~0 S7 zvar loggerBufP = new LoggerBuf.Params();6 {- G4 b: v  m* f, \
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* P4 \8 X% j8 @% C1 k- |loggerBufP.bufType = LoggerBuf.BufType_FIXED;' V/ a# z6 K) l

# w' T. u' S. Kvar appLogger = LoggerBuf.create(loggerBufP);4 W0 j6 ~% [9 x
appLogger.instance.name = "AppLog_Core1";* l" `) V3 f0 I2 o
Defaults.common$.logger = appLogger;
, a4 C$ e' ^3 v$ K9 f& k* qMemory.defaultHeapSize = 0x8192;    ; u! K" E5 b! r- V! F( L' y  V$ f
Idle.idleFxns[0] = "&LEDStatus";  O, Q: x8 T) o/ c) P% F
Cache.initSize.l2Size = Cache.L2Size_32K;: `: s- e$ C" P$ y: j
7 q3 i, M7 @/ x& p2 M! n
回复 支持 反对

使用道具 举报

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 */
( n2 b+ e( ]; E% t( q6 [var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% i7 j# R( T" E7 ]/ C8 `var heapMemParams = new HeapMem.Params();- [$ |2 n8 a; F8 C( m
heapMemParams.size = 0x4000;; F: X8 ~& Q0 r' |6 O
, [/ N0 R5 v. q2 g9 L$ {! H. i! Z
var Memory = xdc.useModule('xdc.runtime.Memory');
' O) z) E4 C7 }. RMemory.defaultHeapInstance = HeapMem.create(heapMemParams);' K. L# Z5 H3 l

$ J+ _4 }! V, e" r3 E6 R, ?我大约calloc  每次共计大小为5K*16bits,5 T$ B  M8 D/ N( E
而默认配置才0x4000、需要改大。' E# f+ o3 u' z1 _" I

& D0 G8 @" y' h2 W( ^0 C* E: E
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */  e' J% v) v! T7 [7 d: S
Program.heap = 0;  V' d  l- `: Y5 w# w- K
Program.argSize = 100;  /* minimum size */
! B, B. o  E+ f1 f) x$ w' EProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-17 18:47 , Processed in 0.041216 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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