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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
. d- r4 e) n+ X: Y4 j, l* g" {! C( ~- u( y) b4 P
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
7 T8 C/ }  @7 w3 V& _. Y; y' }/ ?) l/ `; z9 p
其他程序段。。。。。# b; I9 g0 h$ F% b

' g. }7 P+ q/ V   free(x_d);6 q: N! ]8 d" `+ l% B/ X8 I

3 Z, h" f# ~: C; T4 a/ X9 A使用DSP侧单独调试功能,验证动态申请没有问题,0 E: H" f" G' T' t; j  ^
5 L4 C8 r' M) n/ p& l; w" e
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
; c' _8 Q" F& i6 G8 t8 x
5 b. C' Z  a% k" {
6 h# R5 O. u* T& X/ }9 l, t/ p

' L" Q: K4 z  ?; Y0 F* l# G% r! t1 Z5 [$ v  x: c. w

* g" q- O1 S  M+ [' p2 B# }- \2 F
2 J* c1 _/ j! }; E3 M( P% \# L; J& \# `6 g
) d% I7 V7 M# B; |6 l

- p2 ^' E* S8 A6 t* O2 _! @( |  a  ]' i. g6 r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明$ }) Q6 h/ h& L! u# q# f: t! g
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
/ d9 U9 x6 N% @, X8 V0 \(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 ~* p* ?$ M* l0 c; ?2 G
* {+ N6 @, W" N4 X6 w/ ?) u9 H* |
是不是需要在DSP.CFG中进行配置0 ?) [4 c" X" z9 O, C0 _% z
我现在的配置为
1 @9 o9 a$ |7 k6 c7 |) v
6 A% I: |7 }% f3 R( b5 V/*
. f& a/ j) f: k/ Y5 Q4 i' C *  ======== Operating System Configuration ========
* w' ?% k1 U( a: o; r2 H  i */
; m  d( |; G6 V9 V& {) h" I
2 U1 q5 F, H, G' \: ^  E/* no rts heap */
( o% z" d, Q8 D1 u" a! G' e& VProgram.heap = 0;. Q' c6 n1 q) i# }5 g
Program.argSize = 100;  /* minimum size */3 m" s' z# b# O
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大  g' f6 S4 Y( p$ {7 v. C

9 a3 B- H" R5 @5 \- s) c/* create a default heap */) R, T" D+ k3 b3 e8 g3 N
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! H; K# y3 _$ `/ `var heapMemParams = new HeapMem.Params();
  g, m% a$ ?6 F( mheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
4 k+ z4 F! |4 H) b! ^3 Z6 `3 O6 c4 ^! H1 f: v* v! S9 h
var Memory = xdc.useModule('xdc.runtime.Memory');0 k! N6 i! d% r3 i+ V) b/ ?  P
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
% b4 i: c! l+ S) [! M" y5 i$ _; }4 V& Q+ c7 c& O9 ]
/* configure System module */: H! u% L; d( e, U! O( J
var SysMin = xdc.useModule('xdc.runtime.SysMin');) C; h2 M$ p* ]0 u, A. T6 x9 Y
SysMin.bufSize = 0x1000;
# W' c. l) s. @SysMin.flushAtExit = false;
9 L  I% i5 z7 V# i$ F; U- c5 C- a% z' h; [
var System = xdc.useModule('xdc.runtime.System');; }1 ^- Z; K) Z7 k  k4 d. D
System.SupportProxy = SysMin;
# I2 l+ }  ^% E& c! g  a& ^
1 R$ E2 r  F' j/ d) B/* configure SysBios to use the lower half of Timer 1 */
- b0 ^' Y  r' s9 u* hvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
8 |9 B! X* |6 J) k+ A) H' e6 \var Clock = xdc.useModule('ti.sysbios.knl.Clock');
) o! j  S5 t) O& s+ FTimer.timerSettings[1].master = true;
# I! D% J2 t7 ?, N  _& X0 PTimer.defaultHalf = Timer.Half_LOWER;. U5 s8 p) b$ ?
Clock.timerId = 1;3 n) q0 A) y( S5 A! ?6 D
2 s) ?( a, I, _; O6 M% _
$ ~: q9 {6 T- d8 C$ x) R
/*" H, s8 z0 F% l' V% s+ o
*  ======== Miscellaneous Configuration ========8 h8 g1 Y/ z  Q" I/ ^
*/- e) P/ ^  @! e( M

! Y3 I* t: \$ k2 I4 J/* set default diags mask */
* S! A) W3 e  ]) ]+ m, Cvar Diags = xdc.useModule('xdc.runtime.Diags');2 w; z% b4 U- R! y. H6 ]
var Defaults = xdc.useModule('xdc.runtime.Defaults');! P7 w& N9 u( l. o; x0 G- G1 C

2 y, }/ @5 s& D9 vDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;, X/ N, A1 y9 \3 i
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;0 e( f. h9 x4 \, ?0 n
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;& ]& i; [8 l/ L+ ^3 v
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */  l* d3 b9 q/ _: l
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */3 Q# W' G2 K9 r' s% `
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;2 x8 i8 |0 ]; ]: r. C: q8 y1 i
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;3 d; X) H% w+ i4 k+ j, s; w: l- o
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- C; ~8 k7 ], }3 I- S  Y
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( K* H6 f$ ^& f& J$ A9 ]
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
) {4 {7 J4 ^6 x8 {) s4 \2 hDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;3 M3 ~+ c& R. e7 X+ y4 z
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;4 }8 N3 F; z$ m& F! j3 Q$ N) v
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
( c2 o. ?! o+ k. K2 oDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;9 o3 K6 H7 ^; g: O7 V
* \# j1 p, K. X0 s" L9 R4 d
/* override diags mask for selected modules */9 Z3 c( H9 v# t% d3 O4 O5 D8 r
xdc.useModule('xdc.runtime.Main');
7 V  M# d2 J& i/ d3 z# b2 f+ Z4 i5 @Diags.setMaskMeta(: u% G5 V0 l3 R9 Q) l, A& k( _
    "xdc.runtime.Main",! Z: B. e! z5 s5 i# k( e
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
3 g- l, n3 R8 G4 \9 q" F3 h    Diags.RUNTIME_ON
$ J4 d7 K: k9 y( ]4 b);
, {3 H) G' |3 c
. t% j: \1 ~! k- pvar Registry = xdc.useModule('xdc.runtime.Registry');+ L( B( ]& j, s* Z9 `( |
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
. q! y) L( T8 [Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;( X; z' ^0 k7 C$ R: v0 `
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;  X4 c. O* T# P" _
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
; @1 h+ z# ?7 Z. H8 B. j  F
3 M# O) g; K# W% ?6 T, g4 T/* create a logger instance */: u: E; F2 o6 D" ]( k
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
% O2 K2 j! f' N: \. X" tvar loggerBufP = new LoggerBuf.Params();1 f% L( S4 F- s
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */- O* f4 o" ~0 N- A
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
5 k8 |9 Q. Y  I& p9 u; C9 D9 r( n. h  j) K% `' E6 M! L
var appLogger = LoggerBuf.create(loggerBufP);9 ~! L  _9 p+ G! M+ o; w/ R! N& C/ {
appLogger.instance.name = "AppLog_Core1";
" B# G( I+ \9 `2 U2 d; y3 vDefaults.common$.logger = appLogger;3 x0 \8 \  I6 o1 s! Y& \1 x3 m
Memory.defaultHeapSize = 0x8192;   
* u' ~1 F" o4 x1 @% bIdle.idleFxns[0] = "&LEDStatus";
. [% F2 V, Z0 pCache.initSize.l2Size = Cache.L2Size_32K;! E+ e8 X+ h$ f4 q% {: k" f

. B7 U' P" L* m- H. Z2 g
回复 支持 反对

使用道具 举报

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 */
2 s6 Z/ `; D+ p! B  F3 e5 y7 jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 \# |$ R5 h4 e& e
var heapMemParams = new HeapMem.Params();* |9 [0 {. V- I% K9 m$ L2 A, X# B8 |
heapMemParams.size = 0x4000;1 l( {# ^, I1 R  X2 V
4 k0 D* a% ~) @$ [$ x
var Memory = xdc.useModule('xdc.runtime.Memory');1 m& ]4 ~' s# u4 R0 P, T3 o! u
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" u3 n8 X1 r/ ~+ H

$ g. R. [; W" k6 N我大约calloc  每次共计大小为5K*16bits,, v) L9 A4 x0 G
而默认配置才0x4000、需要改大。- C( |; ~$ S$ ~

# V8 H( v( \5 {# Q: U$ Z5 }  c
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */4 I/ P; W$ y# @# u1 N
Program.heap = 0;& x7 `/ m3 ^. b1 u) t3 H/ L
Program.argSize = 100;  /* minimum size */
/ R( C! x2 {& [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-9 08:30 , Processed in 0.051394 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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