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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
% a6 Z/ \5 T$ B( p& d( s4 R" W4 x1 I6 l4 I, Q* M" G- a
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
: ?* Z& n/ o% d9 p8 `
: w7 Z2 f* e4 G, k其他程序段。。。。。' j- ]4 M" ?+ i/ c* i% h
; c7 @! z  u0 y0 R' ?* t
   free(x_d);2 K2 {8 N9 Q: _1 z

0 I. c, n3 P+ b7 s% D使用DSP侧单独调试功能,验证动态申请没有问题,6 B3 ?! _; M# ~6 m

0 A% a+ v( Z' h) I  ?但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
* q3 c1 L) c% O1 T: L- k

  a7 b2 d( g' T+ P7 L
+ ~0 c4 }- w& t9 _) N
3 t+ T: W: m5 ?6 {. q4 Y/ z% m" j9 G. x3 v
3 ?' ]" [- ]& {& n8 Z/ s0 N

* Y! ~1 n3 v$ z/ W+ s
* V. d# O& Y" }1 A# `* F9 {
+ h4 q" ]4 f' }) e2 p1 v- y* X/ p' ^( E" A
3 r' g1 Z& L- M2 B2 O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
. R, `: Y3 ^& v+ c3 P* f& D* S( X我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
+ p8 e  A' ]4 W' c9 z, t9 d6 U# n2 O(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
1 G  i. @. J& v3 X8 l; q& c: \1 z6 H

0 v7 E8 ?- }- p1 p是不是需要在DSP.CFG中进行配置
6 o% P" ]* E' d) a我现在的配置为3 \/ {" U! {% U' A6 d# ?

' z- `9 X1 r) V/*
, v/ u- E: ]% [& Z' r3 Z" h *  ======== Operating System Configuration ========
$ Q' o$ P" O9 X- Y0 a% g */* u( W% Q/ q( @4 M
2 m% _. @# F! M4 E6 t: T
/* no rts heap */3 @# P. C: J2 j
Program.heap = 0;  ]6 V# ^# @) i+ U" `1 b
Program.argSize = 100;  /* minimum size */0 X' [' X+ q6 R4 M6 J
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
9 H5 C( p, Z- T- k3 o8 n5 Q: U2 }2 x  I& l6 {
/* create a default heap *// f+ n& L+ l. x4 p) D8 s3 z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! N6 b- G* f3 G  p' ?6 _. E' @
var heapMemParams = new HeapMem.Params();$ S% C) c* ]) @
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
8 L' b. Z5 Q6 S
6 ]# g( ]3 b% \% a( D) K0 X
var Memory = xdc.useModule('xdc.runtime.Memory');; |. P. B  V2 U! L
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 W! f% @, i9 ?+ U0 u% J. S& |* [
/* configure System module */  l8 _/ G+ |+ K. i  E, h
var SysMin = xdc.useModule('xdc.runtime.SysMin');- {6 c: _% j& C! f) ?' G
SysMin.bufSize = 0x1000;+ B0 j7 F  W1 F2 l
SysMin.flushAtExit = false;) D$ i! u2 F8 \! K

