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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
) N9 P0 G$ q6 Y7 f- E
) S- I7 q# W" d& i, r( u. w    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
& @3 ?0 R" m1 h- b: n4 V. m  v  d4 @& z4 B7 |# Z7 X
其他程序段。。。。。
- p9 O- }- W" k! V $ K' @% e' S$ T) A1 ^7 B
   free(x_d);
% O% F% m3 J& [% q
! d' x5 V' L! E使用DSP侧单独调试功能,验证动态申请没有问题,! @& ^* D$ U) \' T! ^

3 t/ W' d% b( Z. q+ \0 L/ `但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
1 D/ B; M5 [4 ^/ |- W* r1 V
9 w' }+ M  T- B( {
( K' W# }9 D" _$ ^: E

8 Q5 r. ]; Y2 p' p8 }( s) k+ Y/ O3 w3 Z
: |# S3 D/ }2 s8 E
3 U1 |$ q* j. q+ l3 T
( D/ a+ Q6 T2 v+ S

$ H; i- l7 s& n( d* T* X0 k8 h: W; |

# \% T5 L/ g6 P  `) j- x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明9 e) ~& ?" S3 W4 Y$ s# M! _" Q
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下; e) K( g5 g6 O3 ~& @! W
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ U5 I- Q0 [/ g. E7 }# C
0 _$ \) o' J* j4 H8 ~+ D
是不是需要在DSP.CFG中进行配置
) A! r  h# U% x0 b; e我现在的配置为' w" E4 T1 d, `' J1 z& X7 l
( y! @4 v5 e+ z  n8 }, w/ I2 ~
/*
5 J. K  {8 T  S6 X  l! d *  ======== Operating System Configuration ========
$ b/ C& u# ]  A */6 D- X8 h8 z* T
/ ^# l. O5 K+ P) B: V
/* no rts heap */
1 H) Q6 a$ O8 i4 PProgram.heap = 0;6 h, B- B/ R$ m6 p8 [0 h
Program.argSize = 100;  /* minimum size */
' n) s1 G# W8 ?# F9 U) t. pProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
4 z9 ?8 R) j6 L9 ?  V
) A0 f1 T* X+ i. z% E. [9 Q$ O) _; g/* create a default heap */$ ~/ O- r) r1 D0 g$ k# u: ]) i0 @
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  B0 O/ l" L1 p- D) _var heapMemParams = new HeapMem.Params();
" T/ g" ^! J* S0 z7 V1 x/ dheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大" K* N* P9 A$ r6 K$ o# M6 e

