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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
6 Q1 c/ n" L6 X$ `, l( M# C% w8 M9 ?
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256; Y5 p" r, s; t7 ~9 u5 P6 j
9 Q* w' x& `) u+ @+ L; e
其他程序段。。。。。
+ f3 F+ n: b/ r' r
: s$ I, s' Z: d, W+ G   free(x_d);* B' S/ [. f, A
/ K9 d( W( G0 V% |: h9 b
使用DSP侧单独调试功能,验证动态申请没有问题,( `1 M4 @% z- ?' Z1 k

8 T1 v/ n& t6 F' }6 I1 m2 ^* U但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。2 X- l8 ?" m# s6 L: z( L
3 Z/ W5 f! U5 w0 O; T
( B, t, N; r; e7 t, L2 O( G

, k3 V. _, z) X6 `) ?7 A0 t  V
4 z3 N/ _& W- ~* m/ A5 I! ?2 r$ E
+ A+ h0 ^6 c& D* H; F
' N3 Z# R! e: p( ~1 l% A0 m, c8 a7 v! @2 U7 i& {3 a
  ?' @$ K$ w$ s  e
( z) s- W- [, k# I; S# \

; ^5 A5 B2 A6 T- Y7 g; Z3 y8 o. M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明2 ~$ I' t' U  B3 g
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下2 M2 q6 o2 m& L  H
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)  o* c1 F9 S+ j8 k1 U" l
8 O1 \: N% t9 G) |, S* r, W
是不是需要在DSP.CFG中进行配置
' f/ q  e  T+ G. b我现在的配置为8 ~! S7 W( y8 T6 o7 ?
, a$ L( N9 {3 ?6 J
/*. ~% Y7 a& U( ~5 [0 |
*  ======== Operating System Configuration ========
6 y6 U5 G# A$ V; w% }; x0 C */
9 I  i: r% a; T1 c; G  k% h
8 [( x; i# S, P7 _0 B% S/* no rts heap */
, f/ q. V$ I. ^  j5 P' H/ zProgram.heap = 0;
7 u" p5 u2 w( ^8 JProgram.argSize = 100;  /* minimum size */' n2 O% m) D% v+ a' L  m# Y  M
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大* P/ {+ }* _) n

( t) p; M; V0 @0 j7 \0 q& n5 k/* create a default heap */
. D! k# s0 C1 C: G, U4 u8 G  xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 f" _- s1 i/ J) d0 [var heapMemParams = new HeapMem.Params();) G( m1 d9 f# Z: [1 b6 }+ w
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
# f( D" U% G% m: R& Z  H3 _& x! t
. x9 Y( [- v$ Z' h) L1 ~  M  ]
var Memory = xdc.useModule('xdc.runtime.Memory');( Q5 c- H# u. `! N* {
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
4 ^2 Q/ u' L8 k2 _9 q7 P6 ^
( a9 C; b* |9 W/* configure System module */2 t2 B; J5 E! p8 y5 [" U; {8 ]& R2 B
var SysMin = xdc.useModule('xdc.runtime.SysMin');( G+ l/ X2 T9 D+ w0 h- z0 W9 X; @# G& n
SysMin.bufSize = 0x1000;
/ n3 H+ G; w0 \% PSysMin.flushAtExit = false;1 C# N; n6 u! \, J5 S" H+ k; O2 X

% d; i3 y5 E8 @var System = xdc.useModule('xdc.runtime.System');! v' z  @( ]0 ^$ F4 v1 A
System.SupportProxy = SysMin;' q# p+ e) ^3 [8 F' q9 x
7 ?5 c  ]; i# \  k. c
/* configure SysBios to use the lower half of Timer 1 */
- \( o! c' e' v& y- H6 |3 Mvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
' @7 q( ^; ?3 Gvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
; Y% _7 N+ d/ q( {) ITimer.timerSettings[1].master = true;
- m5 s8 m$ ]* o" m0 i  B& [Timer.defaultHalf = Timer.Half_LOWER;
8 P: a, N; }" c- Q6 Q; Y, q& n7 ]+ DClock.timerId = 1;* y( Z+ H8 n6 t- d
( a# u, b) z/ e; L% F0 x' N
4 k! c7 I, }4 e$ `& b4 a
/*$ R/ t) r0 o6 G8 F& C3 U8 p
*  ======== Miscellaneous Configuration ========# l* E6 T/ a. |$ J9 b
*/
, R1 N! j: m9 x' ^( ?2 W* @4 J
9 }3 V, U7 I% C( r& @$ l/* set default diags mask */
3 \( s! S6 _! _. Kvar Diags = xdc.useModule('xdc.runtime.Diags');  h: k! P: e$ h, ~/ o
var Defaults = xdc.useModule('xdc.runtime.Defaults');( L( D/ Z+ Y  E0 b$ |2 F
8 Q7 I) ~* C; Z* O# X3 p
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;. z6 E' ^7 d6 F0 W5 `
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 {! }6 ?, w7 P( x$ xDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;# n5 @. q( u# O+ k
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */! N' v* B! z/ m) G+ q! y8 o; s6 R
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */" ^) p& \2 b8 c" e
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
1 V) t. m& O& i9 ^: s5 l, h$ x) T& ODefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
% |( f+ m! s7 n4 iDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
; r  F+ ~( x3 u+ {9 eDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;8 o1 w7 R$ r$ Q
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;( O  Q( o% i9 F" l1 D/ J" ?6 w. I
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
. N+ N  Y2 f/ K* \2 r0 ^Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
% X& R. S& U. L. C% }2 J( GDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
# e& m: n# c, q2 M; BDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;9 U  N  i  F* `9 F' `" T

( T7 p( b0 C( o8 d4 u/* override diags mask for selected modules */* U+ h- G- q4 X
xdc.useModule('xdc.runtime.Main');( L: e, L% ^+ b  T& g; S$ C3 Q
Diags.setMaskMeta(
3 r$ z; t' V* {    "xdc.runtime.Main",
4 _! ?3 K) N$ |! z0 I% x    Diags.ENTRY | Diags.EXIT | Diags.INFO,
( J, i% z2 l7 t  Y1 r    Diags.RUNTIME_ON0 g  L: E# U5 \; _6 F; G
);, M3 `4 M1 q, d8 X
% n6 J, R8 O9 j) I! n
var Registry = xdc.useModule('xdc.runtime.Registry');# f: Q* c  _7 F& j
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;. d. q/ z3 [: ~
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
9 [$ \1 |& Z6 l. f9 s% a% QRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;0 M& ^) N6 F' Y% i# u
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
% m7 J, }" i& ?1 }; c$ w
7 E- D5 J4 n8 |5 ?5 _$ o/* create a logger instance */3 c( e8 r# k9 n4 _/ `$ h8 m
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');8 u2 ^3 V4 ]# ]- k2 G  }, a0 q4 u
var loggerBufP = new LoggerBuf.Params();
# w9 V2 Y  }& F* gloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */: n$ f% h! W5 b. P; s+ P
loggerBufP.bufType = LoggerBuf.BufType_FIXED;8 j! V7 `9 k  a- ]. \
! x8 N- k$ w# Y, ?/ v* g7 D5 U
var appLogger = LoggerBuf.create(loggerBufP);
# f$ b) ~$ d' Y0 NappLogger.instance.name = "AppLog_Core1";; m# {  l0 n2 `. B
Defaults.common$.logger = appLogger;- D* F- t* `1 i( J. x
Memory.defaultHeapSize = 0x8192;    ) ^4 w- }, ]( _$ \# s) C
Idle.idleFxns[0] = "&LEDStatus";) p( o( N  h3 g( U6 G
Cache.initSize.l2Size = Cache.L2Size_32K;
' f+ V1 x$ @4 z" P
9 s( v! E! G3 |) s0 p' p' P0 ?7 c
回复 支持 反对

使用道具 举报

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 */5 K4 P% t. v% I% G1 Q( Q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# w7 V/ l, m. v# w- l5 `
var heapMemParams = new HeapMem.Params();/ J7 M) f4 K! G$ i  ^* _- x- x
heapMemParams.size = 0x4000;
# S, L- P4 x4 n7 {4 ~' }! r- P& y: p! `4 q% U4 Y9 N; j  r7 ~0 c
var Memory = xdc.useModule('xdc.runtime.Memory');5 O7 F; V# V  z8 i
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);6 F8 {$ @' u+ I$ X0 j5 G

( G' ^& l5 `+ e我大约calloc  每次共计大小为5K*16bits,# u/ @: u7 E* X1 C0 W  Z. \
而默认配置才0x4000、需要改大。
, N  B/ h! G+ N$ _: l* T
/ Z1 T4 R0 v6 W2 e
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
1 j' J9 n/ i% c9 ?, CProgram.heap = 0;0 g6 o! f. O3 e# i1 C
Program.argSize = 100;  /* minimum size */
- d- O$ l" E2 _3 [; p& {Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-19 12:47 , Processed in 0.041214 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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