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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

* }# l+ d$ _. F    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256) T/ ^' H1 @* z( f4 y" {

; S8 f  {% F0 e! E其他程序段。。。。。3 Q, q2 ?5 o/ {- \/ Y. S
/ ^- H& J" d5 J: ?* ?- y: |; o- ~
   free(x_d);$ z. {- p7 e& E1 s, o) k2 _, C
. [, N. j" }9 M. m% \4 P4 ]/ |  T
使用DSP侧单独调试功能,验证动态申请没有问题,# o1 n/ n7 ~& T3 a2 J

, Q+ b) |& M9 `' B但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
5 q0 o; i: h! Z! a
% I( v6 R, d/ u) Z$ w: f# e' l/ S. J

8 ~: j9 [1 t5 h) G# ]
& ]$ t$ `/ [3 E" D- S# r2 d/ R, ?. j* o0 Z$ F3 @

8 h3 |3 Z9 V$ A% C7 b& ~$ B0 S# s/ j
5 d* J+ l3 N. ~7 J+ u$ A' z3 J6 p8 a# ]

0 V  J, @, U9 Y' Q) V
  b$ U& J* w5 Y, D1 l3 T; }" o* G  ?  n9 s4 ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明4 l# ^+ E6 _# D. \
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
3 K6 Z; T9 d$ t$ x! ^(不过疑惑的是,为何单独DSP仿真就没有问题呢?)3 f- m$ N1 K6 H  a& t% R1 h. T) z

& g1 h9 F/ w/ @) T' ~  X' D- L是不是需要在DSP.CFG中进行配置
6 n$ e* J! e. Z0 T0 O1 F  t  R我现在的配置为+ b3 F1 V6 C. Z* c* i1 S
( n' @# n! Q1 ]5 }) Y
/*: m* Q! G2 O, y
*  ======== Operating System Configuration ========
& ]" C* r# F. y( ^ */* `( e, s  f" H

) i- |: k  m" t$ V- j+ Z" _( p8 w/* no rts heap */
3 l& L; E2 C3 Q7 H7 a6 mProgram.heap = 0;
* }- S2 h; }3 Z6 C4 N  _Program.argSize = 100;  /* minimum size */
' m: ?' n; Y$ J0 s5 qProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
8 @5 m6 o: L0 v' E
8 Z- @* n& M4 E% U; y/* create a default heap */
7 {& a6 k& ?9 W7 l* E8 kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! L7 S! j0 Y3 \  k- i) ~) y
var heapMemParams = new HeapMem.Params();8 F7 l! Z. i4 z( K- v2 u( W
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大. H# y2 m& R$ ]/ L
3 S5 }2 {' Q# y
var Memory = xdc.useModule('xdc.runtime.Memory');
; I, X6 v5 T  D! d* }Memory.defaultHeapInstance = HeapMem.create(heapMemParams);) b2 ^  j$ H1 ^/ d% P

0 l7 k& G6 d( f6 G' M1 }/* configure System module */
$ |5 ]1 J7 o6 l3 N6 ?0 hvar SysMin = xdc.useModule('xdc.runtime.SysMin');! ~2 V+ z1 [/ ?, X0 K
SysMin.bufSize = 0x1000;# F* d7 I6 c  R/ D
SysMin.flushAtExit = false;
- l" N5 B/ s' p8 [3 b$ G1 ?8 e) Y- X  `  o+ @) `0 u7 E
var System = xdc.useModule('xdc.runtime.System');
! p1 Z7 \" u3 l" R: LSystem.SupportProxy = SysMin;
1 e" {# [6 ]" ]: h9 N, Z
( J; L! Z: [- i* D* k+ U. ^/* configure SysBios to use the lower half of Timer 1 */5 X1 K( f9 V% F9 {. t
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');- Q% ~3 k6 i2 K  I1 E% `5 \
var Clock = xdc.useModule('ti.sysbios.knl.Clock');/ j$ w. e  j0 Y/ Y  n
Timer.timerSettings[1].master = true;2 f3 |# E0 G8 Q
Timer.defaultHalf = Timer.Half_LOWER;8 L( ]# d" g% w2 n$ s! L
Clock.timerId = 1;5 \! w. I5 E2 L# Z/ n9 s# M, k$ s$ o

. [) e2 v- r( p$ }# }+ I. a* e2 h' ~* |/ }; G
/*
2 w6 i1 ~8 {9 z" A* H# ^ *  ======== Miscellaneous Configuration ========
- \" k, M5 @8 |( u$ y- @ */" f$ r8 L0 B( v! B, H

