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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

8 ?1 A- D" L  n. W3 I8 w" W    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
' B9 a* v3 G) F& q- E) e2 j+ q  b9 I  Z5 E
其他程序段。。。。。
& F% N! h' T- F! O) ~! y
& C. I3 Q1 K" n/ i- D0 i/ H   free(x_d);
% h3 t! y' W+ B3 ^$ ^7 {1 t, T, f- y8 F( I" m
使用DSP侧单独调试功能,验证动态申请没有问题,
- f2 I/ f8 l; {0 W& a
" M* n+ Z* i- J2 \但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。( }& a$ q5 s8 C) ^; h( I) `

3 L8 p/ {) k- K
7 m5 d0 y/ y7 E/ ~& E2 U" t! w, T/ i8 ^& v# y" ^8 H, ?

1 B( o& \& o+ S; Y+ M& ^+ {
- T  T. z8 r$ D! ~
% m+ i- C; E) I' x9 d
! q6 O0 B' F  v) u
/ b  m. w, d" X% ~8 j& R
+ f# ?! ?# i3 S9 p0 w3 a/ D% K- n& V* |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明2 A' T! P0 k7 }. p' r! V! z
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
9 a+ A- m' T$ ~# n(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 r) P& M# K) ]

' ]% n' ~( t, O: R( d- l  [0 S是不是需要在DSP.CFG中进行配置* \; ~0 [% f3 N! C) B( ~
我现在的配置为! J8 M% S6 c1 i1 Q8 h8 o
$ X! K7 u! ?& X+ w/ `( p+ b
/*3 J/ a6 F% L" i% H4 E
*  ======== Operating System Configuration ========: T- h( `( ?8 `5 h$ e$ q
*/: w2 d; m6 o: u5 _

# l2 b+ @# J9 [7 r! }7 q4 U/* no rts heap */: I9 H: [/ Z4 h/ w* E; t9 b
Program.heap = 0;
4 @) E5 p+ p9 w: z8 WProgram.argSize = 100;  /* minimum size */( I& O5 `% c0 c: s; a, C2 E# _+ |( j) Q5 ?- q
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
9 |8 I& V6 M- `- K, a) Z4 \% f  E' `# r
/* create a default heap */
* R# @# z4 f, F( h, g0 f/ P' Xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ a$ j/ p  {( G; p4 Z/ Y
var heapMemParams = new HeapMem.Params();2 u* l1 s# F; M- o% E5 B
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大  r& `8 I) e3 \! p7 b4 C% e

7 p. N- u3 N) s( c
var Memory = xdc.useModule('xdc.runtime.Memory');
3 D% m( J- r1 S+ ?5 RMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ R0 @- c/ \% s4 B" R
6 K9 {6 p/ ?/ y! b3 G/* configure System module */. Q9 Y, d0 a+ {9 O# X$ K
var SysMin = xdc.useModule('xdc.runtime.SysMin');
" @0 L) H2 o2 S, A6 s/ vSysMin.bufSize = 0x1000;6 \; P( ^/ G! j/ p& N/ Z; r8 [6 Q
SysMin.flushAtExit = false;' Q& ?6 x& h7 ~  c4 @
/ k4 h" R# Z$ B" D
var System = xdc.useModule('xdc.runtime.System');, e) W7 U5 X! v: Q8 o
System.SupportProxy = SysMin;' o2 m5 O( s( \; B1 R, @) F% H

5 n8 F9 q2 a' p# O/* configure SysBios to use the lower half of Timer 1 */
# K" Q3 _9 g' D( Fvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');+ y/ d1 o0 Z  y+ M% t
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
  Z, L6 l+ r1 a; W+ q& A% oTimer.timerSettings[1].master = true;. J3 ^0 n; b5 @% L' g3 D  o2 h0 n& @
Timer.defaultHalf = Timer.Half_LOWER;
+ G2 h7 L  M1 u1 vClock.timerId = 1;
! k3 L% V/ {6 m9 K: {
% [+ K1 e$ v5 p" g; U& P  q8 ~% j3 D+ B1 x5 S6 h6 y
/*4 ]7 d) |+ S8 K2 I, Y/ b% B% M
*  ======== Miscellaneous Configuration ========7 c, z* N. C: ]1 j  i0 P. [
*/2 S) s* Q/ n: z; {0 g* J
- X) q! p0 u9 |4 l
/* set default diags mask */
! I' h0 Z" b" ~7 Wvar Diags = xdc.useModule('xdc.runtime.Diags');
0 _; d( E# F  M+ f8 A* Yvar Defaults = xdc.useModule('xdc.runtime.Defaults');! m+ Q% C+ d* h- z9 k# q3 D# ^
$ L! s9 F$ H( \; r5 G* e; t; z' O# V5 t
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
+ |7 l: H% P/ J5 nDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;( H1 O- Q: y. o# [$ u; r) V9 {* d
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
. v) f: r1 v& J4 O0 ?$ t% L# D" nDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */7 k. y2 `; u9 E* I
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */$ d: _! @$ I) M+ G& D; h- E
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;7 W' [  y5 _+ V( q0 r2 b; B+ P
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;! E4 R  M- j7 q+ f2 R
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;. X- u' B: a% C- l
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;- D& e+ H/ i- v5 p
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 R4 n9 P# A/ Z- NDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;& A; a0 u+ d; Y" e$ T- y( P* M; s
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
- V% Z/ m: N* e% C5 O. U) x  EDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;+ F* Y- g0 v2 t" k' b3 b; ^
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;3 A' S% `$ x* l4 e8 V
) U; ~8 b* n- z( ]) Y# Y4 k1 m! f
/* override diags mask for selected modules */
4 m3 Z4 ?' q( U1 t1 d5 Txdc.useModule('xdc.runtime.Main');
3 U- O6 g" U7 S9 J0 |1 s1 sDiags.setMaskMeta(
4 {. i1 D' @' T    "xdc.runtime.Main",$ d7 J0 ~) T# e0 I) x% k8 D
    Diags.ENTRY | Diags.EXIT | Diags.INFO,  y% {3 K5 j+ j; v6 Q: M, E  L2 o
    Diags.RUNTIME_ON2 N4 Z) Q/ g2 P) c  ^3 Q, P
);
1 P1 Z) u3 r3 J5 x# d# K/ S( \: X' w3 t* \4 W0 n. j9 c. I9 X
var Registry = xdc.useModule('xdc.runtime.Registry');
+ o& o, `; J  Z) R$ W6 O5 x7 MRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;/ _. y8 l6 T+ Q. D, f# G, `5 t, F
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
4 U8 Y9 _/ p1 WRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
) G$ e, v7 O5 R5 U) g  v9 y9 K' wRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;3 g, J5 i% z& Z) F4 W

