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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构3 G) a( ]: k" C+ ~
9 C$ y, C$ _/ `& y; M' T
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
3 [5 G# Q+ ?3 |; E
4 e: K) g0 E# H5 p6 ?& ~2 n其他程序段。。。。。
. \! i, ~9 `2 o% Z% r
# _$ A0 N# x, V; C" v8 C   free(x_d);: e# ~2 ]( z1 ^) c$ n4 o2 _2 O
7 B8 }- Z% F# q! _4 K. n) h
使用DSP侧单独调试功能,验证动态申请没有问题,* {% L7 E$ @* }' f

( @! c  r  o4 W9 S% R0 {/ C但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。5 i2 h, m  E5 |

  {6 i7 |2 r! `$ i
  A* l+ ^- _) E, N& j# @1 J& ^; Q- B: M5 I' T, N

/ \9 z% M) b) N* i+ h% V; H+ ?* t# p: |) p# @, y: N
9 \% l, ]* J/ F6 M5 X! f: _3 d

8 I8 y8 k6 c! o, Z
0 s$ r7 @: z: N' _" z- F/ g9 |$ I1 F% \6 `# l" z. ]
7 t- k% X" l$ j) z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
! E9 h0 A* N; f5 ^1 J我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
. F& ]% B2 n3 a* g- _6 d(不过疑惑的是,为何单独DSP仿真就没有问题呢?)& h! |, Y" B- f: h
. b. V. _! Z' Y" F
是不是需要在DSP.CFG中进行配置
& e5 [2 J. B' L$ d' h) y: P; k我现在的配置为1 }7 E, T# [+ {3 k: l* a4 Y

5 e7 g( r* A8 P3 T/*
( [" f9 |/ w& @! P& f) t *  ======== Operating System Configuration ========' {; b& z4 Y* w+ {- [" B( p
*/
4 b' K& S( E) L3 s3 C' J! t; s- G
/* no rts heap */
' F  F1 x6 T* u) V2 L" t+ V# p8 KProgram.heap = 0;
9 r% s6 m2 M# x( T% e  p7 r) \Program.argSize = 100;  /* minimum size */2 j5 P3 J( k& p+ ^
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
5 [8 a& Y0 p/ X6 K7 D3 o; {  z+ D8 m! x% y, P# \
/* create a default heap */
0 W1 S# n0 v7 V' c( {7 q" C, \. yvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 ^! }, T& q8 Z" V$ r+ P5 Gvar heapMemParams = new HeapMem.Params();; Z: E! e1 O( \- T2 E) _8 P
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
4 _+ w. G. ?, {2 t& ]! E1 f6 Y/ @' a
var Memory = xdc.useModule('xdc.runtime.Memory');7 T' C0 i! \) a9 q$ z; N8 k
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);! o/ h: F, l! g

8 B% b& s7 Y$ y/* configure System module */
! _0 z8 e& L: I9 c, jvar SysMin = xdc.useModule('xdc.runtime.SysMin');
. Z' F, ^5 ?% i& w, l0 `' }/ e7 fSysMin.bufSize = 0x1000;
+ m6 p* m. h+ M  w) S, JSysMin.flushAtExit = false;
. P" W) B  y4 k5 m" K. S3 h5 d9 p& X" W  ?; C
var System = xdc.useModule('xdc.runtime.System');$ |4 G( C1 f+ f9 T
System.SupportProxy = SysMin;
/ f/ ?& v$ {. V4 y9 x
% l2 R# k6 r5 L, T/* configure SysBios to use the lower half of Timer 1 */7 I3 O( @# i# a% n" r
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
1 {4 Z. S% W% |. V) z5 q+ _0 Tvar Clock = xdc.useModule('ti.sysbios.knl.Clock');0 f. r: ~1 y/ _+ f1 z- v
Timer.timerSettings[1].master = true;
( o, ^% E' k& D* nTimer.defaultHalf = Timer.Half_LOWER;
8 j, d" b; L- V+ D3 ~2 j3 bClock.timerId = 1;
" e. i& |1 @) |' Q+ z
# V) Q0 K0 q% G$ C4 N3 |
- `/ C* e" R& p' V: R/ U/*' f# P( `/ S7 J" E5 q& e
*  ======== Miscellaneous Configuration ========) C3 B3 h8 [3 `! [: [" n
*/
' k2 {$ K1 K1 |! w) u0 @5 D* B$ n: C6 ^
/* set default diags mask */
$ V$ `& J6 j! B% ~2 |var Diags = xdc.useModule('xdc.runtime.Diags');
$ p# y  m# s- P4 Rvar Defaults = xdc.useModule('xdc.runtime.Defaults');
3 J& {2 e. y/ q% R0 o4 O: P# B4 A" P
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;# B% K1 L" R/ U5 t; c9 P
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;6 U7 x9 G$ z" `9 i# w1 @
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;' V9 [) e) @, Q3 p2 ^
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */9 m2 w! X% \' T& ^
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
/ s) U5 F9 r' uDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
+ Y0 R' i9 X1 ~Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;& Q( n8 c5 q8 e! Z6 ?: |5 d6 Q$ h) o1 C
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
1 s3 {# s9 B7 c* Y! [0 {4 \Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;5 I# }5 ?# X; w# q; C# z
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;# z, C9 W* n& H: y
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;3 {  d" G6 O. u4 Y3 X
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
' K7 d3 N; W8 d1 O2 \) o3 Q. bDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;& t5 y5 t# U/ s  Z* J
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;# q5 f( J8 l. [& q
3 G; k9 w, v! {$ O, H1 @
/* override diags mask for selected modules */
" a- D. W6 a9 J' p1 Exdc.useModule('xdc.runtime.Main');
$ ~0 l7 c. p; Q9 V/ N. y% ADiags.setMaskMeta(; m9 i  z9 ?& x$ G; h5 w) l, T9 T
    "xdc.runtime.Main",
6 M8 `# e! A1 v& b* ]' E3 E$ `: O* p- T    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 H( G/ M# e/ C' u8 {    Diags.RUNTIME_ON
) M. u; ~9 r& Q7 D. r);
7 x% D7 R6 I3 j* s9 q
0 q2 [0 E4 C" A3 _4 Zvar Registry = xdc.useModule('xdc.runtime.Registry');7 |# j5 {/ t& I
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ }' {- i" \# Z: {* T
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 u/ `( T; o, h. A% c8 G0 U9 ?Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
0 J- E1 n$ G$ a- v* b  W  z# J, Q. qRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
8 W( S6 B1 L( p" R& p4 p" l  I
- c8 K& e2 w( t/* create a logger instance */
- m0 ]+ `4 f' A3 s9 Qvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');$ v, t# M( U2 l% k9 @3 \" r5 G4 n  s
var loggerBufP = new LoggerBuf.Params();5 C3 x2 w3 J2 ~0 ~( K* `2 X- ~* p  r
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */# I  R6 J1 t7 H# k& c* i. Y5 K
loggerBufP.bufType = LoggerBuf.BufType_FIXED;! n9 M! @  ]( \+ e+ y

% v2 X1 C6 o* avar appLogger = LoggerBuf.create(loggerBufP);' g+ p. ^, ~5 x) O- M
appLogger.instance.name = "AppLog_Core1";
; ]. V. b, ^* iDefaults.common$.logger = appLogger;" [) d$ j+ g  ]1 x1 H
Memory.defaultHeapSize = 0x8192;    : [0 s2 K: W( E& f! N
Idle.idleFxns[0] = "&LEDStatus";" y+ |  Z$ p1 ~) R  A
Cache.initSize.l2Size = Cache.L2Size_32K;5 B8 [  f$ L$ w: ?6 p" Q) e
9 ?9 K' H" e  _4 m4 P$ s/ Y
回复 支持 反对

使用道具 举报

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 */# l; ]8 a4 `4 {( p$ x6 j
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ q  y  F2 d, {var heapMemParams = new HeapMem.Params();
7 I0 [, J( F  X: \; v& PheapMemParams.size = 0x4000;3 J8 V% G1 e6 u7 @1 B

' |5 H9 ]* X  r. Tvar Memory = xdc.useModule('xdc.runtime.Memory');
: T/ s9 u8 P0 B4 R/ wMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ {( V$ [7 N* c7 I+ R- Y* ^6 J$ O  X# f+ D& e3 s( J
我大约calloc  每次共计大小为5K*16bits,
3 M7 B2 u8 l  u而默认配置才0x4000、需要改大。
, W/ @# q7 g& U3 f& u6 }7 o9 ]' `' V4 e* N4 ~
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */* A) l* W/ X* F- `2 S. w2 U
Program.heap = 0;3 D6 _0 F2 y, l( z9 Q
Program.argSize = 100;  /* minimum size *// ~5 S9 V* P8 |4 z- I7 m
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-10 01:49 , Processed in 0.043153 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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