3 |* ~4 ]+ B! T( ~# O
var Memory = xdc.useModule('xdc.runtime.Memory');
3 _9 J7 N. W4 d8 k/ J: [" q: LMemory.defaultHeapInstance = HeapMem.create(heapMemParams);) c9 {- C! `. a# j- b3 j
% I* L4 p0 a& Q$ f) T
/* configure System module */
' S) Z3 n! Q: m6 rvar SysMin = xdc.useModule('xdc.runtime.SysMin');) R+ D3 O; T1 t9 _1 E
SysMin.bufSize = 0x1000;
9 k. `: Q, S, O5 P  @: {0 N: q$ GSysMin.flushAtExit = false;# V" c$ e# s9 Q% h8 C) I8 P

2 b$ S7 V+ p( C+ Y8 hvar System = xdc.useModule('xdc.runtime.System');
7 ]( O+ y. y6 Q% J3 j% c$ ]* O, P+ oSystem.SupportProxy = SysMin;
! c* G) O) c2 r3 p( Q- F. m# v$ N" V* |) m; G- b3 G. |
/* configure SysBios to use the lower half of Timer 1 */
5 S2 m) A3 @* l) R& m  evar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
8 B0 ]  f4 d# B2 v0 tvar Clock = xdc.useModule('ti.sysbios.knl.Clock');2 a) s, L5 L' i* K1 D9 D, `0 [
Timer.timerSettings[1].master = true;
6 h  X8 S' A) C+ A3 A- J4 c$ OTimer.defaultHalf = Timer.Half_LOWER;
/ e; A  p% P& `% m! M0 jClock.timerId = 1;
% l  `/ H' X9 i3 c$ `: ~2 m$ b: e) m8 ]

/ C7 H' j3 O2 s/*( Q3 h0 u- C5 @& b# R/ [
*  ======== Miscellaneous Configuration ========4 ^0 G, ?$ n. p: I  }# i# [
*/
+ l8 K' L7 t& N# H- ~" P6 [- k9 ^5 ~4 Y# Z
/* set default diags mask */
7 A  o# W, N/ d  `! b: A; d+ jvar Diags = xdc.useModule('xdc.runtime.Diags');
  q+ [) b( i" K  Svar Defaults = xdc.useModule('xdc.runtime.Defaults');
- U6 E- R+ i6 f! [2 L2 T$ l: Q
  h2 Z7 ^3 B# d% }4 r. x% a+ s6 aDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
8 \; `; j7 u' cDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
4 V8 N7 {* h0 a- K7 ]0 y8 kDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 x" @1 V+ Z+ X; B4 N. ]
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
  U2 R: y% I! }. f9 }  s, @Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */& N+ q, l8 T. ^4 Q2 J5 Q( x9 s
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
- S; _9 N4 e9 G9 ^# hDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;% m; w" d/ \/ t( u
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;+ ~, I# n- L& d! g- ^& f
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;- ]6 s. L2 ^; [9 c+ Y& @, O3 q
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
7 w: z& t6 r8 h" X# c9 xDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* p, _3 \$ V4 b: w8 Q  t3 }Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;) y9 U: U) w! Z9 f1 _
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
, k: W$ m; G) S) `4 ~, }* GDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;7 {& ?# J) e+ w
' x* O5 r; S8 S4 w* u
/* override diags mask for selected modules */
' @& Q/ C3 n, Q# H! s' Z6 Hxdc.useModule('xdc.runtime.Main');
$ V3 E( a. w+ l( W* rDiags.setMaskMeta(
. a0 n, R0 ^0 S9 ~3 O" t0 f    "xdc.runtime.Main",
; q1 b0 u4 ~. ^9 v    Diags.ENTRY | Diags.EXIT | Diags.INFO,
  d7 g! N* ?# @- i+ M$ n/ g    Diags.RUNTIME_ON
1 D! w. c4 z4 y; G: Y: ^  x; ?0 G);
% ~- q8 r1 ?/ Y( [9 v9 ]8 C1 C
3 R/ B* ?# m, U' \3 t) qvar Registry = xdc.useModule('xdc.runtime.Registry');6 Q+ @2 q7 a. @; L: p1 g# j
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;8 w3 f3 G8 d3 u7 N$ b+ f
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
" Y! F( {# v& J3 Y0 B: e: aRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 _+ |6 P& }  q2 O
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;) U0 [" c# }0 Q5 L8 ]
9 e3 _6 Y) G' s4 X9 |% W$ b
/* create a logger instance */
: f) Y  p5 W' C6 Z! ivar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' h0 s7 V6 r/ f( r6 ]7 ~
var loggerBufP = new LoggerBuf.Params();
% Z. o& F- E1 w& l, p# ?loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
+ F6 P% _- s! O. R" o! y  i$ w! a6 TloggerBufP.bufType = LoggerBuf.BufType_FIXED;
3 a5 s8 J' _6 k( L4 U1 S6 t8 j- Y" ]8 G+ W3 `; t
var appLogger = LoggerBuf.create(loggerBufP);
+ i6 w7 u: t$ N4 QappLogger.instance.name = "AppLog_Core1";4 v4 R5 x: y% F( [( W
Defaults.common$.logger = appLogger;
) P' S0 D) i2 a3 L0 YMemory.defaultHeapSize = 0x8192;    5 T/ S. I( {) J2 ~) [* V- b& y( d
Idle.idleFxns[0] = "&LEDStatus";" B! P8 m2 m/ S) h' |  t: Y2 c5 B
Cache.initSize.l2Size = Cache.L2Size_32K;
5 {3 x6 D1 l% `& l5 ^* o- E- A% p4 h# v- 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 */
$ z/ b) M) x+ B. xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 c* D8 V# a0 t  E3 v* H, }
var heapMemParams = new HeapMem.Params();
; [1 B6 o6 B! \/ T- v5 X; cheapMemParams.size = 0x4000;
: c' c0 _  V! M+ I# [% [; Y7 V
; @. g0 L/ b* x- q& {var Memory = xdc.useModule('xdc.runtime.Memory');# B; ?4 j8 W5 [& y& i+ C: e% y6 Q4 \
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* \6 ?0 }: j, ]- s' N

( `9 s' c2 ^8 g+ ?3 V我大约calloc  每次共计大小为5K*16bits,: C, P( p/ d/ N
而默认配置才0x4000、需要改大。8 G, S3 j3 z' I1 t3 E5 u3 ~

+ q' K7 \( u, p. [9 V
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */( c! }' r" u$ M' b, W1 T
Program.heap = 0;' {5 Z/ O8 U, {, L: f
Program.argSize = 100;  /* minimum size */7 h+ q4 B: M( n7 V2 c& X; t, J
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-26 00:55 , Processed in 0.042259 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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