. U( r& Q# O- a9 R/* set default diags mask */
% O& y4 f% h0 N' ovar Diags = xdc.useModule('xdc.runtime.Diags');
% |5 X3 \9 }1 t4 I' M( ^var Defaults = xdc.useModule('xdc.runtime.Defaults');2 ^, J( m: l' u7 F. j
' D* ~. c* j" p1 }: K* y0 Z  L
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;) y% X- E3 |) G( g1 p5 O
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;/ k  ?% R: I6 Q5 L* G5 a+ Q. w
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
4 V$ t+ T2 O3 u5 P% I2 ZDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */) c% |8 q. n+ u$ h  b8 O5 V, s, r5 d
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */$ J! k& h& q* Q- P; ^
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
6 S( |: i7 a& c7 i4 wDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;5 d: k, f; N  r1 y; i
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
, I* u3 @' P- u3 J/ IDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
* n1 T/ `6 [' u/ NDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
- V7 t# T3 i5 K. oDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;/ j7 Y) Z5 |$ g9 e$ T5 h
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;% w, c, }: n9 M+ K" K' A6 t6 B
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
6 \! }) F4 y2 g# h) _  y+ QDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;0 U  |9 p' z( x) A2 n

: ]6 m* W9 G! V) Y2 N/* override diags mask for selected modules */- N. c2 Z* x" |5 I
xdc.useModule('xdc.runtime.Main');
# h  ]6 f$ \& d* QDiags.setMaskMeta(
9 I  L( ]2 x1 I# ^$ L7 J1 e* f    "xdc.runtime.Main"," m3 M6 X3 H; e- w- L
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
* I% s& K, p" S5 D7 }+ a8 ^  f    Diags.RUNTIME_ON. u. v6 s2 T3 X9 E0 y
);5 s1 P; F8 C+ i

2 w( W" `  f9 @+ R, q3 b, `var Registry = xdc.useModule('xdc.runtime.Registry');
4 \9 ]: _1 r: u% ?6 p: d: ERegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
# ^) E$ b! ]# i5 C3 B% s; _Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;$ A; ?6 K- `: p- S$ I
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;' Z, r* M# |3 \4 J( s# o: E
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;0 U: G. h# [9 R/ }; q
! E5 U' C. W9 M. H6 u
/* create a logger instance */; r8 k1 y6 q! |$ \
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
$ l, G3 ?7 W4 {8 X. ~5 t. R4 Y5 {$ a; Cvar loggerBufP = new LoggerBuf.Params();
; @& P8 R' q( |9 sloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
1 {. S( g' ?5 ^loggerBufP.bufType = LoggerBuf.BufType_FIXED;5 o, z; u# ]& b0 V# {; g! ]4 I
0 N$ e9 T5 j/ m; m5 E
var appLogger = LoggerBuf.create(loggerBufP);" p  t+ }6 O& K0 G# g2 |$ C8 c, U* w
appLogger.instance.name = "AppLog_Core1";" `+ N' R5 O+ d6 b+ o; H
Defaults.common$.logger = appLogger;- T0 A# a& y3 u
Memory.defaultHeapSize = 0x8192;   
- e4 \4 k; i, g3 V6 e: T7 eIdle.idleFxns[0] = "&LEDStatus";2 ^6 v; P# x2 x' o; s5 {
Cache.initSize.l2Size = Cache.L2Size_32K;* s0 s) Q1 J( q9 z: S( l
) ^0 b, c5 R2 @1 v9 g0 n8 X
回复 支持 反对

使用道具 举报

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 */. \. a- w( ^! t. {
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' g$ Z: o6 J- h' s9 T) |& U
var heapMemParams = new HeapMem.Params();
- S% Y& [4 D& b$ D' JheapMemParams.size = 0x4000;
2 p9 m% h1 q/ ~! a: G
) P# b; U  o, u1 rvar Memory = xdc.useModule('xdc.runtime.Memory');7 e8 Q# A- C6 F- J
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" P" h2 @) z  h: V$ Z. t8 H
$ Q) I" `& h6 x" E; k
我大约calloc  每次共计大小为5K*16bits,% G7 Z9 Z+ E3 o3 k. j) @- H2 ~
而默认配置才0x4000、需要改大。
8 l0 A( L. s0 l- U! f* Y6 p# x; `. v/ j. N4 Z  h/ [- b
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
0 Z5 T3 A( T9 ]8 H. R3 o  {: _Program.heap = 0;
# I2 i/ B: U( S/ E, K$ eProgram.argSize = 100;  /* minimum size */% A$ y" T  G2 `' H
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-3 21:53 , Processed in 0.043226 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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