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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
( V3 {2 B$ q& q1 h( L+ k& \/ L' ^% r: W% k
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256) T1 b8 z" O/ ^! ^1 x) K

9 D, i6 Q, V8 A6 \. i! X6 i6 o6 E其他程序段。。。。。) D' K& K2 b7 {( a2 D' ~4 i
7 T* N' Z4 s/ A" }/ G7 c' J
   free(x_d);- C! O, p  j! }5 s3 V5 K- g9 I

' C$ i2 [( G; K. C# }+ J3 ]* X使用DSP侧单独调试功能,验证动态申请没有问题,
* r( f' t6 ]! V
/ ^# o2 U. `  y0 |但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
. \: l  b3 n" i" v- u& p. s3 V
! J! w% N1 R" O, `0 O

, x6 s" w" Y$ B2 }, n' y- u/ Z7 \- P2 E; H; l; s1 |$ S; d

, E' d* T; X( b( R( N$ k* l2 E. r8 d+ _/ U) F! k& L% w9 L
$ S$ V" L1 o0 T( s6 o. Q* w

* D8 W( A+ J, P' T: i6 e9 u1 v1 `7 v( D

) I' t  m8 ~* m& y& o9 g! C! b) q  J* `# Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
* Z' a0 @8 p# H1 F# s' [' g2 [2 s8 H我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下5 Y0 K) E! E% p& H
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
# ^1 m/ d: h- W. f$ a* D) M
5 y& W9 w6 R- `. H- M1 K
是不是需要在DSP.CFG中进行配置  h; w/ v! ?& f$ z
我现在的配置为
7 v( J9 L1 c0 ^$ G; u
; R' D6 y% A2 A* L' S/*& U. J& Q. |3 \5 _, Y) t  @2 _
*  ======== Operating System Configuration ========1 Y+ h; N" K9 V6 y. D
*/
& Y7 N. n% d# ]8 E
0 y2 s$ P  R% l( b, D/* no rts heap */5 f3 X* X7 ?/ c) |: m
Program.heap = 0;! L! \8 M  T5 ^* I
Program.argSize = 100;  /* minimum size */: W7 @9 x9 D3 n6 m/ b/ c8 y/ y
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' q2 |) Y7 m: |' N' {
0 H5 o3 v* r5 e. s$ u' X, _8 A
/* create a default heap */$ q7 W7 V: R# m/ |# I. Y! A4 ~
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 W  m. R" M8 V- z4 j% s+ Ivar heapMemParams = new HeapMem.Params();
6 ~! o1 k: r9 J' }( M8 G% ^" aheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大5 W; a. z+ O2 x; R0 j6 M! F
  G6 _0 S, \- A: F6 F- |
var Memory = xdc.useModule('xdc.runtime.Memory');
/ P$ N; ]  r: {7 L* D% O. ^! aMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
- _6 J7 b6 Z7 s. k/ p( Q7 P3 i! [7 S6 P% V4 n8 @. C
/* configure System module */
5 x. ^* c# L2 t, b" d: Evar SysMin = xdc.useModule('xdc.runtime.SysMin');  f+ R6 S2 U. Z
SysMin.bufSize = 0x1000;
: e' f0 g( ?! M1 l0 i5 `SysMin.flushAtExit = false;& `- N3 q2 z& L% H" d" ?

0 d4 T" W; E# s/ S6 Ovar System = xdc.useModule('xdc.runtime.System');
9 A  D! V: E. C, |3 ESystem.SupportProxy = SysMin;! q+ J" b7 e/ h- K
* S. r6 r5 [3 ]6 _
/* configure SysBios to use the lower half of Timer 1 */& Y1 ?" [; v& W1 N+ E& C" W
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
$ t6 {. G, x6 W) B2 Lvar Clock = xdc.useModule('ti.sysbios.knl.Clock');. M) o7 T- T5 I! j5 r) M
Timer.timerSettings[1].master = true;: E7 k  T$ k6 }3 U$ Z/ T
Timer.defaultHalf = Timer.Half_LOWER;; i* p( ?" E7 x0 m% P% ]
Clock.timerId = 1;/ j' }3 j# s+ J$ H8 D5 _% w

9 C8 G# }# @6 p' c( f7 N; U8 `- P! A' ?3 B& O. @2 M- u
/*2 y% o9 t( }4 Y7 A
*  ======== Miscellaneous Configuration ========
, U! r) S! W5 V2 Z8 S% m */
' t  T1 B# P- E4 q7 E6 `0 f7 v+ l. j. p) b3 M3 S) h4 f# v
/* set default diags mask */6 Y! _# \1 i9 q' _
var Diags = xdc.useModule('xdc.runtime.Diags');
  J6 ]% @- X% u8 ~: Q9 }/ Hvar Defaults = xdc.useModule('xdc.runtime.Defaults');
