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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构' N( ^. G5 }+ i0 Q. P; ?1 p
) k% D5 Q3 I+ u2 {$ d- g0 D) ~6 x# f
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256. _# J6 |; Y" h" J9 Y: H  |4 F

% N" j$ T5 n$ c& \其他程序段。。。。。* w( |5 B9 [! g) v2 l6 g% P" @

9 a1 F! B9 {6 e( t   free(x_d);
% Q3 N5 O$ D4 ^; x) X+ x6 l. f1 u" E7 R( h6 ^
使用DSP侧单独调试功能,验证动态申请没有问题,
6 W- p1 ^  l- q4 w! F
5 R6 e  S2 Y: N! o! w但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
; o6 d4 j/ C! ^# b
+ y) b( x$ y$ W/ }# l: Q3 c
: j- u' Z; t6 |7 L
6 p3 @4 W0 s' ~2 c2 m! v4 ]' K
. n- X7 s$ t; r7 v9 S! G; B  j
3 N1 ~8 D7 Z+ M- Y0 E  L

, q! P2 |( h7 ?  P% w" ?5 ]& L; }" u( K( X) ^
" e5 I) x- x9 y

" {: L3 s$ L% p# G" _7 }2 A9 u2 B; p& H) m+ L& N/ s" O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
/ X. u( i; E$ P/ ]2 Z我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: J/ a2 h- P5 t+ T(不过疑惑的是,为何单独DSP仿真就没有问题呢?)( E( e5 S& l3 k

4 Q. a% r+ C  h3 u& A+ B- ]是不是需要在DSP.CFG中进行配置
4 y; F/ N5 |" x! Y" f4 l& l我现在的配置为
; w0 V4 X7 B, u7 K7 Y+ a1 d
, ^2 O4 V  F% y( l( F5 z: o/*$ r. Z9 C: H/ z
*  ======== Operating System Configuration ========- G+ E9 r- B$ {5 l
*/5 z: v2 s2 V9 d, C
! G. a4 P' e9 y/ O* m% z8 @
/* no rts heap */
% d' u/ m8 f1 G0 e5 K2 NProgram.heap = 0;
4 h6 x2 h7 O9 O$ v4 ?/ R5 oProgram.argSize = 100;  /* minimum size */4 O/ E" g; P1 K/ p8 ]
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大; _8 J( B1 x- T" Q8 \8 @6 m3 X
, @1 E. b- q, m# q  G  G5 `
/* create a default heap */
/ l/ ?6 n1 J2 }var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 Z" B& ]$ a3 W. S6 D* Y' C
var heapMemParams = new HeapMem.Params();$ j+ c: {' F" o& c7 @) v
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大) H9 y" L  P: U) k& k( A0 F

) m' y5 Z6 R& G" E
var Memory = xdc.useModule('xdc.runtime.Memory');
& u$ G8 R" b) S4 y4 vMemory.defaultHeapInstance = HeapMem.create(heapMemParams);0 i( `' Z' s" s
6 a; A. O/ k  P! O" H. O0 M
/* configure System module */
( U3 N4 `2 T  A* R9 @4 g, Jvar SysMin = xdc.useModule('xdc.runtime.SysMin');7 e; h# j- w1 O# m, N. s& z. K
SysMin.bufSize = 0x1000;
% s: x! h: b: s. DSysMin.flushAtExit = false;. h5 t( c4 U$ V- f0 S1 R

' ]: {6 }- n5 m' }var System = xdc.useModule('xdc.runtime.System');
3 i! Q+ l" I: N4 W0 DSystem.SupportProxy = SysMin;2 W1 W# _0 [# r$ a1 s: C
+ u$ m. ^% V0 W: Q# J
/* configure SysBios to use the lower half of Timer 1 */5 n( p& u# q1 i1 q4 F$ t
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
9 _( O, @6 E9 Lvar Clock = xdc.useModule('ti.sysbios.knl.Clock');8 ?' |" O/ `- \6 A( q0 _
Timer.timerSettings[1].master = true;
3 t/ @* l1 }4 W- X8 Y5 YTimer.defaultHalf = Timer.Half_LOWER;
; S% b6 L! D  zClock.timerId = 1;& z$ }. e" Q, S3 q, I3 W
# m2 d2 A; K. M: U: B( j4 j& T

0 N' Z' w4 E7 s1 H/*
. l/ P2 B' ]+ p *  ======== Miscellaneous Configuration ========
6 Q3 p# m0 h! |1 H' N$ B */; y& E' m  A8 w0 {/ n  g5 Y
7 r- J: Z5 l& U* l* \! u  _
/* set default diags mask */
2 c: `# s: u/ ivar Diags = xdc.useModule('xdc.runtime.Diags');
5 T2 N  [. c1 \/ B- `* Wvar Defaults = xdc.useModule('xdc.runtime.Defaults');
5 o$ }* F" c2 J7 D, ?) X, W" }  M
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
4 \% u' T6 q9 y6 nDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
( r7 n+ T2 m- U( I7 jDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
6 h# O3 L* [' m0 cDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
" j# K0 ^! g7 Q6 B! j4 o& bDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
5 V6 W1 m" Y( ]) @: g" F5 \Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
1 n8 i# T  \# DDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
0 ?" ]  u" v) H: q3 Q4 LDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
0 }4 V0 O2 i4 V6 c7 Z9 mDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
. k6 o5 z- d2 `$ {Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
6 q, ]. L9 @; {2 U9 J0 NDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
! V1 M# C% ~# ODefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
0 T$ I; O$ W; O3 C% vDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;2 j1 T# E: a  F6 }0 j6 o$ Q+ Y
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
; n( A+ [' Z: Q! N& H0 n6 f  H! C  T# J5 \5 N
/* override diags mask for selected modules */3 M6 N) r5 W% S& Y$ S* R; f
xdc.useModule('xdc.runtime.Main');% |2 O' k0 ~2 S: @' n7 a
Diags.setMaskMeta(
( I: m! [: v& K0 X" [0 S( y; Q; i% a    "xdc.runtime.Main",  j% Q7 K/ T: Q
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
$ `" s  d% l, ]5 B# p    Diags.RUNTIME_ON
( \3 y# G3 J. j6 U. z$ f9 ~2 R);
( m' D, b: V: {' R* u4 r
7 L0 i- w' T0 {# T$ T" Evar Registry = xdc.useModule('xdc.runtime.Registry');' h* w: t8 N/ b, S6 I
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
6 O7 u: f, t+ t) e( P& z( {Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
. d9 X6 I! H9 m" Y9 {Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
6 z& e4 @6 ?' N! z& E+ d( ?% h! W/ [Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;0 @7 x4 L# c5 f* o1 Y

7 e3 _! E0 `3 \$ f: i& O/ k3 Y/* create a logger instance */
( S* L* X7 x2 ?' ?- B8 D( X' p7 dvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; w) D3 ]8 s1 d0 `& \+ ~1 Avar loggerBufP = new LoggerBuf.Params();7 i# B( R( H" H# I
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
6 Z8 g- q0 v1 \loggerBufP.bufType = LoggerBuf.BufType_FIXED;' ]0 V" d3 F: G) s4 s5 S
/ a4 V" \7 Z* s8 A5 x
var appLogger = LoggerBuf.create(loggerBufP);
# m9 Q/ M' z3 }" v8 {/ qappLogger.instance.name = "AppLog_Core1";
) n5 x4 j0 l8 p! @) PDefaults.common$.logger = appLogger;1 \5 p$ b% }" P% P/ d9 d3 |
Memory.defaultHeapSize = 0x8192;    3 e) B: {" D5 Y! C% Y% s3 t, F) C
Idle.idleFxns[0] = "&LEDStatus";! e! p8 \+ n# o1 X/ T
Cache.initSize.l2Size = Cache.L2Size_32K;0 ^7 _5 a5 M7 y: x0 q, y
- F2 G0 u4 O) u* ], ]" ^5 l0 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 */
6 F1 w4 u/ Z& Bvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# {% _* ~: g6 a6 E
var heapMemParams = new HeapMem.Params();
3 r$ H  ]' ?, vheapMemParams.size = 0x4000;+ _0 i. v0 p; S
' d: }' Z8 U8 j1 ?; `
var Memory = xdc.useModule('xdc.runtime.Memory');. R3 A+ v) E, S- O4 b
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);$ C( G3 P$ u) h6 q

4 J% X! P& r) Z. }" \% h: t1 ?我大约calloc  每次共计大小为5K*16bits,/ O; M# B; M& w
而默认配置才0x4000、需要改大。
" y& ?0 n7 e0 \
4 @# Q1 j3 V+ j' `, U2 p5 Z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
0 m6 Q7 k, G% H. y) ~Program.heap = 0;, r; q+ n! c; W; L
Program.argSize = 100;  /* minimum size */  h2 N* C8 P$ a/ k# F+ L  T) G1 c
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-28 21:06 , Processed in 0.041409 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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