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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构. e: U& r5 X. P# \
: |7 @3 o& v/ t# _  x" q% P- w
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
. A. b# ^2 l# I5 Y, W; V; i7 b. S: Y) X- K) f
其他程序段。。。。。# V" p  E% v* u$ h4 U

) y4 s/ H' l( ]$ Y5 P" u0 o   free(x_d);
5 k6 a. g( V: Q7 S& I0 K/ Y: @
; D" A! L" D! a: Z" f( ~使用DSP侧单独调试功能,验证动态申请没有问题,
& u! N, t9 F  G& ?& h
; [1 {3 z+ b) ~% P8 Z1 O' X9 K: h但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。1 i3 u' ]9 l" h$ Q8 Z' Y* e- H* e
6 \2 e" p* Y/ ^) L0 Y- J

9 L* C$ [9 d' h* n0 h1 ?, ^% ]2 ~* C/ z
% X2 d& v. D! \/ {3 D. h% |

' S( |  ?8 s7 i/ S5 g0 w/ I* u0 Z# Q- a9 |& n
9 x/ E, o* B/ g' \8 v1 t
! n# e0 ?- ^7 ]$ `
' f$ a$ P5 [" o0 _6 w# h0 N) [

! P, u0 \9 _* D+ V/ |6 E7 S1 t" e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明- t1 ~  v& r: i( g* X% v  a' @
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
) x" [+ Y, U+ o5 G5 _( @: l(不过疑惑的是,为何单独DSP仿真就没有问题呢?): E# m, i4 U0 T& F
3 \* j( e% I* B4 j
是不是需要在DSP.CFG中进行配置! }. y8 y6 }6 O8 ?
我现在的配置为
* A/ |5 G+ I7 {6 z. [2 o* r. p) u# ^9 @. q$ l5 [
/*: Z" c& w9 B, |6 Z
*  ======== Operating System Configuration ========
- v; b: J8 i) Q" _% Y% G */; \6 H: [3 ~: z* f. P* q! ], e

' ~, h5 k( H+ T+ }- q8 @/* no rts heap */
$ b- i3 s# k4 s- `6 c8 `0 NProgram.heap = 0;5 T1 J9 w0 ?5 e" b. ?1 a! {- W; U
Program.argSize = 100;  /* minimum size */
( N( n$ ?( `$ TProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
& P9 v" H# t) z! {5 ?
, w3 g1 i& g4 Y' f" |/* create a default heap */! @' C4 O! f; @0 x9 J
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* y9 t2 i1 S0 yvar heapMemParams = new HeapMem.Params();
. m$ S4 f  ~) h! X# XheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大+ |  K) {* L8 {. u2 ]

) V+ d# P9 G$ x7 X# K: p
var Memory = xdc.useModule('xdc.runtime.Memory');
5 ]! t" L) n6 `. BMemory.defaultHeapInstance = HeapMem.create(heapMemParams);, P4 u/ R) k- G. v9 C
# R/ y" `! I* B* y9 v" T9 D$ \
/* configure System module */5 E0 K! s4 o4 C- Y& f; h( m9 I9 V
var SysMin = xdc.useModule('xdc.runtime.SysMin');. J1 A6 u! J2 U# r" e) r8 D
SysMin.bufSize = 0x1000;
7 x$ \7 T( l" J9 x; rSysMin.flushAtExit = false;+ o) ~. z9 t# N3 B
! C% p* D5 U  u# Q
var System = xdc.useModule('xdc.runtime.System');
7 a* R: K$ s7 m/ B7 b" HSystem.SupportProxy = SysMin;
) h" T( A, S- V5 z2 q: l7 c. D, v! i7 s* t- O
/* configure SysBios to use the lower half of Timer 1 */
+ c+ [6 [8 o0 _- N! c, wvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
% W5 o; G' x+ Y1 m$ \var Clock = xdc.useModule('ti.sysbios.knl.Clock');  z0 I4 O; E) K* \8 h( `* h
Timer.timerSettings[1].master = true;) G7 Y2 G7 C) I
Timer.defaultHalf = Timer.Half_LOWER;
, z4 \% R( F: E. C  Q* y( TClock.timerId = 1;
/ [4 B( {' M2 h7 z! S2 g" b% b; e6 R; K2 w2 s
$ K% {, r) h  G9 K
/*
8 C9 L( M- y! X4 L2 x *  ======== Miscellaneous Configuration ========
: u: J3 }9 s" Y, j( H2 T' M */0 |' Y& _" h& K
0 w8 S3 i. F  ~" y2 A
/* set default diags mask */: {( N: W0 r& ?: J2 B
var Diags = xdc.useModule('xdc.runtime.Diags');
$ D8 z  `" F3 I; a4 ]var Defaults = xdc.useModule('xdc.runtime.Defaults');
  s& [7 N$ U$ y: p
3 _3 t! R8 y' p9 ^2 jDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
7 N" ^7 K& f2 k: O7 o! R: oDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;8 V' i- U9 g1 c4 A
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
. z1 _0 y6 W  w. Z9 cDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
8 M( z' K8 Q9 F& |Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */4 H4 y$ S7 L5 J
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
- U6 Y2 U/ i+ R9 K! QDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;# v" S4 ]1 X) s, s4 H
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
# `# A6 M3 Q' L" u9 A8 PDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;+ x8 C) k* w- r. {( C
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
7 V; {. T2 U) X% S6 o3 Z1 b/ U8 PDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
4 q2 `" f0 E, ZDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;  M1 X. n, E: t9 H# k
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
  T+ P/ W% C* N4 ~3 m) u6 ^5 oDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
/ h& W. C# \3 ~$ M3 D
, Z' O) k' |. ^1 k' a& e, s/* override diags mask for selected modules */
4 Y2 B; O' g1 E7 u& Z2 nxdc.useModule('xdc.runtime.Main');* Q! x/ W6 L2 x- N
Diags.setMaskMeta(
  W- c3 B2 h# {1 \" f2 Z    "xdc.runtime.Main",
+ U( c5 |3 {+ H6 \. z* Y    Diags.ENTRY | Diags.EXIT | Diags.INFO,
7 C1 Z! H. i( |4 C. A! P2 \    Diags.RUNTIME_ON
' L- U% t/ T' q# Z);
4 M. R; c. h" j5 G5 D. A
; @8 Y8 r9 }. W9 @7 O7 Q. s6 j; gvar Registry = xdc.useModule('xdc.runtime.Registry');
7 t( _! s5 [1 J: ]$ k/ j9 I. oRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
3 Z$ X8 @( S8 }2 E6 V0 qRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;: Q# X: w# T3 P9 V! O% b
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 U( d# q: }: y9 X' t
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;$ ^! _. `, z1 r1 P6 l, b
( _: z. D. y% q9 X! \
/* create a logger instance */$ l/ \3 c8 z; d$ t# I
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');+ D0 G9 m# o: ~' z/ K
var loggerBufP = new LoggerBuf.Params();$ q# F( J3 n8 A7 h) d' K9 v' A
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */, U3 |: j: ~3 T# G* h: r
loggerBufP.bufType = LoggerBuf.BufType_FIXED;( p/ Z) ?. Y6 w$ x8 Q: v+ Z

* N5 g8 e1 A0 e: J! r7 L; Vvar appLogger = LoggerBuf.create(loggerBufP);
' w& @- f5 x# DappLogger.instance.name = "AppLog_Core1";$ T; j6 d0 o9 B0 j
Defaults.common$.logger = appLogger;
" @2 C1 ^' \: O/ |Memory.defaultHeapSize = 0x8192;   
0 s2 ~1 t7 o* iIdle.idleFxns[0] = "&LEDStatus";- G" v$ ~  r# O4 C1 e! m! C7 ~4 J! p
Cache.initSize.l2Size = Cache.L2Size_32K;4 R0 n7 ?+ R, U9 n6 S

( Z* L$ a1 S' ?! m( ~9 F
回复 支持 反对

使用道具 举报

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 */
+ q2 ]& l. l8 Zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* B2 Z+ M  y- L7 ~* C( P- Vvar heapMemParams = new HeapMem.Params();
3 X& d7 P, S2 dheapMemParams.size = 0x4000;  k3 j' i# I# v% g* `( D

, b; a, V2 Z" o* {var Memory = xdc.useModule('xdc.runtime.Memory');; g- P0 h- q( v& e
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' y% g1 R1 }8 \$ t$ C8 V& k  z+ X

  h) {" ?% U) M! v: l我大约calloc  每次共计大小为5K*16bits,
& d: k+ ?. U. j2 m% i而默认配置才0x4000、需要改大。' [2 s. r7 r+ d$ m# Z3 G: f4 k' G2 f2 h  q
& B- c! t7 G' P$ _. }/ ?' q
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
! Z9 L  {5 C  [Program.heap = 0;
+ ^9 i" @6 R$ _& [# r5 R+ ^Program.argSize = 100;  /* minimum size */" ]2 H* P" I4 F* N! ^+ q/ |0 r& c
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-23 18:01 , Processed in 0.042472 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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