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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构0 M: \- Z% D9 }5 _/ \2 Q- Z% ]
, d6 x+ H# W+ i' {1 D& @3 Z. x, \
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256: C$ x9 d% y6 u. ]+ J/ h

6 \; [# p) s0 w7 Q2 G/ h6 J其他程序段。。。。。1 B5 }0 A) H  A; b
: D7 u: M8 R# ~6 W7 I
   free(x_d);) e# m( d3 y' q# E7 v6 c' }: R

8 C3 I  I# {3 \% d使用DSP侧单独调试功能,验证动态申请没有问题,
5 v3 }8 {6 u) @; c, ?+ B6 v9 n1 u4 `
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。9 [6 S, K/ O; P4 b# A
) J3 x9 i) E, M) i/ Z0 z; n6 R

5 M. }' q3 V  C+ L) |! U0 i! a8 H" E0 f/ R( O% K

! _: ^. R. x( `% v! z2 n0 J0 d# s! [/ E

9 Z3 y/ T( ]: J; r8 h, ?2 L5 G1 o7 O/ ~5 e( E& W! V

3 C* s4 v# b7 c( M0 @. W, b& L# S$ M# \- D3 h
: Z( Z$ \! k' D7 ?- r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
  `2 I/ N+ L6 @0 \我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
! t0 {: S8 Z" q1 i$ _  w! V5 P(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 _/ h  x6 Q- K! E3 x# `
/ I- a7 e; A* l0 G
是不是需要在DSP.CFG中进行配置
* i" b! M- b  {( ^/ H: H- ~我现在的配置为8 w7 m4 ?) v9 A/ \2 m9 L1 n

* y) G5 X6 {6 E( Z* C- k+ Z6 ~/*
& \3 m: `: q; D9 _$ w *  ======== Operating System Configuration ========: B0 R! h) J$ P! b& {
*/
, \- N) G% e  Z9 m1 R/ v
2 N! q" A  M1 Q3 M3 O# @0 ?+ z/* no rts heap */
. ]3 s/ O5 H1 L0 N% L( `Program.heap = 0;6 o( Q3 S( z' r  z1 a
Program.argSize = 100;  /* minimum size */1 h8 A9 }7 k/ `4 [) i  ^$ q
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
: P( O6 k$ r% H6 `2 v) u
! x* V6 Y( I: g1 u( O/* create a default heap */
  y7 o, p3 l/ S8 b) i4 L% V% ^var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# R7 O& k, x. Z0 L# Q( M0 Bvar heapMemParams = new HeapMem.Params();
2 _- _$ |* t) w8 s/ _* AheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大( v  f* J* O) z4 Q

9 e: ?  X5 `7 E8 g6 f
var Memory = xdc.useModule('xdc.runtime.Memory');
% a$ Y3 @. F- Z# |! P+ tMemory.defaultHeapInstance = HeapMem.create(heapMemParams);# f" M, a3 D6 F/ C7 {
0 h( L6 p/ p( x& @
/* configure System module */
6 _0 s% R, h- n; _/ |var SysMin = xdc.useModule('xdc.runtime.SysMin');8 ^" a" @0 b0 `, a' V
SysMin.bufSize = 0x1000;9 b* u, `; @+ ~% B6 A6 @# U
SysMin.flushAtExit = false;
; [/ V% p; E  W* D3 B- C1 C3 M4 S$ P7 _" [
var System = xdc.useModule('xdc.runtime.System');& d2 b* I  |) h/ b2 x
System.SupportProxy = SysMin;
4 z: k0 X, i0 K4 w" L! t- n. F8 ]- }5 ]! I
/* configure SysBios to use the lower half of Timer 1 */
) X9 L9 T( m3 b7 j8 |8 Ovar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');# s2 U& @  _( |. ~2 S$ t0 ?  _1 F
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
8 S( n" a4 v( t+ N# H+ |% ]6 `" LTimer.timerSettings[1].master = true;6 }8 G7 ?4 ^( E/ K1 G
Timer.defaultHalf = Timer.Half_LOWER;- g! X7 C5 `& E3 A% K9 b
Clock.timerId = 1;
/ L( d$ `1 J( L
- M$ T- T& `$ }- D8 [7 ^$ ]/ ]0 d
/*
! p0 h+ x/ B& L( O  w2 a *  ======== Miscellaneous Configuration ========
" p) m7 U4 O, ?: h */
4 C( b5 X4 t: T2 q8 R) M
" f# E$ ?  R0 |% W! j! Z0 W1 h* h  m/* set default diags mask */
$ r" W; I+ P( D$ L* G9 L. ^. Vvar Diags = xdc.useModule('xdc.runtime.Diags');
( z5 Q" v1 R/ K6 p. S# n" f9 q# ?1 ?var Defaults = xdc.useModule('xdc.runtime.Defaults');  e8 S; z& |9 x2 Q0 q3 n! \

0 F/ n5 c0 b5 J- I3 \, O9 n# QDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
# P# z$ G2 j: M( i* f4 yDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
) [. O/ s! i  @1 bDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;6 g1 @1 x! y# b- Y8 z/ V
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
* Y- r" Y( j- O6 R2 PDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
) \$ i* C0 W" i  N& hDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
8 Z: z. w$ Q2 M. E  HDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
% _  ^% U9 S" n  w- [% A: rDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 {/ C# i) G0 _Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;" V' x* D' ^! g, C
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
" }+ A2 F; M3 }4 Z" ~, J' |' O3 f7 MDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
5 e4 I9 A- W+ e0 c; lDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;- S% p' K* C8 Z" c& }
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;+ j, U& l3 I' e8 S2 X
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
' G$ ^$ V% K) y" w; x
2 \7 o: S/ [* N  C% n/* override diags mask for selected modules */; Q$ a0 ]5 x3 x8 A9 q
xdc.useModule('xdc.runtime.Main');0 ^" a' X* v/ L4 u$ Q
Diags.setMaskMeta(
7 H( i; B' C# H    "xdc.runtime.Main",
- D3 o0 t, _1 s( E    Diags.ENTRY | Diags.EXIT | Diags.INFO,# y2 K" V) [$ @: u
    Diags.RUNTIME_ON
6 P( ]* @5 y: R  w);
% S3 t* x" ^  Z& V% T- P4 Y" l  P+ H2 H. a# ]' Y7 K/ D! Q
var Registry = xdc.useModule('xdc.runtime.Registry');
& J8 P, s- b& N& |4 |# uRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;% I& K( A3 r" x
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;  X% V1 B+ o1 E: N
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;: L% J$ {& p& @* `
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;, w. i  y& L+ X6 W7 Y1 l

3 f7 u' W" D- Z, Q  b1 h/* create a logger instance */5 J( _; ~3 r+ }( G
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
, V, u( d' |: R0 A) M6 O2 Hvar loggerBufP = new LoggerBuf.Params();
8 U2 Y* L( [* L( ZloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
' g* C/ J$ \' b" g5 ologgerBufP.bufType = LoggerBuf.BufType_FIXED;! Q" v6 R6 f; U2 E# q- k

3 y4 O9 R5 e4 H6 cvar appLogger = LoggerBuf.create(loggerBufP);
! |$ A( k4 G* e* v' ]+ TappLogger.instance.name = "AppLog_Core1";6 G+ l+ l1 L0 q# ^& c2 |0 H
Defaults.common$.logger = appLogger;4 ?! u; S3 }$ y: V. S3 G" u  S* G
Memory.defaultHeapSize = 0x8192;   
$ U) V( g8 d  _) A# c" |Idle.idleFxns[0] = "&LEDStatus";/ j* O) b% {8 B6 l4 S
Cache.initSize.l2Size = Cache.L2Size_32K;$ W  [8 f9 c! d6 ~
, q7 V4 c, B: ?( L, C2 k$ a& ~
回复 支持 反对

使用道具 举报

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 */9 H8 X, @6 ?) A: T6 Z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 }: h! ]( L1 g8 s  d7 mvar heapMemParams = new HeapMem.Params();5 i0 ]" N- m6 z. G* ?1 U
heapMemParams.size = 0x4000;
9 H3 \1 Y! U3 h
. g* K- ~! v" v; T8 W4 ?var Memory = xdc.useModule('xdc.runtime.Memory');% S! Z. H# {" E7 |6 |1 h/ E4 Z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 }& v4 L% ]9 O$ e
1 u! H: g* w& s我大约calloc  每次共计大小为5K*16bits,6 L  ^0 j" D2 w) z
而默认配置才0x4000、需要改大。1 |$ m7 O+ N3 |2 L$ m5 U
. A0 F+ O! b5 Q3 H, S$ s, J* d1 i
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */% G; R* D0 [* m% t2 G  T
Program.heap = 0;
) U" ]) S' |/ u5 zProgram.argSize = 100;  /* minimum size */& ~# n$ d9 t$ j+ ^- q' }  z' }+ f9 ?
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-29 16:57 , Processed in 0.042818 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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