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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
8 U6 e2 ?2 P+ @
% A" t8 o. H, n) U+ e, [- F2 i    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256* t9 q! E$ \' {0 d6 }( {  W. d

8 O7 H# d# {9 K- y) H其他程序段。。。。。& i- e) H( G, H- u, ?4 t, ]0 R

; T0 L. D6 {# h! q% N1 ~   free(x_d);
% d1 L# o% ~& r. ^# V4 K3 V) J- g9 Q4 y, y8 O7 w
使用DSP侧单独调试功能,验证动态申请没有问题,& @7 y; V5 s  r: b+ {" _

# Y8 }3 j  o- a但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。: u+ m# G5 {' f- g

) H  F  s2 e2 `; b  f( O' P3 a9 D* T/ p" j
9 N( ~. |; Q; d% K9 h; P- P2 T# @

# P. S8 I' w) J6 O8 a8 M5 k, t6 ]* q. X3 k7 D# {

: g) `' I; f! F6 J
8 \1 G0 ]( n% B; c" K  A6 D
. q* \' L/ [$ {% U3 C" q  Z7 z" p( D$ l" u8 D  x

* J' U1 ^+ O0 ]" {% C$ F
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明' I8 ?" X5 M+ a' V6 ?- W; ]2 t
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 F  Z: M7 J2 F! D
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
" `& o& t" v  g: f

. {( }. D* d5 o是不是需要在DSP.CFG中进行配置: I  W8 A8 h# ?8 w. b3 k" Q& A
我现在的配置为) H" Z& I, Y9 J- u3 J2 n
. C, `; ?1 d5 U7 G5 u; T
/*6 D, v( ~, ^' R; _
*  ======== Operating System Configuration ========  p8 W4 c8 e1 \% [+ n* _$ O9 D
*/# m; j, s% C7 j' z) \
5 G* |: z& Y; C0 H" w: J6 N
/* no rts heap */) H3 Q. u3 g( ~5 I; t1 M
Program.heap = 0;
0 O& N& B9 k) N; vProgram.argSize = 100;  /* minimum size */$ I/ |$ \' C5 @2 U4 J* t
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大+ @0 n% e+ U5 D9 W- G

0 J& ^5 J. ^8 ]! h$ J% M/* create a default heap */& w. f" g. ~9 f1 z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) w  d; I: r" I0 a
var heapMemParams = new HeapMem.Params();$ x6 c8 c) q+ z9 D2 q- r4 B
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大, X7 W' ?& t2 `& P& \

7 j& ?& v( h, S/ V: {
var Memory = xdc.useModule('xdc.runtime.Memory');  j% x& R' }2 p! Y$ @
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' H; t9 q6 H! q) W# \

. o1 g0 W) }, `$ T, |8 o/* configure System module */4 S, N( u# ]  t; ?# r. `! @8 b
var SysMin = xdc.useModule('xdc.runtime.SysMin');+ ^* p$ `1 i. l1 o
SysMin.bufSize = 0x1000;! Y! |; z7 A. y. B' {6 L5 A0 F* a
SysMin.flushAtExit = false;
; d: T/ t% P0 }) x7 O
+ s; Z2 x' y( wvar System = xdc.useModule('xdc.runtime.System');3 L( o' p4 _. d% l
System.SupportProxy = SysMin;9 H9 R  c) ^, U
- d9 a' ~1 Y9 c6 U3 A
/* configure SysBios to use the lower half of Timer 1 *// V' {& y% R* @1 R  @! Z! S% b/ U* }
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
5 x8 U5 Q: P3 Q; K) i2 y+ cvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
$ r! L; a/ r9 k7 v' DTimer.timerSettings[1].master = true;* w' J/ a3 o+ p' Y
Timer.defaultHalf = Timer.Half_LOWER;
- p% Q8 y% i. J& ?* GClock.timerId = 1;$ y! P; l8 b1 l3 x- J
& F, W; y* K9 z: J' y& w6 w

+ N; E% D, q5 k1 _2 l/*
8 q* q6 k/ O7 l0 d; n$ r *  ======== Miscellaneous Configuration ========
+ K+ h/ ]. t6 C: E5 C */
' u/ D2 P- L6 i) u2 q9 J
+ c- @7 `9 v! L# M+ f4 {/ ]+ t9 _/* set default diags mask */: w0 i  r8 [* P' K6 k: u
var Diags = xdc.useModule('xdc.runtime.Diags');' u* b6 {$ T/ ^1 ]) c/ B( s; |
var Defaults = xdc.useModule('xdc.runtime.Defaults');9 Q/ s' k0 v& n$ ]

