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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
# b9 L$ t3 p3 _5 \* X, y4 M+ \4 F+ r9 ?
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256) |/ E0 {# h  L. J$ I0 R4 M0 e
" A- g4 Z/ M1 T- R" v; S
其他程序段。。。。。
, G; M2 x/ X/ x) W1 [3 x7 V 0 O; v* a$ B' U" A" O9 K9 S' r
   free(x_d);* p: Y2 V" G; Z0 g$ r( g& B: i8 w4 f+ d

9 P8 M5 A) v/ R- i! [使用DSP侧单独调试功能,验证动态申请没有问题,% `, H+ O2 s8 Y- b! r

6 k( e9 {7 l5 n) A0 p但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
0 `' r+ t/ O+ B% j6 @

+ }( X# ^7 }& f$ K, `& f% }5 b7 t% ?0 _# Z+ v
' K6 z  \; B& [% }/ A) z

' l0 `) ]. F, {( l; ^
2 M6 d1 h; N3 ^" P* Q8 g3 {1 n( l+ x3 O% c
/ W6 \. P0 l3 k1 T6 i. j0 ^
$ u+ }" u, _3 ]) ^! x! k2 s) Z

, z2 i) h5 k7 q# C2 b; J# U
* Q+ ^/ H( d( H/ x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
, n) B0 H2 C' g3 M& K3 T. d( j我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下7 s3 m- A$ B3 Q  X. v
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 ?, s& [" ?4 G* Y1 u' Y3 q, ?3 S
2 c/ m0 F3 i3 S6 {& G5 M( e
是不是需要在DSP.CFG中进行配置
- `# P" k: }/ ]" F/ u我现在的配置为
- |- y4 h7 h# Q) ]: s3 N4 j
5 H' c! F" [6 k8 P$ @0 [, R/*
7 G+ \+ O1 Z* d, z5 ?* T  L9 {2 j *  ======== Operating System Configuration ========& B5 v, @# l6 _* l3 l4 {
*/0 H; R0 G, u+ r/ v& ~8 ^' t7 w! Q
; ^# C- V" O! l2 L6 g; |6 s
/* no rts heap */
! G/ K2 [: z# u1 k  kProgram.heap = 0;6 [; j! v/ U" ?' C7 o0 O
Program.argSize = 100;  /* minimum size */' u) W! Z8 v' F/ I
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大; I: j" w# g( W  M6 a1 J* O7 O, r

# |( s: e2 \4 G. m/* create a default heap */
. d) R7 p3 W2 n7 S; dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 [9 w/ t: ~& I; Rvar heapMemParams = new HeapMem.Params();9 |& G& a6 T  B1 S
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
4 j6 t: C7 l& G1 @2 Y3 L2 ]" Q0 `  y
var Memory = xdc.useModule('xdc.runtime.Memory');
& J( E5 Y9 b1 M% I7 k0 m$ o; B6 B5 YMemory.defaultHeapInstance = HeapMem.create(heapMemParams);4 x, ~/ G$ S0 d7 T  G. C

$ |/ d0 c: U! k3 @/* configure System module */: U, k/ o9 ^2 n8 b8 b0 d9 f
var SysMin = xdc.useModule('xdc.runtime.SysMin');
" P( D  D6 h3 X/ LSysMin.bufSize = 0x1000;
  o8 [  B5 v3 {* BSysMin.flushAtExit = false;
0 F; Z0 \+ J0 ]/ [4 @" w/ J9 h3 Z/ B1 c
var System = xdc.useModule('xdc.runtime.System');
+ p: A9 n0 E$ W* j  E1 a  DSystem.SupportProxy = SysMin;
' `% G; \0 C8 G/ ^$ s' G/ n' M7 ~6 J2 s
/* configure SysBios to use the lower half of Timer 1 */0 ]8 z, Q5 b0 z4 ?2 ]% A! ]
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
6 @" W: n- f! h' Q/ E6 `4 g8 Ovar Clock = xdc.useModule('ti.sysbios.knl.Clock');3 X. e1 t, X! h8 C- W  x: n" q5 f
Timer.timerSettings[1].master = true;3 Y/ Q/ i. i' l: E9 Z1 u
Timer.defaultHalf = Timer.Half_LOWER;9 x% z! r" t; M9 e
Clock.timerId = 1;
  _9 M: o, Q/ |+ c/ m! x; A& Z4 I# b) U, c

: d6 S1 Z: G. f# M( T0 ?1 f/*
( Q3 F0 r2 f+ {' K *  ======== Miscellaneous Configuration ========
' t" J3 K( S) Q: B */
& M6 c' I# h2 x+ p! u9 v/ X0 d! J/ R) V3 Z" D% \3 k
/* set default diags mask */4 r8 D) o6 q+ t
var Diags = xdc.useModule('xdc.runtime.Diags');( X# E. d3 f6 E: X% P$ E
var Defaults = xdc.useModule('xdc.runtime.Defaults');2 ]& l2 @& V) n  r9 q8 {4 e
7 `' }/ y( ~  @1 p. {% ]
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
$ }2 n' B( c& B+ _4 j0 KDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
. J- d: M, E4 \8 _. M% H9 uDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
+ k- \# g2 P( t+ j( f! DDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */, W& k& k3 x0 w6 j
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */9 i; C- E& ]" [8 ^+ Z5 G# }* U
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
' Q/ W  r) b3 B$ ?; L) \. }Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;9 z& e1 n# d; G+ A/ s1 A9 m4 A1 ~
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
5 V; S1 E2 v8 P$ V$ p, L5 `( B) gDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( O# `% }0 u1 j; Y/ L3 p2 L( C8 ?
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;1 n" F& G9 C0 n" t# g0 H, Y: D
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;) b2 t) K# l5 F4 s. h1 D9 }
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
+ E% E- ~$ u' z! Y8 A0 Y1 ODefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
& M% S6 d' `0 N4 l. xDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
9 f0 ?/ [1 A6 |( s& r: O" Y( `: p; Y# h) T+ S8 v" p
/* override diags mask for selected modules */. Z; C% n$ Y# a" G
xdc.useModule('xdc.runtime.Main');
' P7 ?( |+ s- e1 JDiags.setMaskMeta(
4 R% r% W2 n, [) i( p) a/ A- F5 T' s    "xdc.runtime.Main",4 n( o' \* V0 P$ \% s  p
    Diags.ENTRY | Diags.EXIT | Diags.INFO,1 i2 _0 O. k$ Q3 G
    Diags.RUNTIME_ON
0 v+ @# G) W3 n6 I4 i);
1 F$ Z1 x( r4 V9 H+ D+ t' m
% [8 f" @9 r7 e3 Lvar Registry = xdc.useModule('xdc.runtime.Registry');
/ B+ R$ n7 L: ^  |) ?% F4 nRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ b! _6 ^+ m0 `0 ~( u4 p7 z
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
& Y2 r4 [. @& E& pRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;# v" O2 J( ]4 u7 Q$ G. n
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
( i) v9 _( Q9 {$ i# e) k6 o
' R( ^1 G. r3 j3 [/* create a logger instance */
% E0 a0 z. x$ O, b) Y8 D& Yvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');* f! k3 J6 R* [% F
var loggerBufP = new LoggerBuf.Params();
- F; B; {- d' n8 Z- BloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
# z: x. J6 Z1 Q; ^1 b/ ~loggerBufP.bufType = LoggerBuf.BufType_FIXED;
7 ]$ t) m( e; p8 N8 j; w8 i; _- x* x( Y2 l/ L
var appLogger = LoggerBuf.create(loggerBufP);5 A( Z& C7 e$ \
appLogger.instance.name = "AppLog_Core1";
9 k. d+ H/ R* q, H8 J1 BDefaults.common$.logger = appLogger;- G6 J$ q# k# \+ ]
Memory.defaultHeapSize = 0x8192;   
, l/ M+ E5 [! W- y3 Y" b- kIdle.idleFxns[0] = "&LEDStatus";
9 S, g5 h% Q! r% v; r0 ~% i4 TCache.initSize.l2Size = Cache.L2Size_32K;& D* j; H2 P( q1 p+ g7 ^
3 G  v5 c  W: G  @
回复 支持 反对

使用道具 举报

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 */
- }* N; f9 D, j+ W5 wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! v5 a- d' U7 L0 r2 P2 evar heapMemParams = new HeapMem.Params();, o8 j  y- _; H( m3 d
heapMemParams.size = 0x4000;
' r$ O! K) b6 A/ M
7 ]' O  S" c5 x; d. }+ y9 f5 Y# Tvar Memory = xdc.useModule('xdc.runtime.Memory');/ Q& j+ m% q* e( M$ z  v' P0 o# E* O
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);$ v/ Q& c/ r9 p

4 }9 k$ ^% U. ]4 O# ?我大约calloc  每次共计大小为5K*16bits,* L0 o- J* r. z* v
而默认配置才0x4000、需要改大。
% F" p. h8 Q( a( {
& ^; O  t5 w# g$ B7 S3 p# B0 E( H
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */% \8 F9 @- P) n8 `
Program.heap = 0;
% W- x, Y' G% O& [9 UProgram.argSize = 100;  /* minimum size */. R: e1 n' b% `- b$ R
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-8 02:29 , Processed in 0.039345 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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