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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
7 \' B3 r7 |! a5 a2 j; a" r; b. }& }) G
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
& X0 E- c8 \3 c# U: c- F9 J  I0 S9 h* n6 {1 B' n! Z& w0 }" `# G
其他程序段。。。。。
& J7 ~) Q: O2 ~
% M1 H2 H3 N( D0 l3 Y   free(x_d);
  h2 g: j/ o. K3 d& }# ^  x' z7 b) B; B9 R3 |" n# j+ c
使用DSP侧单独调试功能,验证动态申请没有问题,+ A; `/ d9 S" P# c$ a+ M

# d0 r6 Q  T3 [* a7 p但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
; y' t8 J; }3 w4 ]) n/ E
: [' o% T4 u+ w: t2 S  H
( i- H1 g! H+ q: h' J. p

; Z4 j9 |0 h- ]8 u3 g5 v
* |, _) S0 F1 [5 `$ n, c+ G+ {6 P, S0 ?% Z
+ ^/ I/ U" o- f0 I
' G9 C4 r  ~7 I, y* a
) k2 P; R' C/ f
5 {" O/ }. v( ?( N5 P7 K

: i- B4 M- \6 G4 s) i
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明% B, H, v1 A+ `1 L4 N9 H
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下) _/ W6 v6 i7 c: B
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
" K0 N7 Q* Q. E: w+ n" ^
+ r; N" ]/ P. U" y, S1 O
是不是需要在DSP.CFG中进行配置
! z$ g. Z# o0 U我现在的配置为
( D6 Y& K6 C4 s) m; u; S' L) o" S. }* r$ V$ v
/*
& t1 c) X  X8 M *  ======== Operating System Configuration ========: u" s2 Y5 g" N& G$ v" e, {0 `
*/
  u, X! h, Y$ o
