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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
( J9 i( h9 C+ T# j3 x$ c6 k5 ~, K2 V! `& `  _- D% p
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256, w  Z4 z+ C# R+ m$ s# g3 l+ q
0 e8 S0 g3 I3 c7 _7 R( U8 w
其他程序段。。。。。
% X) V% J4 B5 h8 {- K! |. H
$ S2 B  k0 \: Z! [   free(x_d);
- W3 I& @! E/ g/ d' {* A/ E/ v
: e1 Q$ @0 ?' Z1 c8 A2 E7 q0 j使用DSP侧单独调试功能,验证动态申请没有问题,
& P4 k- b; G' y! z6 `+ Q
( G+ N8 ?1 V" _但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ w4 B) n. @% O( b6 Q" o

7 @0 D2 R; |- q! X/ L4 z+ T
9 E2 `" y" J  w6 |5 W
1 C8 @6 A2 s! j+ O; V' {6 Z# q5 ^1 Z2 Y: w" a
# v3 z+ b( F. ~5 |* ~; D

9 E, v0 O( B# w* m$ C9 `+ I- ~1 _) x

/ w$ G/ ^  M$ Q; _' w: K; ~* w! B, ?3 ~& O) }

7 a( k+ e! r9 L) B) {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
7 G2 U& w. N6 u) w我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下& |# \% n3 j5 x8 g3 W( D9 y* r
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
( {$ S; h: B' ]/ V. k" x5 G

- V+ G7 ^6 H7 k; |是不是需要在DSP.CFG中进行配置! U; F4 l) x  G7 b: P! A
我现在的配置为' A' M5 Q, u# t5 x
' E9 D$ K/ ^2 b% }
/*/ i8 Y3 ]; ^8 b* |
*  ======== Operating System Configuration ========4 \" Z8 d  V" k7 e2 V
*/2 P. m; q- O- T" ?# R4 g" l; y
5 v" g  K; @2 y# E- k" Q
/* no rts heap */
: c% e" b" X4 Y5 d6 R" rProgram.heap = 0;. Q) y& D  E" r) t
Program.argSize = 100;  /* minimum size */$ x4 T$ |* I5 L! F
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
" ^2 K! a# R/ i- X: [  B
# U( Q# I  z0 Q* }% X  R5 [/* create a default heap */! `! S, U" _( Z: s! d! ~. L
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: G7 k/ v2 _- h$ v  \
var heapMemParams = new HeapMem.Params();
6 A# w2 ]) z3 `, {* j: A' OheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大4 i! F9 f: c) f. o7 o

$ |+ V% l; m4 h+ W4 B# s
var Memory = xdc.useModule('xdc.runtime.Memory');
% m5 m% b8 A3 r  ?8 _Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 x: B$ G9 o6 S& ]* t8 B4 }
6 V. V" |3 ?/ S- O9 ^& b. @# q/* configure System module */
* K9 f7 C+ x4 C$ J5 `8 xvar SysMin = xdc.useModule('xdc.runtime.SysMin');
/ F" H& Y, k2 k5 o. u# y( `SysMin.bufSize = 0x1000;' R2 r; G  i0 T2 Q3 e1 [9 b+ r
SysMin.flushAtExit = false;1 N1 @, O- E: d, g, |
* b9 F  U+ [! @- ], g" f
var System = xdc.useModule('xdc.runtime.System');, S1 C# W5 h2 b) }* s( N
System.SupportProxy = SysMin;
  K/ d) g1 y7 H9 `
+ ]( {9 |8 M0 h5 a# v: l9 S$ O/* configure SysBios to use the lower half of Timer 1 */. @9 p9 s9 B- F
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');1 M8 G( Z; l2 U8 F
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
2 G+ R7 R+ x: A( V, L+ GTimer.timerSettings[1].master = true;
6 E- H8 A7 T- I5 PTimer.defaultHalf = Timer.Half_LOWER;
/ `; P5 v( {1 L+ _. @  x; p; o# E# MClock.timerId = 1;, l2 U* @3 P0 ?1 V5 c, k& G
" g- @9 L/ ]' M2 C0 w  f
5 @9 X9 b* _9 P. W) D) m* v& Y2 j
/*
% h4 |# ]. l+ ~& \. p/ Z6 V. f *  ======== Miscellaneous Configuration ========
# B! a- _, \: J7 s */
- o: O! m/ I/ F0 x2 [% d! u! i% l* b+ ]& {* D
/* set default diags mask */
& O: E0 x0 I/ w* Q0 X- N! Y8 x9 Rvar Diags = xdc.useModule('xdc.runtime.Diags');
( H1 b. |1 {3 x: W2 hvar Defaults = xdc.useModule('xdc.runtime.Defaults');
. l: [3 `, L4 V" n9 Z- [
" E# c& j5 E! x8 N3 X' TDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
) `  X  X5 ^7 A# `1 YDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
, F% j) N" J, i# @) xDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
/ m0 J1 d0 B, {$ R7 z# g1 wDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
: P; i% N, m9 X5 C$ ~3 zDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
$ }6 p: f! ?* z; S+ \6 i7 k+ NDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;- ?8 J6 Z8 V) g
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
( w9 _* `; T8 s/ `2 Z( `6 c. u1 ODefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;' z4 Z! e' L: r8 x# s" i" w( x
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
& a% N3 ?6 N3 M) C: [* \7 tDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;& b7 R1 }2 `# H+ l/ `& ]  H
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;* O1 B5 F( h% _( Z, C
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;5 o2 t/ H# u# M; C
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
! p4 Z+ V3 _4 l) @- k- u' s  ]7 cDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;0 u, ]* |( |3 M+ H2 R* S

* p  i, W1 M& P( ^" G5 H# x' f$ Y/* override diags mask for selected modules */3 X( Q) |* e: m4 g
xdc.useModule('xdc.runtime.Main');
2 q% g; d& E  Z2 N* WDiags.setMaskMeta(+ r. T2 J- E1 k% d1 m
    "xdc.runtime.Main",$ w) i$ g$ C5 n' W8 M# `
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
( I3 z/ w/ O& ~. b3 R' [7 O" a- ~! ]    Diags.RUNTIME_ON5 g5 t- s8 A+ _0 [% W
);
5 h3 ~$ m% O& S: `( @0 _1 Z6 u
$ f2 @6 q4 W9 S. m2 {- n$ Y  N; vvar Registry = xdc.useModule('xdc.runtime.Registry');
1 _6 A. }; G* O) ~Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  Q$ r' X( Z( D
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;7 L1 q- [: ?7 w" E+ |- A8 m
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
4 p* e/ p( A3 [Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;0 }7 t& z; t5 ~
# b. v4 K( n' Q! F; J
/* create a logger instance */
' }3 r; ?  Z# m6 D* nvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
% E% Q" D1 X3 k. n! Qvar loggerBufP = new LoggerBuf.Params();
* \4 M8 j/ r: N- \6 ^loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */; R) |1 O9 }  G5 G, \' C  k$ ?; A# c
loggerBufP.bufType = LoggerBuf.BufType_FIXED;4 n. g8 D$ q. R
1 g; U3 v# A% O
var appLogger = LoggerBuf.create(loggerBufP);
) |0 ]  u# J! i) JappLogger.instance.name = "AppLog_Core1";. K( u0 o/ Z" e$ ^3 c/ K9 y. r
Defaults.common$.logger = appLogger;6 E6 L; W: |% V5 h9 [' _( j
Memory.defaultHeapSize = 0x8192;   
, Z1 b1 {  L; c$ }9 f. J+ KIdle.idleFxns[0] = "&LEDStatus";
- O  y( {1 ?0 V! ?# X% \' R. GCache.initSize.l2Size = Cache.L2Size_32K;0 ]7 Y9 N4 c# P) f
4 {2 a7 D: u9 P0 P
回复 支持 反对

使用道具 举报

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 h' y# t" p$ w' @
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 M7 ~5 {+ w: P' L& e( F; h
var heapMemParams = new HeapMem.Params();# m7 z% J: B6 @% J# M
heapMemParams.size = 0x4000;2 a3 T9 \- a4 \: A. g: M
* Z) P2 l6 ^% w  x5 I6 t* Y3 ?
var Memory = xdc.useModule('xdc.runtime.Memory');
' W2 Y, ~( l7 o: g% v# `Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
& ?% y5 D2 h( k1 J. J. R
0 l4 E+ s  @8 ]+ m# y: k& ?我大约calloc  每次共计大小为5K*16bits,
: }" X: d3 _. |; [3 `而默认配置才0x4000、需要改大。/ ?, ?5 p/ f) g$ @+ [

, y8 l! ]$ ~' |
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */7 ]$ m$ s! E& m2 V, ]2 e$ s
Program.heap = 0;0 I' {) P# m" R; R0 t, @! |
Program.argSize = 100;  /* minimum size */
% ^  U; D- H/ v1 dProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-25 14:40 , Processed in 0.041044 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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