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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构0 L/ Z- u8 I6 Q7 W* y

; @5 f* p: l; K2 I5 B    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
5 R4 F7 m& w) ]& u- C# M- Q2 H; l( f
其他程序段。。。。。4 a2 S0 j, d6 R! x8 k

, |7 A4 E0 _6 y* y( H6 _* n   free(x_d);
9 H* S. |. F( T* H2 e, F; `" O, @
使用DSP侧单独调试功能,验证动态申请没有问题,: j6 K8 R- r7 r) _$ M6 q1 s' m
0 W; F7 q" x4 R) a5 g8 c
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。5 W9 o' i. A: U5 `

7 s+ |0 C1 a. U# T  h6 l* j% D2 N
8 {4 I6 ~* O, k" Y
2 L# m: {3 C1 W$ o) \2 b

7 m# u! n( w% N7 Q. I7 K! l" t0 m4 \" {* F! h! g9 i$ z. w7 Z$ v
; a. J- A1 r( P3 H( A

0 v2 D5 i2 S7 q# T+ f/ t' u4 G- N9 j
' B4 [0 w  F/ y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明  q/ }- {, B" g* N
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
8 U, D8 v9 L4 h: ~(不过疑惑的是,为何单独DSP仿真就没有问题呢?)9 v4 a. C0 r, D
5 _2 U' V1 S5 g5 q* i- q
是不是需要在DSP.CFG中进行配置! X/ W4 _( ~) C$ ^: J% t6 k
我现在的配置为
1 H3 Q3 Z8 F, s8 D. T, Z8 @' j
; v8 T. O5 b* w/*6 ?* g8 a7 a1 U% ^9 K
*  ======== Operating System Configuration ========
7 v5 h( L! U& v4 \! E* V: T */
- P0 z) B3 l# b2 \" f
4 K4 P' I8 w3 g' h' e' I/* no rts heap */5 U3 F. y% n* n3 U9 V- q
Program.heap = 0;5 e; {/ G3 m; N; N( e) o
Program.argSize = 100;  /* minimum size */( U5 D& Q7 Z- p* g- t- ^: d9 \( r, Z
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大2 ]7 C4 f: @; K  r5 g
0 T, X2 a8 E: I% V. O0 Y( e
/* create a default heap */: Z/ M- ]1 B6 J( k
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ Z1 t* @5 D" o5 r8 _var heapMemParams = new HeapMem.Params();
# T* g; X) c# Z, fheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
2 f( q0 \3 F* y( T9 S
6 j* ~9 |0 D6 v, r3 o
var Memory = xdc.useModule('xdc.runtime.Memory');; I3 K# \, k6 k9 b
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);. j" F+ e4 b7 p: J

6 i' @; s0 m& ^' K5 ^/* configure System module */
0 _6 v) @" r1 w! e/ F6 j( R7 rvar SysMin = xdc.useModule('xdc.runtime.SysMin');7 n' j" H9 P% y
SysMin.bufSize = 0x1000;
5 F7 q* }2 m  s1 L5 i. L  ySysMin.flushAtExit = false;
+ D% d0 E. j* O% }! Y  M4 d8 \( N! M4 y) Y8 T
var System = xdc.useModule('xdc.runtime.System');
; d+ ]+ K& `( @; s7 dSystem.SupportProxy = SysMin;# @. \& D' e# ?6 M
2 `( B4 f4 ~: I
/* configure SysBios to use the lower half of Timer 1 */
* ^& k* D5 h# ]( B" S+ K. Qvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
' J. I1 l7 `* b" ?# J' s+ qvar Clock = xdc.useModule('ti.sysbios.knl.Clock');/ W  h4 U/ |! N# ?& z4 Y
Timer.timerSettings[1].master = true;
( D2 \4 X: k0 XTimer.defaultHalf = Timer.Half_LOWER;
+ Z3 g8 P# ?* @2 j* L) y5 b7 ~, z6 O/ EClock.timerId = 1;; T2 A- O6 Y$ B! M$ ^. ]8 w

; N1 |7 y# y$ Z. v* S$ w1 ~
- ^8 P8 f# y. }4 \( `( w/*6 C1 Q" l' P5 f
*  ======== Miscellaneous Configuration ========& [% w) v, u0 z0 P9 i5 C) |6 ^9 r
*/
6 A3 G  }6 T( Y8 Z& C8 ?% D+ g0 w! d; z- [7 y, L
/* set default diags mask */6 }# N2 d4 N+ g3 {& U
var Diags = xdc.useModule('xdc.runtime.Diags');
2 w5 h6 M* X( N! [* C) Gvar Defaults = xdc.useModule('xdc.runtime.Defaults');* t' v8 J0 X9 [0 C) J  h

3 [( E0 Z. J% S' Z, M. zDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
  ?" p5 Y' Y& K4 V; nDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
) i4 _8 h. i; V. i# k4 ~7 L8 uDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
% H- \- t8 N" O1 F. r) GDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
1 k' {0 _: Y' k$ t4 p& ~Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
; L1 ?+ V& \- M8 Y7 }/ fDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
" q# p8 U. |: |, s7 XDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
2 Y+ |4 ~2 G# y+ W* g  uDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;2 Z1 A9 D; l% n) e1 J* J* H
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;% h( i" B8 k5 j: j# c
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
. \% S' T1 O5 P1 b' \Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
0 i3 d1 ], f4 L9 s- SDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
( I0 A1 a$ f+ d8 |5 z* R2 @8 B  w9 U! LDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;9 Q' ]( Y3 t6 c' x
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;5 [" k. H5 N8 D5 L2 \, n1 I( c: Z

: R( u+ ~8 q2 R% N. u/* override diags mask for selected modules */
/ ~# i/ ]* l2 q! @" R/ Vxdc.useModule('xdc.runtime.Main');
9 D2 U. i# F. s& \& }( WDiags.setMaskMeta(
2 ~6 }7 `9 n5 [: |* n    "xdc.runtime.Main",
, r! D( C: ~- |7 A% {    Diags.ENTRY | Diags.EXIT | Diags.INFO,4 J/ m$ \2 D' l, b+ S0 P  W& L
    Diags.RUNTIME_ON: j2 K7 |0 t: h2 s& V
);
) u: J/ x( c$ y0 ~" N5 n" Q. |) D% q. F! r$ }# a. L
var Registry = xdc.useModule('xdc.runtime.Registry');# l9 o  {) @# a
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;: f% s" ^, b4 [9 r+ a5 q) k
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;; z- f- H- u- Y% F5 V* Z1 h$ j
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: W/ d6 y1 w/ ]+ cRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;# n# g; [# r" {6 e- ]
- |* N' t% A" p
/* create a logger instance */
0 b& ?# Y4 _0 `var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');4 o  a: t6 d, b
var loggerBufP = new LoggerBuf.Params();
( y5 f/ G/ W* z2 N# b9 \8 TloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */1 U1 u/ U, _2 k$ G9 ~, ?
loggerBufP.bufType = LoggerBuf.BufType_FIXED;5 C: d: c! h/ R" o8 w8 y: {" S0 @
$ [' Q3 _( z% P) h, q
var appLogger = LoggerBuf.create(loggerBufP);. p8 I' C  {0 Q# Y  d
appLogger.instance.name = "AppLog_Core1";
% {) {1 U  J) ]2 }8 p! h; d4 _Defaults.common$.logger = appLogger;
" ]/ ^  m  l! {8 wMemory.defaultHeapSize = 0x8192;   
4 \# ]0 p/ N. PIdle.idleFxns[0] = "&LEDStatus";" `8 h: ]. J) r3 G( R1 Y" M- W. J9 d
Cache.initSize.l2Size = Cache.L2Size_32K;
; i. x+ \3 \- v
; Q# h, D6 t! k. z3 p7 w
回复 支持 反对

使用道具 举报

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, S6 g2 E6 V8 Zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" d6 U" w' g! [' V2 ]; Dvar heapMemParams = new HeapMem.Params();
* m) Q, T5 R4 ?, p( R3 {$ @heapMemParams.size = 0x4000;
5 q' j2 {% U- S. Q% Z1 B4 d" @: H' F0 i& w) o
var Memory = xdc.useModule('xdc.runtime.Memory');
7 q, y. s  s2 }Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& I: w) R+ i0 a4 O7 @
% X% P  w3 }) w" a$ Z/ l" k6 \0 |
我大约calloc  每次共计大小为5K*16bits,% h9 M1 N1 y  h3 Y1 i4 X4 e8 \
而默认配置才0x4000、需要改大。) |  t9 N# I+ K1 ^

# C  b, b2 @) e
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */. u+ S4 O; \+ y3 U/ X
Program.heap = 0;
8 A% H# l8 E8 x% P; `Program.argSize = 100;  /* minimum size */
8 E8 b, A' O3 z+ iProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-20 00:52 , Processed in 0.047890 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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