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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
- ^. W0 v- S# F- {: v8 v3 f, A- h1 N) K
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256, w  o2 C/ F3 H" T( [, m
6 G9 ^8 v( t. w; e& b- O0 y2 ~5 \
其他程序段。。。。。
3 S6 i% ]" [+ N+ r9 k1 |9 M1 V' Y
8 ~; P" E/ K; |0 J( Z# [% M  ?   free(x_d);
9 K0 j1 R5 u9 ?. T/ C$ `7 Q3 o1 g' h
使用DSP侧单独调试功能,验证动态申请没有问题,
% m- z% I/ t, C. g- p3 c! I- A+ \8 b6 W) G$ }' {3 r3 S4 R# j' e  \
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
$ y, X; h. `# e
1 k5 A% S7 [8 u
5 T; c- J' p9 Y) H
( o' A& _4 v; i

* V' M- Q) _' H" s5 I* h+ P- c
3 A& k, G! M/ e+ [; B/ `/ t. L& C( Q) ^

8 C! S' o. g8 e, i* v- V5 i
$ T6 |7 U2 J# N4 w, H: V1 g
' _8 m/ u2 h6 D2 A9 s/ k  F
' j1 _8 }) e' F/ i! f. L. a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
5 q' q5 y4 o) d4 ?+ {我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
) e7 D# a* u: [(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
" O6 b" f( m, u' J9 L" C9 l

& ~5 U0 `- p8 A7 U2 H$ D# f4 t是不是需要在DSP.CFG中进行配置# Q! p9 o, z" \( y. [# |
我现在的配置为
2 ~( ^# F; \7 i- e" g% _
, l/ X& r; M% _0 v/*
" A( R/ D7 b& L+ z7 K& ^: e  z1 w *  ======== Operating System Configuration ========
) J" x2 ~* i0 [* e */
9 M- u  V; e4 K1 H6 H" o
8 [, p2 |% A- N0 y( z$ i* X/* no rts heap */
/ E8 n/ V6 ]" S+ J) jProgram.heap = 0;# [5 A, Q0 S. b  F
Program.argSize = 100;  /* minimum size */
9 g# ?9 I  e% y. E* @4 X$ |Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
+ w6 `! o$ t$ i: ^8 ]
  m9 v1 c. |/ [/* create a default heap */
+ e; s$ N# S/ \2 q4 Z5 ?5 uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 b5 o1 S! [2 Pvar heapMemParams = new HeapMem.Params();
8 W1 `1 g% T% I1 E+ t6 [* f& P4 D4 HheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大, o6 z$ F7 O; G+ H7 M& s
2 U$ `, S) e' g- V7 Q3 Z2 e
var Memory = xdc.useModule('xdc.runtime.Memory');
' y6 ~% J& P0 `4 f+ NMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
  Q* D1 }! p# a% m
$ _. P! A: E8 Y1 [) q/* configure System module */
9 T/ w6 g; y- T: lvar SysMin = xdc.useModule('xdc.runtime.SysMin');* g( J, _1 R" c, q6 I( q/ `
SysMin.bufSize = 0x1000;3 E8 a# ]! J: i  `0 y' m# q
SysMin.flushAtExit = false;
& ?' y+ q. N5 l# E
$ x9 w6 |' X* ?8 Cvar System = xdc.useModule('xdc.runtime.System');+ s5 [0 X6 ?8 @% \: F6 m. X% O
System.SupportProxy = SysMin;
" h9 ^: b* s) i; ]# r% R$ ^& k9 B4 ]7 L3 a6 q& ^  z* ^
/* configure SysBios to use the lower half of Timer 1 */
2 m& G2 Q7 z2 ~& Svar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');% w' y4 B) k4 }
var Clock = xdc.useModule('ti.sysbios.knl.Clock');% Y! t8 d" _" c9 {
Timer.timerSettings[1].master = true;
5 {! S+ I2 u( sTimer.defaultHalf = Timer.Half_LOWER;6 n) a7 ^: m8 H
Clock.timerId = 1;8 j. l4 b# l2 J- F) q
; p# ~. n/ A) o0 L0 m. [, ~! J

! Z7 }2 t) `7 t. @7 A/*$ m" v+ a: a+ r3 ^3 Q
*  ======== Miscellaneous Configuration ========
: ~! F" I' U% ~: |$ Z */
6 h5 J; o( p6 N$ ~/ c" E  q* n$ {7 z) b8 U! Y1 u0 x5 `
/* set default diags mask */: Z- l; Y8 P6 p4 S  [/ |, `# a
var Diags = xdc.useModule('xdc.runtime.Diags');
6 S0 ?1 ~4 ]' K4 c9 o( H  x1 Gvar Defaults = xdc.useModule('xdc.runtime.Defaults');7 G7 \5 M3 G7 S' S

0 G. R% t7 |1 f6 w; N- l# mDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;1 L9 B8 `$ M% C& |' D
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;6 F& D) }2 K$ w5 X
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;- y9 q- e4 q$ }" N1 {9 s, p. d! B
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */( z3 e5 s% o' N% ~0 l
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */. [5 w1 C% {: c% ^& |2 {+ L# j6 E
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
1 Q" p! d, B% V/ qDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;/ T  H/ j8 `& D5 i  L
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;5 w) f" ~+ v' l' d" c
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
& \0 x, b! z" q1 k, Q% E; DDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
! p& z6 t! @/ ^" m) G7 V' mDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
0 F9 C3 d% k! v1 l, oDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
" ~4 y+ ~: h, O0 c& uDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;% y' s& h/ Q0 c/ V. w$ V% l0 D
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;$ b+ n! W) R! u4 ~% ?0 x# K8 f# x( J) _

% `( d0 J0 }2 ^* C/* override diags mask for selected modules */; b0 I0 A2 n9 X, V; n* I$ u4 X
xdc.useModule('xdc.runtime.Main');) q8 P& {7 K3 _1 C
Diags.setMaskMeta(2 B/ Q2 k3 S+ L% V* p
    "xdc.runtime.Main",8 J1 @' C, k. H* X) d3 S- d' G
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
; H/ E6 K  k0 w4 y! P    Diags.RUNTIME_ON
% C, [0 i  @$ d8 T# Z; A2 a, v, F);
. k7 z0 P& m% H9 G
/ y, b3 W# }$ xvar Registry = xdc.useModule('xdc.runtime.Registry');9 Z7 c3 E# e; `: _0 x4 y
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
' C# Y, o9 P& o% s: `. [Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;, q& V. |" O0 }8 S9 G! |2 v
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
5 |8 x  M# L! j# V; URegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;  p3 G$ R; v- y& ^1 f# E0 ^

- X& h0 T6 Z1 m8 g5 o' U5 y$ X  t5 R" A/* create a logger instance */
5 k- |4 h$ @$ ]var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
$ X; |8 s& m) a5 O) Lvar loggerBufP = new LoggerBuf.Params();  o) C4 l! g- p/ e% x0 h* B
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
1 D; s; `3 h7 qloggerBufP.bufType = LoggerBuf.BufType_FIXED;! [# l8 j, ]* M& Z1 |

3 m. ^9 B9 Q; G* C2 Dvar appLogger = LoggerBuf.create(loggerBufP);6 h5 ^0 h' r' j
appLogger.instance.name = "AppLog_Core1";
4 E& i+ a, a3 I: W/ e. I- ~' ^Defaults.common$.logger = appLogger;1 U9 ^% u1 |" S9 z
Memory.defaultHeapSize = 0x8192;    ! p6 A# ^: V7 p) h9 |- B
Idle.idleFxns[0] = "&LEDStatus";* Z$ c  `/ z$ Y4 K( m
Cache.initSize.l2Size = Cache.L2Size_32K;
; Y& |  [8 S; K  q9 L+ W, Z& u. r" [4 B, ~0 u/ 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 */
  ?  a6 z1 V4 \1 ]var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& e+ n. S6 m, K. V# |1 `var heapMemParams = new HeapMem.Params();
) Q3 y0 }) b  B  y- G" OheapMemParams.size = 0x4000;7 O7 O+ I7 K7 E4 n5 |
5 ~2 [, Z' F8 Z# P5 X3 I8 @
var Memory = xdc.useModule('xdc.runtime.Memory');
1 D$ i3 N+ D  [6 x# ~5 aMemory.defaultHeapInstance = HeapMem.create(heapMemParams);% ]% G) W, M3 l3 \4 J

% r( b  c; N6 L! G我大约calloc  每次共计大小为5K*16bits,( ?6 `% C6 U2 d
而默认配置才0x4000、需要改大。7 L2 e6 {2 x+ Q) }8 V! x
: ~% E, m$ J5 Y: d' R$ G4 D) ^
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */8 y* q1 F! e' s0 }9 u( Y( e0 b: ?
Program.heap = 0;0 k: P2 \! D% v" j0 P, u
Program.argSize = 100;  /* minimum size */# p9 N  b8 }( i3 s
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-25 21:04 , Processed in 0.042780 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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