+ j, {' F5 Q/ B
( \1 r3 Q/ a' A6 E: I. \( X5 S( K+ _Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;: j! d. _' ~( i) |- F
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;6 o( f, C- @  S
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
7 P& V  S" o4 g7 ~- pDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
: _& z. E9 ]% J! V- h% WDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 }$ K, V( E2 S1 N. m; i; DDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;& l* `) _2 c$ }. ?; D6 @
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;5 H0 c; f, g0 ]  k. d0 F
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;, c& U% g/ _5 k+ W4 r
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
3 O5 G" q/ e4 D( c; HDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' K. f- }: ]2 _/ C: s, f8 _. [1 GDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;' ~# r0 q2 G2 a( _/ Y/ E5 \
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;4 n6 ?# E" P4 R( J, J
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;/ \5 K, s* ?& `
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% f3 w  l0 Y) O1 ~9 P7 T+ P
- @8 @+ V3 N- x7 Q
/* override diags mask for selected modules */9 Z9 ?( C4 [5 o* v1 }3 ?5 O+ S+ `
xdc.useModule('xdc.runtime.Main');
. r3 u( G* a8 X7 j$ `5 }Diags.setMaskMeta(# D2 o/ g- k6 Y! D; {
    "xdc.runtime.Main",
3 Z" `  ?  A3 D0 ^) w    Diags.ENTRY | Diags.EXIT | Diags.INFO,2 s+ F( \4 z+ ?- u6 R" A
    Diags.RUNTIME_ON
- u9 M7 U  @- U4 R9 L8 W0 h);! U! r& j- l1 y3 [# ~

9 g# k9 V8 I3 X4 bvar Registry = xdc.useModule('xdc.runtime.Registry');, c! p& l* O; C+ V* x8 C: C
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;( m( Z1 ]1 s; X* a7 U
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 l5 F4 G/ v, J* `$ J  L( ]Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;7 ?# O/ A! G3 m1 H6 d
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
7 {% f4 E1 D1 u+ |
$ d2 `: _1 L' V/* create a logger instance */" X1 e% Z  {5 s/ @) E  @
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
6 @4 s. \. H9 L1 |4 u; D! S& B& |var loggerBufP = new LoggerBuf.Params();
# }" b9 ]" B( i) {3 O  f- q2 K) QloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */6 j, |9 b* j+ |# c4 U  A8 O
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
* V  W2 D( E4 n
; k4 A# k3 h# n# L) Gvar appLogger = LoggerBuf.create(loggerBufP);+ @8 I" F0 [! Y: F! E
appLogger.instance.name = "AppLog_Core1";
  p  ^* b4 {( ^0 N( p5 u) c; A% s( uDefaults.common$.logger = appLogger;
) A8 X( B( W% Z  P* ]Memory.defaultHeapSize = 0x8192;   
6 S5 m& p( F3 N  x1 EIdle.idleFxns[0] = "&LEDStatus";
* k( O- E8 G, ?' @8 s1 K# z3 _Cache.initSize.l2Size = Cache.L2Size_32K;
+ m2 t" T' h7 U/ X" X1 u" a4 \- `/ s+ T
回复 支持 反对

使用道具 举报

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 */3 V% G8 L7 h$ ~+ j- I" r
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; q) A0 u* r" K6 a7 k" vvar heapMemParams = new HeapMem.Params();
4 y7 w/ V) U6 g* q: ^heapMemParams.size = 0x4000;
. U% Z  ?3 d/ U( G8 O/ [5 _" [& Q3 Y. ^9 T
var Memory = xdc.useModule('xdc.runtime.Memory');7 _! Z, v% o( s( Y1 E( r
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
% `/ _3 T4 [7 C2 z! p# }
" A" L# @+ R  q3 p我大约calloc  每次共计大小为5K*16bits,9 _5 T" O+ _6 V1 W# ]) o
而默认配置才0x4000、需要改大。
( }# m) I+ y* Q+ D- G
, u' a/ F- I; j# L1 Y9 _% X; ?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */2 M% z: J- N+ F) H* y+ j
Program.heap = 0;
7 m  w8 W( [1 ~0 f2 XProgram.argSize = 100;  /* minimum size */
# V! Z7 A# l. A6 h. s0 c! Z. G5 @Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-3 05:18 , Processed in 0.049771 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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