- l/ a( x4 {2 ]+ A& c/* no rts heap */
: V8 Y6 n" I0 L' KProgram.heap = 0;" g1 \$ g( i! L0 D9 P
Program.argSize = 100;  /* minimum size */
( ~, X5 x- s" |! M/ i) UProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大) i; W. s+ y# Z- |6 s
0 E8 q& |  @1 O& ~; w- Q
/* create a default heap */
7 o( l/ j" B9 b% t1 N; q" P2 I1 evar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 ?: _4 M3 h4 g) j# K2 s/ \$ P- o
var heapMemParams = new HeapMem.Params();, |3 E+ j6 a  Z: g; Q. j
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
5 N: |$ S6 t( ~: o% m  ~, P( ~6 H3 O1 ]! a
var Memory = xdc.useModule('xdc.runtime.Memory');; C# H: Z: u. g* c1 q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);- P3 o( f/ h4 d' ~) s2 h

, N- E+ g1 ^: l. U4 B+ a1 X5 b/* configure System module */
" ]6 x7 l, u3 R  }0 u  E) k+ xvar SysMin = xdc.useModule('xdc.runtime.SysMin');1 j4 B9 w9 s/ z" X; |- ]/ ~
SysMin.bufSize = 0x1000;. P  o1 Z, \' F2 R0 Y& \2 K! f
SysMin.flushAtExit = false;
" W- v7 _, G! ~; t/ T0 c6 V# b9 W) J6 `2 C# c* b3 E& A. ~! H
var System = xdc.useModule('xdc.runtime.System');
) \3 }# S1 [" XSystem.SupportProxy = SysMin;
) n& K: Q; F: g8 n# ?. S
! R! y7 {3 V5 d. Q- O3 z/* configure SysBios to use the lower half of Timer 1 */
& T  [, T) ^( ^var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
* M% k" m) Q8 |2 o" H& g$ `- R. kvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
" i1 g& d! C  HTimer.timerSettings[1].master = true;
2 k! l1 ]# U4 Q: Q& UTimer.defaultHalf = Timer.Half_LOWER;
6 L7 g! D' p& s- k7 c% v9 E8 w) }Clock.timerId = 1;* l6 d4 |9 V3 S, G9 U9 T# C
" z3 k( U1 j/ K0 n

' c- [5 B' E- _3 V  H' t/*) M. Z) T3 ?' G
*  ======== Miscellaneous Configuration ========& k( t# e' I7 p8 D1 u/ @" w$ X7 h# x0 y
*/
5 H" [/ Q2 g: ]9 b1 y0 B4 B% ~6 O5 V3 ]1 r1 H4 @+ h
/* set default diags mask */
8 F. U# Z* r) Fvar Diags = xdc.useModule('xdc.runtime.Diags');
+ O4 ]9 U! g. S4 t. Zvar Defaults = xdc.useModule('xdc.runtime.Defaults');* H+ u8 O* N4 C3 ?1 ^1 w& Q
: l, y; N5 @# k
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
6 H4 L- q7 `( hDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
- A/ [5 ?# T5 Z/ VDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;% ^1 u1 ]. b: W
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */6 y( F. n0 K" ?1 Y' K( A
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */2 t$ G7 k" x  ~' w3 i& r
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; d8 [7 n1 M* k7 x2 T* I# sDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;9 y# T( y* d  k& @7 {
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
1 ^" r) M) B+ [/ i9 q2 `: R1 qDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
$ a8 u0 u) d% P3 c) S, RDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;+ x. s7 e) {7 z; G
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
; N6 f' Z, P  s" p7 jDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;$ F; Y& t7 X7 h; L2 r
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  ]4 X0 |) O) K5 N& _  I
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
: [7 V/ \# G7 a) b
, s+ a$ k( t2 H/ C/* override diags mask for selected modules */5 F( {( O7 r* C+ b4 j
xdc.useModule('xdc.runtime.Main');; _6 y7 C, e: P9 {0 R& R
Diags.setMaskMeta(# ~, l  `0 m1 W* v/ R
    "xdc.runtime.Main",; t, Z* m0 z! F% H! u
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ i' b$ Y& [; o    Diags.RUNTIME_ON
& ~8 T7 O0 P+ u8 Q# U1 @);. b1 p9 \% b8 [0 f: @
+ q2 s4 @% W3 E, D6 D( F  c: P( D% C0 y7 t
var Registry = xdc.useModule('xdc.runtime.Registry');
& C$ c5 w3 I4 C/ aRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;. R' f& y& F6 i% v% b
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;: D9 F2 e! x( L5 [* q, q
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;  c" i: a0 w. N9 }) @+ ~2 Y
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;6 y) e* r( a3 }9 s
4 r% e3 g3 ~# Y+ I
/* create a logger instance */, ]) W, @' k, o/ F0 f
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');" P5 p: l9 R2 n/ ]* |
var loggerBufP = new LoggerBuf.Params();
4 e. f: _; f% D. W3 N+ I3 hloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
' d8 g. u% i# `! H2 DloggerBufP.bufType = LoggerBuf.BufType_FIXED;, X' R' {- X* @6 p
( r$ E4 O+ P5 S9 N
var appLogger = LoggerBuf.create(loggerBufP);
! g% e3 A! B  a' Y  ?! rappLogger.instance.name = "AppLog_Core1";
, z8 a7 P$ v' Q6 n3 H0 ?+ d% \Defaults.common$.logger = appLogger;
2 y9 i' o, ?8 F+ F6 AMemory.defaultHeapSize = 0x8192;    / `, I* a, p, t# Z
Idle.idleFxns[0] = "&LEDStatus";+ Y9 y5 T% D5 ]; w4 O
Cache.initSize.l2Size = Cache.L2Size_32K;9 m" s1 U" e; s' p
0 F- A6 x' \+ z* [. I
回复 支持 反对

使用道具 举报

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 */* u  E: E' N4 P  I/ Q4 F$ B
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 Y( h& v- Y( n$ P* h4 Y
var heapMemParams = new HeapMem.Params();
7 p4 Y5 P4 C9 V  [* B" DheapMemParams.size = 0x4000;
( j' C9 s6 l& R0 k1 d) O3 v7 v( V# t. q) R$ d0 z% w# f0 a
var Memory = xdc.useModule('xdc.runtime.Memory');" m1 k8 q1 ~5 G" O
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);4 k* z$ a9 n% \
2 a3 @+ u6 n) \8 m" m
我大约calloc  每次共计大小为5K*16bits,
, P7 W* e* \. d而默认配置才0x4000、需要改大。
2 J! o: T, R1 S; j
) f3 h; O% c8 @7 R; g* P2 b
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
5 x! f  d$ ]7 S/ GProgram.heap = 0;
( `. W6 K2 ]3 B; eProgram.argSize = 100;  /* minimum size */) a' v5 x. y" p+ U# t' d
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-31 21:31 , Processed in 0.041700 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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