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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构' C' c. v; d- Y" ]
& x' l: H( a5 g. y" g2 z
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2566 M  h5 b3 m# a
7 A4 J  J7 E: D
其他程序段。。。。。+ F3 k6 j! n' O7 F. X) ]$ b9 J

! C% W* e- F& b" y: {   free(x_d);3 i( x# e! q) M% O) j) i) L' s

7 m, f, t/ R' _% g$ h* E. I使用DSP侧单独调试功能,验证动态申请没有问题,$ L! c' P( E. b; G) P- [. @$ I
5 ^4 G' o" o6 T, g- K4 \! g
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。0 o% J0 k. {. T8 E8 R% U
9 W1 N. m3 z; u! g. c
6 r# m) Y. m. S6 [8 \: F
0 e8 t( w# ^) Y! P% [
( U1 i& W9 m) }5 |
0 @, V) ?* h! G
6 @, L/ v" Y3 q3 f0 @+ O+ ~
7 u8 Y$ C* ]$ N6 u0 t1 i; j
: c7 c2 E. f$ ]1 }) T$ a% O

* A( o* Y2 J8 t/ T) W, \3 S5 i# [$ B2 U. t3 p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明9 u9 _5 P" q# x( [
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
8 C1 Q/ G1 l2 ]: L(不过疑惑的是,为何单独DSP仿真就没有问题呢?)) N0 ~3 }8 ?0 c" {+ N, y: J
* r. d& {5 @. n$ j/ q& q0 K0 ^
是不是需要在DSP.CFG中进行配置: Y% ]. C! {' W( U1 t( v
我现在的配置为
3 s+ }* O  f. K
6 R* T& G# ?) `* I' G/*( x( }5 f4 y! m& V8 P; v. s0 S
*  ======== Operating System Configuration ========
! G# l) m5 @6 T4 T% k! [- J* N) G */
& j) l* h) n8 j
0 e, c- W4 e0 ?# [/* no rts heap */! A& K* K, S5 w1 T
Program.heap = 0;$ ~0 s  j( I7 {' {; S3 U
Program.argSize = 100;  /* minimum size */2 L: R4 b. A' j! I+ b- L0 g- X: |1 I
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ O! T: S4 g) I3 R1 C- v3 k7 j; \' _: V- F5 e3 s& u
/* create a default heap */$ r' j7 D: X! z7 Z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' \+ G1 y- q; A
var heapMemParams = new HeapMem.Params();  D+ y8 _* ^2 p# u6 E0 W
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大0 O6 S+ A$ G7 `: K1 ^6 J

3 `9 f# {/ E# h- s+ b: B
var Memory = xdc.useModule('xdc.runtime.Memory');% Y" L3 Y: _/ {8 d! o( x
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" R" {8 {8 p' n8 J7 O
+ ?! |$ S2 S% Z* Q/ [5 G! e# a
/* configure System module */
- I( I+ e' Z5 B& w* [+ S3 a2 u0 |var SysMin = xdc.useModule('xdc.runtime.SysMin');
/ N6 x2 l- X, r" w2 S& f& x6 dSysMin.bufSize = 0x1000;
# u% E2 |/ P3 ]% b% A* ?% q+ A. N6 q" USysMin.flushAtExit = false;
1 i* D; ^! @5 M2 g9 a9 O5 ~% N. s  o5 e; e3 i
var System = xdc.useModule('xdc.runtime.System');
8 v% d+ n1 E. C  F9 xSystem.SupportProxy = SysMin;
" P) D: a% X  b# z2 {9 V
# K" f) c0 h( O$ }/* configure SysBios to use the lower half of Timer 1 */" u: G6 ^* P% p$ o9 }8 U
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
# p: H3 w- U  G* u: Jvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
% O/ D. `/ W6 ~! C- I& i) n2 m6 @Timer.timerSettings[1].master = true;. H7 ]# |& L- r
Timer.defaultHalf = Timer.Half_LOWER;
( N5 a- o1 U. h" T+ iClock.timerId = 1;( G1 W% r) m2 v9 U2 u

  s* G$ F6 z8 n6 k0 U9 t( l% C" h* ]  G
/*
* C3 i( V. o: H. V, b *  ======== Miscellaneous Configuration ========
. W2 U: L( h, v. T */& D7 U, ~/ n6 f8 g5 z

/ l+ A& C; d8 u2 c( R* U! ]/* set default diags mask */
( ~4 c! c4 _4 c5 a, rvar Diags = xdc.useModule('xdc.runtime.Diags');5 }$ V& A; M1 X" Q, s% _7 a
var Defaults = xdc.useModule('xdc.runtime.Defaults');
* B3 q+ r/ U6 @1 O& F
4 }" Z+ ?# B  u8 q2 O7 ^6 DDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;' {% E) V5 |' o2 }1 D. N
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;, g5 [# w+ v9 ~7 {. R6 V; a
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;* d) C# w3 b6 y; J
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
+ B! o8 P! ]( Q' KDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
: u; f: e5 Z4 a" L& h: W# UDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;! |' r, |3 S) T- P! L
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
" @2 t1 H  V& z& [+ T; E9 x/ l. `Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;" H/ A- h& @- i/ F5 v* _1 |
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 n! F1 W1 ]: v
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' z% n) ]" E# x: s. NDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;! l7 g/ `% l/ O" f9 F  Z+ Y' H
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;: ]1 ?9 e5 |" l/ a# J$ T& B
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
4 ?  M. s& Q* |& c6 X$ u0 @Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;' y" k2 m, }# j# Q
: K5 x/ m& K" P3 I) b3 }/ N# }
/* override diags mask for selected modules */
! k  G8 @; ?! Uxdc.useModule('xdc.runtime.Main');
3 M' p5 n4 h& x4 w* EDiags.setMaskMeta(
  s! a& j( j8 d& {; A- W: w: v    "xdc.runtime.Main",
- e/ w+ E& n# x& U    Diags.ENTRY | Diags.EXIT | Diags.INFO,
, v  _9 v$ A% _# c" C    Diags.RUNTIME_ON
: b$ M, J1 C3 m' F" w);& V8 R. p( B$ a8 T% v0 R4 v0 o! U6 a+ [
0 i, T/ g0 T. P8 q+ z1 M8 A
var Registry = xdc.useModule('xdc.runtime.Registry');% O  B; B; m5 s
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
- e$ q+ E  Y8 Z: eRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
0 i& x; C% R8 E- ^  ~$ oRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
0 m& Z: x: ?/ fRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
9 H4 K6 i4 q* U- f& ]- n0 J
" ?0 Q& A% m1 U" N4 G3 I( o1 H; N/* create a logger instance */
# }. O* q& {% J& Q6 k9 Lvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');$ ^2 o/ L& {) y/ i0 A4 m& n/ f
var loggerBufP = new LoggerBuf.Params();) v& @8 g( m) v( }$ c" q
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory *// T& k8 }4 C! V; @0 Y
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
0 `7 X, t. d! {1 c! E5 P/ z* s
1 {0 r2 t) |5 L0 s5 P7 Lvar appLogger = LoggerBuf.create(loggerBufP);, S- A# t! O6 \6 ?; F# J9 u  _* A
appLogger.instance.name = "AppLog_Core1";9 w+ [4 R7 _! q4 a! }+ c. W0 A
Defaults.common$.logger = appLogger;
5 J9 `' ?/ B+ N7 t3 r: m1 VMemory.defaultHeapSize = 0x8192;   
$ a; G' p7 W$ E. J3 V/ m) G% JIdle.idleFxns[0] = "&LEDStatus";
' f8 S' I# [3 d. z2 |% E7 H4 TCache.initSize.l2Size = Cache.L2Size_32K;& h! e& [( p! e$ @$ F
/ G* I2 `% u4 J. M  q/ b/ H
回复 支持 反对

使用道具 举报

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 */
" S0 _9 P/ b  p0 w& K( tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' {+ E% m+ m( E9 ^2 Zvar heapMemParams = new HeapMem.Params();) z) D* o3 h  B7 \  t2 i
heapMemParams.size = 0x4000;2 @. u6 h* ~% j6 X
4 o9 \0 ], x5 u$ F9 g$ x
var Memory = xdc.useModule('xdc.runtime.Memory');) L* A* }) W& y6 a! j3 m
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 K' y- P6 l, Y6 _7 M- y( E4 k" i& v. n$ v1 L& F' ?
我大约calloc  每次共计大小为5K*16bits,& Y. d2 S0 U  r, H% J& R
而默认配置才0x4000、需要改大。* y5 D# C9 _' v; Z4 c

/ z3 z. C, J0 b1 d% Z$ g5 c
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
  s& |7 n6 \( Q2 Z- a) `* SProgram.heap = 0;$ ^$ j$ Z6 L- }3 e: E7 ^# Q+ z  X
Program.argSize = 100;  /* minimum size */4 `' L( C: }5 t+ j1 G
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-19 05:47 , Processed in 0.044246 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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