关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
* }; A4 P/ V6 R/ X8 o3 w& a. ^
1 C+ k& p' v) `9 E/ J+ n' T& s    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256- o8 v3 k$ u7 W( m9 o' g8 l8 }
6 J; G6 J$ z# r( w0 }* E4 ]
其他程序段。。。。。) o, `) x& Q1 h2 s; S; A
! u5 ]9 H- e3 i% F: G- j
   free(x_d);
/ ]& M4 f8 d3 ^( e* j
4 d, ]8 `( f: [2 B! b1 ]+ I使用DSP侧单独调试功能,验证动态申请没有问题,  j, C' M9 n, |' l

4 @, [9 S6 V2 D2 |2 ?1 d但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。7 k5 i( B3 `1 s
% N$ W" I+ w" _$ u/ n- ~, N; o& `3 Y

7 b  r1 h& `. D
; W- g6 u- [. N/ G5 H2 P6 h, w6 {- q" k+ h+ a

8 C2 Z4 L; s, E2 H9 f
4 j7 Z2 Q" s6 K2 }4 V) c# G1 D/ p8 x- ?! `. ^2 ]8 h. p
' e; t! G; L; \* d, z$ F
! [' w1 Z4 o, j4 k' [% S2 g

2 A$ J1 Q: r  c( ~' W
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明/ }7 e6 f) ~$ }' H0 I
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
- z9 o7 T6 T0 u5 v8 [$ L(不过疑惑的是,为何单独DSP仿真就没有问题呢?), s: A& U' v, L$ c- b4 r* z
9 ~  O5 m- _; }" i
是不是需要在DSP.CFG中进行配置7 W3 Q& }! [3 c4 W& G5 v6 V
我现在的配置为  e# y2 S/ g, ], x6 {
% W0 _# x- u, _3 f0 _5 l( n
/*
5 x; q; T6 |( U- v2 ]6 E *  ======== Operating System Configuration ========2 @: F/ ]  N$ W* y2 J4 T
*/
! d4 |% n; Z5 |7 M0 j7 _& d# x+ @& c4 H
/* no rts heap */
- {# D% j# F0 D5 wProgram.heap = 0;! Y8 D  ^" j4 }2 g' ]
Program.argSize = 100;  /* minimum size */) `/ @' f4 X' `/ a
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
" c8 H5 W0 N" j9 R- V; G
7 f9 \7 H6 j! J5 F9 v& H7 R" G/* create a default heap */
/ s- ^; {: ^6 W5 svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 J. R0 m/ Y3 H$ W. [  Fvar heapMemParams = new HeapMem.Params();, l1 t  L4 x, d! {) L  Y
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大9 ~8 s" i; K5 R& t% g% e4 m9 c1 D; A

5 O0 {/ ]1 B% \
var Memory = xdc.useModule('xdc.runtime.Memory');  K7 N" A3 F  @' M% g
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ u! Q; v$ r) v# x: S  z+ V. @) T6 R; y, c. b. H& I' o3 Q
/* configure System module */
0 U, L3 F9 z" Z2 j  F$ X/ Cvar SysMin = xdc.useModule('xdc.runtime.SysMin');
; O8 [2 G9 R9 D' I9 z6 |* ESysMin.bufSize = 0x1000;/ r) ^% J4 r% T& i3 ?
SysMin.flushAtExit = false;
2 G" J+ o$ [9 X$ l  V  O
* x; k- W  B+ s7 kvar System = xdc.useModule('xdc.runtime.System');
$ Z' `# ^2 K* w* u) D' L5 SSystem.SupportProxy = SysMin;! o" m* n2 Y; V. l
1 z% V+ w. x, X( {. O& {+ Z
/* configure SysBios to use the lower half of Timer 1 */2 n. S( v; i9 Z( ~5 u
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');/ i3 w& d$ U* M
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
, D3 R9 ]4 P9 {; a% n8 FTimer.timerSettings[1].master = true;
' r% |; C/ `6 ]Timer.defaultHalf = Timer.Half_LOWER;( D* _, D4 T% L' j) X! _
Clock.timerId = 1;
/ r& P, v' m3 x6 ^5 L  g/ Q7 i4 m0 c! P' i, M
; |4 O" [) B, Y: g
/*+ t1 I' ]* T- J, g0 M2 v
*  ======== Miscellaneous Configuration ========
3 }5 c* i& M% D */0 z8 c; v) ^! W/ ~3 Q* T/ U0 \8 J; F
7 U5 V  P, S9 {0 R8 V/ S. I( k
/* set default diags mask */
( Y. H$ {) n( i& j. H- ?. {var Diags = xdc.useModule('xdc.runtime.Diags');' g, M9 _, ]+ x9 s" x
var Defaults = xdc.useModule('xdc.runtime.Defaults');3 q) L+ E* ~6 h& L/ {7 G1 B7 Y  L" E
0 C1 G; f. t) _1 {, V# v3 q
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;  G( ^( L' }  i& E
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
4 }2 ~" Y/ \* G$ C  eDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
' ]* T; p/ [9 w0 Z! SDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */' ?3 K! A/ l0 S
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */, u/ w" @5 f: [" _3 `9 W# ]' W
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
) b2 m  s: P: E, d( E- j- LDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
9 B2 k$ U$ X8 `+ T* ZDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;6 I" F; }3 D& l/ _6 N2 y4 q! m
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
0 W9 |0 X1 l1 q* U% H- k2 gDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
1 R0 ?$ s2 [+ c( I7 K' L1 CDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
% I' h5 p" P- H8 x! fDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
1 t/ Q! k  k  Q! T, q2 |  F, v9 h% NDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
+ B" D1 j6 T3 HDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
1 [8 {6 H1 v: j' \" t" Q# O" n1 ?0 ^  s+ y0 Z  r7 m2 Y
/* override diags mask for selected modules */& w- c+ e2 o) v# J* r) t
xdc.useModule('xdc.runtime.Main');
( L! u. P3 |. ~* l" cDiags.setMaskMeta(' L( }6 y: j& [- |( p
    "xdc.runtime.Main",
; |% G  n! [* b    Diags.ENTRY | Diags.EXIT | Diags.INFO,6 `1 j& U& n( J" m3 y
    Diags.RUNTIME_ON9 p+ K+ ~- k, t
);* F7 i3 G& K& d# ?+ Q
. B. |: x. T% M3 _+ c) h8 x
var Registry = xdc.useModule('xdc.runtime.Registry');
/ Y6 y% Q4 d$ E- o, k1 `+ YRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
+ M$ C0 n  Y# B7 RRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;; Y7 E! J2 o* V+ ^" ]& J6 ?
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
4 s, M5 t# Q0 hRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;2 k9 L& i4 Q! ^. p9 L. Z
7 G8 D% w3 k6 w  x1 N% _4 Y2 r
/* create a logger instance */
% V2 U! S% K8 J4 e- {var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
) P' g0 V% O* l6 A7 H6 q4 nvar loggerBufP = new LoggerBuf.Params();
/ |2 B4 m8 f4 B1 w# g1 E$ W( DloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */$ E2 Q# c4 `5 U+ `0 n
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
# ], e6 `; _! v0 O) j) x# S
% y) \; w% _9 A8 D& Qvar appLogger = LoggerBuf.create(loggerBufP);& q, W" L8 H& R$ ?4 N
appLogger.instance.name = "AppLog_Core1";
. ~1 f& ]3 z7 l1 e3 SDefaults.common$.logger = appLogger;6 |) U5 R% S/ f5 d6 T9 S
Memory.defaultHeapSize = 0x8192;    " \- R7 q7 Z6 ?+ _
Idle.idleFxns[0] = "&LEDStatus";* O3 M% n' U. \, V5 K* w
Cache.initSize.l2Size = Cache.L2Size_32K;( l; F, [0 c% \4 p2 c

8 g- o, Q( ]" V
回复 支持 反对

使用道具 举报

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 */
2 F3 l: V& w! k. [) |5 }var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 B) `( S3 J6 O/ ]: [9 i1 Jvar heapMemParams = new HeapMem.Params();
4 ^9 L9 v9 M- D- d# \heapMemParams.size = 0x4000;
/ j% c- i0 F3 j# [  M2 n9 C2 [: |6 J9 {% i8 I9 v2 t
var Memory = xdc.useModule('xdc.runtime.Memory');1 X7 }3 V6 w* y8 _' t/ ]
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
! z7 j, e: G+ {) y' }
* L  Y7 Y. S# N我大约calloc  每次共计大小为5K*16bits,. r6 [3 @6 p! H$ |+ M& R7 S+ a
而默认配置才0x4000、需要改大。8 L# x( r4 U# |5 l& T8 [' T

6 a8 p. u1 i0 b
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
- o$ O7 Y  @9 r: YProgram.heap = 0;
1 |7 ^7 o; a9 u5 z& AProgram.argSize = 100;  /* minimum size */- P4 e- T- }3 p; R( q* P; L. l
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-13 03:48 , Processed in 0.041350 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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