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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构5 ?0 y* u, H. D6 s% f

2 v% K! k7 v. P; B1 \- a- a$ B    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256* ?4 v2 G4 [+ }2 @7 g9 X- G
/ @9 ?1 J! D* T5 m6 B
其他程序段。。。。。
$ ?' \9 R9 s) j( {4 n2 u4 i ( Q8 h) Y3 s8 b" r5 Q) w: Q
   free(x_d);
; S$ {$ y( a- e1 y) M
3 p0 l! {' K. a% c5 v) T. [使用DSP侧单独调试功能,验证动态申请没有问题,
* S; ]- B$ ], j) \% I# s6 W5 t. f  Z0 ~4 p8 @3 r9 B  a
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
" r. o& h8 b- r$ {9 F6 y- U

3 a: L! k7 L" A1 F- p- S7 V2 ~' W4 U3 V2 R2 `3 T1 w
. I- ^0 {+ X1 S" W! U
- }9 T" M6 `' v
$ p1 \! c& O; w- s7 s
1 z: X5 |0 z8 c) {+ e, H7 D: }+ h
) `0 d: d/ Z/ Y% Z- w; e3 m( g
- O2 |  y  F0 n& c. l  G

  w& Y; A, ]0 i& t( \; k7 X8 G
! {/ K1 {0 ~3 e9 v5 M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
( O/ r6 G  P! f- W' D: ?' R. R6 P我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
% g$ ]4 H' S% R  ~; l; }(不过疑惑的是,为何单独DSP仿真就没有问题呢?)* Q& q2 B% B# m4 d

" i: v7 ?8 U1 b1 e2 ?/ u是不是需要在DSP.CFG中进行配置
& J6 ^$ m" E' Q  e我现在的配置为8 `! c" x. h, S) [/ W2 ?9 C+ ?& l