9 l$ `. D8 g, ^8 {7 p. \' `var System = xdc.useModule('xdc.runtime.System');
% X1 I" N) R! U- @/ QSystem.SupportProxy = SysMin;
+ M) K: n6 @' b
' j9 m- Q  q& Q6 F2 ?" b* U! q0 Q. ^/* configure SysBios to use the lower half of Timer 1 */
8 H0 C$ Z& u% k6 F( U. fvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
" g& ~/ f$ y5 |3 E) ?var Clock = xdc.useModule('ti.sysbios.knl.Clock');7 w9 s7 n$ r' c: N, @1 }- ]- b/ s
Timer.timerSettings[1].master = true;
  f" I- C% k$ l& V, `& oTimer.defaultHalf = Timer.Half_LOWER;' ]+ t7 g. ?4 D) V
Clock.timerId = 1;" L2 |8 ]7 E. F/ C
, P( h) ~1 f6 q- V

5 V0 b( j6 b/ Z! c6 i6 K9 Z; S/*& v  C. l4 ]8 o6 s' s2 h8 }1 C3 U
*  ======== Miscellaneous Configuration ========
( Y0 H/ |3 \$ J- N5 n/ X: t; m */
0 @* K2 l5 _& S+ U
) [' V7 p9 Q4 z3 O- w/* set default diags mask */( o+ \4 u' w6 @" U
var Diags = xdc.useModule('xdc.runtime.Diags');
% v) _% u5 {- ^6 `, ^/ h3 avar Defaults = xdc.useModule('xdc.runtime.Defaults');
) i+ S1 M7 |$ f- p0 C5 p4 J9 L1 q  u. v  `1 A) R0 d0 {& h
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
/ D$ l/ [4 S. v/ m% RDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;+ }5 W# \; Z& X3 _6 k
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;6 t" |& H4 P  s# g" l
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
: ~' O# `2 E+ P) L* w  S% z% nDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
$ E8 g8 M; P! O* t3 tDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
3 P& ]+ E8 n7 ~$ Y& fDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
. ^; n# S+ e- b& S7 N5 uDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
4 x' G" I' ]8 Y% ?- _) [" A' \& _* ~Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;' m* r  l2 H1 v$ A$ P
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
  C: X& u( Y$ h5 LDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
! H- l( R# O: [2 u/ |Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
! z, D5 }- y. k( q- k) k  }+ x  bDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
# |' [9 C1 W; n7 E# VDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
/ r! O1 t5 S- \* G  o8 S/ u8 W' z8 P# p
/* override diags mask for selected modules */$ g; C6 S8 A. t
xdc.useModule('xdc.runtime.Main');% y5 W$ d; @* I3 Z
Diags.setMaskMeta(7 f/ s2 A) w, C+ q+ \' ^
    "xdc.runtime.Main",
3 X2 h( Z& }0 w8 l, g    Diags.ENTRY | Diags.EXIT | Diags.INFO,
' M; H) ?6 X. |1 n& ~# |    Diags.RUNTIME_ON
3 U9 p1 g) _, k);
6 N  J- N5 Q( q8 E. l3 x. V
7 |* s% s3 J. k8 U! h( mvar Registry = xdc.useModule('xdc.runtime.Registry');
% o! ]3 `8 S. K5 T% F( V' @* aRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
- Y: G  ]: L  x1 y8 `, c9 C2 LRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
; u  G& z( U6 gRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
- k! U/ F8 e) F! x) Y. x" }7 uRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;( i* v# x; w' D! t+ L
# I( T3 S& o! f2 J' ?
/* create a logger instance */
4 X5 y! `- U, m  j0 Z! q8 e/ tvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
' _6 h3 W8 t8 d: h5 H+ Evar loggerBufP = new LoggerBuf.Params();$ |4 \  Q# I- R) E, R; d
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */& C; y' H1 x* p4 d4 r6 P
loggerBufP.bufType = LoggerBuf.BufType_FIXED;0 {0 \: `7 W4 e

; B6 z( \7 Q; q! g3 ?var appLogger = LoggerBuf.create(loggerBufP);' x% n8 [5 _8 I* u8 ?3 @) p
appLogger.instance.name = "AppLog_Core1";
" i) K' K! C9 E+ [# t  A" _Defaults.common$.logger = appLogger;
: q1 U0 o  ^% ~0 w* Q0 bMemory.defaultHeapSize = 0x8192;    1 _; W1 E! W0 c; }: `
Idle.idleFxns[0] = "&LEDStatus";
: Q, W4 v' Q3 g( _- UCache.initSize.l2Size = Cache.L2Size_32K;
" ^( w- t6 ^1 `# E( y  ^: u4 ?* a) E5 z7 T2 D4 f2 {! m/ ~+ {
回复 支持 反对

使用道具 举报

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 */
5 _' u& H6 u: u$ Avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  l$ ^6 T$ `0 r& ~8 B! l2 M* Avar heapMemParams = new HeapMem.Params();
5 C1 p+ C' {+ X1 MheapMemParams.size = 0x4000;
4 I. P( u3 U  N) a( `
# X7 X$ r) i0 e2 ]2 j; e/ bvar Memory = xdc.useModule('xdc.runtime.Memory');
$ A* j" Q. f8 j- X, WMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 t0 ]' s9 X" ]( ?/ E# \; L1 R9 M/ O0 u# Y* V$ b. D
我大约calloc  每次共计大小为5K*16bits,
4 @  f: j1 ^9 k0 S* D2 p* ~" v# B, i而默认配置才0x4000、需要改大。
/ K( V9 I+ [$ M1 @
+ b3 c" W) g5 }6 a9 d3 o8 {
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
* [2 ^# _4 W4 \  V. j; V3 kProgram.heap = 0;# F* j1 q. _( x% k0 Q/ F
Program.argSize = 100;  /* minimum size */
: V( j$ [/ u/ n2 n& l+ ]Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-31 10:57 , Processed in 0.042221 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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