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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构, ]; P7 Z. M' w! o7 S+ ~1 ?; ]
. w) P% I/ X1 C: D) Y! l6 i
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256  R, J0 ^" m3 o; Q, C; P0 z) i

: Q) u! R( t9 O, N  Z# j* `其他程序段。。。。。
2 I2 x3 I4 y6 g
& o4 P9 O0 Z" D/ k' J   free(x_d);
, P/ D1 k0 Y- ?9 K3 z, f, z
0 f5 g+ N) }- [( g7 X使用DSP侧单独调试功能,验证动态申请没有问题,# e+ z# ]+ i7 C: b: R  F% ]6 J& `
: N) [5 j1 k* R  }. }
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。* L2 Q- h" L, Y2 g6 F# ?
7 G" M; X3 l5 v6 _2 `0 n

  [5 v$ ?6 j5 E1 E8 O' @/ i" X2 \! T; F/ P$ q4 c' O
# ~' _' V/ d6 H- ^# L- v' C+ ~
' j, _9 l2 P1 H+ F; T
4 f% E4 v. k( C
0 B* f% h  l$ C" m$ A# @' P; r

6 p& h1 \/ i% {( o: ?2 v
4 R7 ?, d" C0 L2 {6 s9 b6 {$ F" K, X2 ~; m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
6 b( b; d) V1 o我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下! z. R% x& g8 s' ~& L+ w
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)6 k4 t- B6 i9 ]7 B: n
# Y, R) L9 b, P+ T) f) w; b0 g% V
是不是需要在DSP.CFG中进行配置4 w. c9 ]1 G8 t; k" f
我现在的配置为& Q, _1 q' q$ K0 }5 x: r
2 F& k- a% R) X( ?
/*! S' ~8 _1 U; _
*  ======== Operating System Configuration ========
0 ~% q6 c/ K; ]. F# g */( X% ^; @) a/ M+ {
- B$ U; G$ y  M# i# V4 D
/* no rts heap */* H0 Q4 `( ~8 `; |( s
Program.heap = 0;
7 a& K& _! n4 Y# Q$ Y% ~Program.argSize = 100;  /* minimum size */
7 d" C) k( m( ?5 K, P( e/ L  OProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大1 s# `* Q9 ]  x: x! P3 j  x- Q9 g
. h! c- @7 Z& P$ i
/* create a default heap */
7 ?6 p0 G, K2 `var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* j  p  R: x! _3 H. v6 T' evar heapMemParams = new HeapMem.Params();0 V" ?- \0 c( s8 b: a+ D) t+ s
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大3 Z- F( V' Z. Q( @% A
2 f' b9 T2 ~+ c
var Memory = xdc.useModule('xdc.runtime.Memory');/ x; B  I& P4 V- `5 Q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 r, L! _3 \4 g# M2 ?5 |  v* K9 V# l6 {
/* configure System module */8 J. {$ {+ D( F7 U
var SysMin = xdc.useModule('xdc.runtime.SysMin');8 ~: n3 u  Y$ o: \; x! c. J
SysMin.bufSize = 0x1000;3 l" ]$ \& C" N( R8 E! y, \
SysMin.flushAtExit = false;+ T2 d; g  ^. ^& \
$ O( p& z  n/ W# F' U
var System = xdc.useModule('xdc.runtime.System');
( B8 B; a2 ?' N( _System.SupportProxy = SysMin;1 x! l( ~9 {6 d$ N8 W5 f
/ z6 B" g. P6 h3 ?; R4 g
/* configure SysBios to use the lower half of Timer 1 */
* u5 Z& A- |) ]: \9 g0 t4 p/ i( cvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');3 p4 R: w: ~' R7 C# ^  E
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
' a# |9 U3 a6 N0 }Timer.timerSettings[1].master = true;" `. e+ \- G5 Y- r5 D1 p
Timer.defaultHalf = Timer.Half_LOWER;
3 ?+ K* }6 p4 \7 d1 hClock.timerId = 1;8 Y  N' h; D. m  ^+ P: i# P" s& j
7 b% }  J6 q# B" [

5 e  @4 N7 I5 }& e7 T) Q) |; p/*2 N7 X2 z7 m* O8 n6 M5 Q
*  ======== Miscellaneous Configuration ========, v, E! S+ _! {& _
*/
/ e( j4 H0 M  i$ m% V
+ u/ x9 K3 U! k. m( E/* set default diags mask */
+ l" V2 }8 u+ f1 I: C: Evar Diags = xdc.useModule('xdc.runtime.Diags');& U8 D" ?  l& X$ v" k3 m
var Defaults = xdc.useModule('xdc.runtime.Defaults');
8 x9 W( `9 t; K& K0 L! M2 j% n7 Q( Q. r8 f' s
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;: g3 j7 M9 s$ ^2 B
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;- L! }/ S0 s$ d4 M# I+ w0 Z
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
% ?6 m' J7 H. e% W: T7 U9 m7 eDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */( S  f* Q, |  n1 j
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */  K2 V5 e7 Z/ H: q
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;+ R% T/ C. ]) \2 X+ _& e  l1 W& Y
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;7 H( L9 G0 m0 w7 W; a# w, O. r
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
' ^9 K, b# T4 LDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
/ ]& W& c) Y; K1 ZDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
  J7 a& i" z" Z; y. b1 l* Y9 BDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
9 c1 \6 E6 }- I  m- q$ q5 VDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
) s6 e) ]3 g7 hDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
7 {$ A2 ~2 F3 _* L& l" YDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;3 n0 z9 X; t  D& q5 V; g

' m$ }  u1 s7 @, t0 A. r/* override diags mask for selected modules */9 z8 `) O) q7 x& w8 r3 Q; q
xdc.useModule('xdc.runtime.Main');5 G  L; \- l! _& n
Diags.setMaskMeta(  i7 _* J3 w; g6 C, C1 x! m
    "xdc.runtime.Main",
# m& r8 p' R1 t/ C3 n- z- s    Diags.ENTRY | Diags.EXIT | Diags.INFO,* N7 T- h# U: u) r1 Y  j& ^
    Diags.RUNTIME_ON3 i7 M% E& n  F
);" N3 z2 k' c6 Q' q

0 g6 e5 C1 P. U  H$ w6 Cvar Registry = xdc.useModule('xdc.runtime.Registry');
+ a' H9 K( B9 |5 ]1 l! h9 _Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;6 G* i8 C9 k2 W6 R
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
/ F; P! r5 |! P. R, G% }Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;- X- x2 ~/ r9 V- o7 p- Q
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;5 H9 v/ v; E9 d; O

/ B0 r' J) i# m, Y2 a9 ~7 Q% F7 J" {4 W/* create a logger instance */
- h  m! c8 |  o  |$ a5 V% q/ c. T, yvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
8 p9 o5 G: m% E+ tvar loggerBufP = new LoggerBuf.Params();9 F6 X) ?0 ?- r+ R& `9 f- Q
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */4 E0 e" p7 J6 f( {/ W1 X, W6 G
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
$ @+ \7 @9 \6 N4 |8 a
' w5 }+ `' X. M1 f: jvar appLogger = LoggerBuf.create(loggerBufP);
0 l* V) A* Z' B: e' U6 \appLogger.instance.name = "AppLog_Core1";. ~. K8 c5 c4 ?" R- D
Defaults.common$.logger = appLogger;
4 x( v$ ~6 _: J0 W( h# MMemory.defaultHeapSize = 0x8192;      W8 O# x! `5 {
Idle.idleFxns[0] = "&LEDStatus";
- @$ u: r3 {8 c0 MCache.initSize.l2Size = Cache.L2Size_32K;
9 S3 I* ], h; K5 G' C; @0 i& B, H9 B5 l* i6 O3 o% _+ D
回复 支持 反对

使用道具 举报

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 */8 ^5 Y$ v1 H0 @8 F7 _  F7 [3 {9 y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; z1 c* {: q% X* P. ]9 Pvar heapMemParams = new HeapMem.Params();
! v5 M+ }4 q& pheapMemParams.size = 0x4000;
" ?( W/ e0 l* D2 k6 ^- ]9 a; A" |  N, Q1 P, q/ r
var Memory = xdc.useModule('xdc.runtime.Memory');
7 V3 X, Y  S6 }; VMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 T: }# m) E& O& E" p' D" _/ v& u: a0 X: T6 N1 x/ m
我大约calloc  每次共计大小为5K*16bits,& J- o7 |: e7 `5 d" T0 X+ z
而默认配置才0x4000、需要改大。
& t+ h% f" ]2 Z/ v# y% _2 Y; B( H5 V( J) n
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
8 `1 r9 r: k: I8 E* E; u& U+ A$ b( |Program.heap = 0;7 Z9 J5 u" E$ x( H
Program.argSize = 100;  /* minimum size */
2 }0 Y) _9 S. l7 C7 p  OProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-9 23:19 , Processed in 0.041296 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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