4 K# a; u7 h% e, u) l" l* H. N+ _/ C/*
" e8 E2 j7 g( Y0 L5 ]& f *  ======== Operating System Configuration ========$ X7 P8 z* w, E" ^" A
*/
# F* _5 F* z$ |5 m, Z# I
+ {% s- A/ J' N4 k8 T4 `3 L% }/* no rts heap */
! W5 g3 f. v* e0 C9 V! M+ v- q* TProgram.heap = 0;* u6 [0 ^! Z$ l
Program.argSize = 100;  /* minimum size */* i4 X  j5 `" E
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大1 v) f" f$ G+ m: w& _
9 w4 ]9 R/ a$ K" Q3 ~4 P% o# f
/* create a default heap */
/ k' O7 o1 j0 R+ k9 U1 vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( ?) R) u: q, K6 t# f- ]$ Qvar heapMemParams = new HeapMem.Params();
( R5 Z. F! b9 \3 C) pheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大9 x  O/ |  j& K* \, _/ }9 a$ X' j% z
# s, ^5 d. j) e# v5 ^& H; f
var Memory = xdc.useModule('xdc.runtime.Memory');
. h3 T# D0 u7 G$ C2 D- g$ [Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
% I0 s: R9 G: K: O) e( q/ o; _: ]4 Z4 s3 w. Z1 `
/* configure System module */. z# T4 E* m* x
var SysMin = xdc.useModule('xdc.runtime.SysMin');, E4 P( s# C$ i2 s* o
SysMin.bufSize = 0x1000;7 e* h7 s6 k8 k: D# l
SysMin.flushAtExit = false;
, W" U# F5 ]& K0 g; w( W5 y& e0 Y) L; {3 _; F! S
var System = xdc.useModule('xdc.runtime.System');
) F3 l& B3 F3 ^0 j# eSystem.SupportProxy = SysMin;9 `* C' {! v7 B: n! P; B, b
; ^! B" g! G% s
/* configure SysBios to use the lower half of Timer 1 */
( `- ?4 x8 C" @- d, @4 b/ i- K. Evar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');9 ]' `; h6 _+ r4 k+ @( ~- t: h
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
- n1 L+ R, J+ H8 f* r2 J+ K, q) xTimer.timerSettings[1].master = true;
; M/ P+ v( d7 T' E# D  _2 @Timer.defaultHalf = Timer.Half_LOWER;9 |, X6 O3 z3 A
Clock.timerId = 1;+ F2 A) z9 {7 b
$ B+ H) ]( q; R- h9 ]
7 t0 V& e% A; U* B
/*/ z. F- \, M& X8 W/ O
*  ======== Miscellaneous Configuration ========. B7 G% s9 B# p+ h4 A  N
*/
6 V9 p0 P8 ~8 {( f8 U/ J, \" \9 ]0 R* ]
/* set default diags mask */
  x2 Q  d$ c+ r( Cvar Diags = xdc.useModule('xdc.runtime.Diags');) F0 U7 ~% ^8 p9 ?' D
var Defaults = xdc.useModule('xdc.runtime.Defaults');2 }4 [4 V7 T# N0 K* a* a
. f; R" @' X9 a; r$ i1 x: w9 \/ ]. S
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;2 w3 N6 J( u$ B1 c
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
' D- z$ B' w- F" l9 C! [Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
# m  O5 Z2 j, {5 V+ R# `. `Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */  B6 L7 W. q7 s' d% e  |3 l/ O
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
  U( [; X5 R9 [$ m3 O  }Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
2 _/ y* g3 X# }1 }Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;+ s/ n! }+ [7 K) n
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;5 C' Q0 f. q* ^- @! v
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;, Z( L3 k1 H" }# p* O9 d
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
. H* _+ X# C2 [$ Q, k5 F" hDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
, w) y. r( M- w, n" I8 \Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;4 y2 C+ s* A- V8 X
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
& F! [% g! t+ K1 j, F- q( UDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 l+ M9 B' @+ ?1 Z

3 e) p7 h& N+ b& h5 {0 ?3 ?$ ]- |/* override diags mask for selected modules */
& I; n7 H$ x4 x0 j% txdc.useModule('xdc.runtime.Main');
" B8 {4 V) a8 Q! wDiags.setMaskMeta(
6 o& b1 x) P: f/ s6 _4 O7 {    "xdc.runtime.Main",& d& R( v9 F! I/ [- C8 W7 `0 l1 O
    Diags.ENTRY | Diags.EXIT | Diags.INFO,! y; X/ r$ c- h5 ]! Q
    Diags.RUNTIME_ON
4 k) \. i( O8 d) g);
( t, S$ p/ W6 d, @+ u
5 n6 U" w2 Q& O0 M9 S9 S* S8 ovar Registry = xdc.useModule('xdc.runtime.Registry');
5 F: c( [4 e( ^1 ?  m' {! c& e, `8 d* KRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
! d7 n% i! d* u& }Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
, I+ j" w8 ~  c0 N) t- Q1 G+ V+ u- hRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;# @9 o4 L: F  }# n) d% f
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;9 e' m% O, Z0 t2 P- Q

( v0 E1 q) [6 I% {/* create a logger instance */
) r" b7 q) e+ O* z3 S! ]4 r' @var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');, n4 a0 V! C, S
var loggerBufP = new LoggerBuf.Params();& Y" I* v" f+ ]1 @9 T( m* X
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */6 F% b' l' I* P
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
. r2 c4 }. W, W7 Q" p8 t; @! o$ T' t: S. _1 a' n% n8 N
var appLogger = LoggerBuf.create(loggerBufP);
; z$ X9 b6 o. X' A8 OappLogger.instance.name = "AppLog_Core1";4 c3 o% ]1 f) r
Defaults.common$.logger = appLogger;
/ P$ f; m  z& w, s- L6 B0 _$ gMemory.defaultHeapSize = 0x8192;   
) L8 w/ g6 T: nIdle.idleFxns[0] = "&LEDStatus";4 q& D0 j/ d5 Z3 Z7 B
Cache.initSize.l2Size = Cache.L2Size_32K;
' y* W& i/ |, W+ B. }& Q- c* G4 w5 n% O
回复 支持 反对

使用道具 举报

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 */
" r3 j" O  j3 @3 ^* C4 Wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 ]5 o; u2 x# Jvar heapMemParams = new HeapMem.Params();+ G: L* l1 ?6 s1 A
heapMemParams.size = 0x4000;
$ l! @' W' g, P7 N5 X% R3 m1 j8 x/ ~( e- ~, L2 T5 c  t
var Memory = xdc.useModule('xdc.runtime.Memory');
* s3 k9 _& l$ p" C" KMemory.defaultHeapInstance = HeapMem.create(heapMemParams);4 W3 h8 h( }+ z1 u1 J/ Q) c
2 c; `. J# Y" C# k  [
我大约calloc  每次共计大小为5K*16bits,& L4 _0 x0 D. a1 N
而默认配置才0x4000、需要改大。( |0 a+ W/ M: W1 K# s" W
4 p  _, B# m' z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
: R5 }8 L* P# Y3 b+ `Program.heap = 0;
& `) |# u" L5 n$ y9 lProgram.argSize = 100;  /* minimum size */6 v# P( ^6 ^; w* D5 z4 Q
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-9 03:05 , Processed in 0.045768 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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