" e2 r% r3 i( `/* create a logger instance */
$ R% T& \# S" n, Z0 Cvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& s+ C" [1 W- G! g1 n! }" }
var loggerBufP = new LoggerBuf.Params();9 A5 f2 m4 u, b0 V
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */) S2 ~0 ?7 S5 o$ N- P
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
. \) A! c, n8 e/ S1 l) W1 @* @) X$ L1 B8 M' b
var appLogger = LoggerBuf.create(loggerBufP);
- X: z' p* E3 v; W1 jappLogger.instance.name = "AppLog_Core1";
5 V1 m, H+ i3 E6 EDefaults.common$.logger = appLogger;/ t5 c9 @; D; A& k
Memory.defaultHeapSize = 0x8192;   
: S. I6 f9 J& p" XIdle.idleFxns[0] = "&LEDStatus";
+ m* Y  r' i" N/ @Cache.initSize.l2Size = Cache.L2Size_32K;
7 A* n) b0 [: i, ^: I
/ A3 Z8 Y) a; v
回复 支持 反对

使用道具 举报

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 */& r; E$ q- `1 w4 m. o+ m6 |+ ^0 S6 d- ?
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 P' C  F8 y/ v% M; tvar heapMemParams = new HeapMem.Params();! s/ E) A3 }% l- r( T
heapMemParams.size = 0x4000;
2 {4 u$ i- p* O) r4 m8 N# N+ V- M) J; Z1 h( Z$ e: F1 Y, ~" u: `
var Memory = xdc.useModule('xdc.runtime.Memory');
( j! u8 n2 K' qMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
- }7 v! c# e; C1 J4 N) Z4 Q2 r4 R. Q6 u1 F  Z% j' O
我大约calloc  每次共计大小为5K*16bits,
# L: x/ F# G/ `而默认配置才0x4000、需要改大。
8 y5 ^  h, O! @5 z( n, U/ G
3 S# [& H) `5 O8 p/ t. G
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */0 N" h# g$ n) q/ Y9 w2 E
Program.heap = 0;# p$ x/ h) W" ^7 p- }, W
Program.argSize = 100;  /* minimum size */
: g8 D0 |% c" x, m! q' s& @5 }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-1 18:08 , Processed in 0.041692 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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