$ j' \) |2 I8 L* j) V  R  {Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
& }& r0 x4 u; z7 y; vDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;3 _& ]9 w% a* F# X5 J  }. Y
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;1 d/ Q; ]4 R0 v, C
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */; Y! C. I; L& l2 \4 [0 e
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
5 @5 V7 m7 J3 M; _Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
3 t. w; C, j' ~Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
/ Z0 c# A, A0 [  _4 c; w/ u% |Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- q# h( x' [" i& q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;  m( q7 d2 X2 o1 W0 P
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;) n% j% b  q* Y0 [8 b
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;: _8 v1 _1 R8 d0 O
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;( T# h! j( ~- F8 O" Z' m8 S- `9 x; c
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;3 y* s6 Y2 V6 X7 D8 a" h/ O4 `
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
. g8 z! M: o0 x! {* K: z4 c" i4 {- X& ~- o( Q
/* override diags mask for selected modules */3 N" P$ h" I* ?
xdc.useModule('xdc.runtime.Main');: s; X5 ]* n: C8 d7 a' l" P. a! A& v
Diags.setMaskMeta(. \0 z0 H8 b. f
    "xdc.runtime.Main",2 J5 Y$ B  y9 j5 r
    Diags.ENTRY | Diags.EXIT | Diags.INFO,2 B$ I* K3 _( O( X
    Diags.RUNTIME_ON
# v" x* `+ J# r* e, `8 P& q' v);' I0 S! s- A3 c5 y( l- q& k

: c- G+ z: K3 V$ c5 m5 [var Registry = xdc.useModule('xdc.runtime.Registry');
4 F6 T  _& |* q: ~% X: lRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
$ c" [* C( I: S* u& L, MRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;8 N3 G8 i' }4 M0 f# j
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
+ T7 A' w8 [7 k, F' V- _. z  sRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;* J- x6 v& h7 a0 F, b
5 @3 {8 U) ?6 n) O- u8 V: R8 }
/* create a logger instance */5 C7 |6 e  K7 E. Z# L
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');" K( t  q* u7 N2 o& ?
var loggerBufP = new LoggerBuf.Params();6 g8 ^  n+ h5 }7 v
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
2 t( g. d' E3 E/ j0 @5 uloggerBufP.bufType = LoggerBuf.BufType_FIXED;
: I- T5 @& U# f9 v! D! E7 o0 u" N3 O9 Z% D6 x5 k+ ?
var appLogger = LoggerBuf.create(loggerBufP);
9 s- P5 Z/ j' y1 x* ^. F2 ZappLogger.instance.name = "AppLog_Core1";
: p$ e+ M2 v8 n6 ~Defaults.common$.logger = appLogger;, {, y/ r* ]& J+ u+ x: j8 F- e+ C
Memory.defaultHeapSize = 0x8192;   
& H  N% F" [5 T6 q2 d. y8 I1 ]& ?6 BIdle.idleFxns[0] = "&LEDStatus";
9 j+ C- Z2 F, K9 vCache.initSize.l2Size = Cache.L2Size_32K;! B. R0 E5 \1 X7 x: z2 }

3 |8 w3 h) k" t9 {
回复 支持 反对

使用道具 举报

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 */
4 ]3 n! `4 A: M- {6 t& U& V9 `var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ K; D" M# |1 j- m# H' ]% q/ p( `) b
var heapMemParams = new HeapMem.Params();
8 N: ]' a5 s4 Y0 {/ s- qheapMemParams.size = 0x4000;+ b! n" ~  |# f' B5 |. q+ r2 \
% m! d3 M# Y) A3 I8 A3 g* D5 V
var Memory = xdc.useModule('xdc.runtime.Memory');
( b4 S* }8 e- E. X2 V2 nMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ f2 x2 |$ ?& o  |7 q  i  }1 M) q; G2 D3 m+ f
我大约calloc  每次共计大小为5K*16bits," A- [! r& b. ~6 A
而默认配置才0x4000、需要改大。
" Z2 l  _, g  c5 L& @  p
* K" d6 _0 C2 x* i5 p/ {
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
) M! {7 u  N* N' u$ iProgram.heap = 0;: J' u1 u, x  Y
Program.argSize = 100;  /* minimum size */
8 |/ A0 {4 z  w" BProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-13 17:03 , Processed in 0.044069 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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