关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
8 q# M, Y  ]% r6 r
9 Y3 N& f( T5 A/ t7 e) h/ u2 x    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
7 \5 @6 o& w. W1 G3 s# Y# d6 x7 V- _& }5 G
其他程序段。。。。。, P3 `$ o6 {8 H- @6 ~- k

1 ^( W% S2 a- m% p" a3 r   free(x_d);
6 n+ e3 d2 ]: k4 C* i; D: U5 d. |+ J
使用DSP侧单独调试功能,验证动态申请没有问题,* ?* ?- `% J) k. B2 \- a7 t8 A

6 U0 O: |( G; {1 K7 P2 ]. u  x但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
! c+ G4 P) a3 L) n+ C
' R  D& U* e5 Z
' W% S4 ]- G. P3 y" k
6 S4 b) Z  s. z+ C2 Y0 D
; e' A! A' W5 l$ Y  c
% N( x) x2 R# Y) O# c) r) M: s& e

5 \: h2 u! N) }) s
( G9 [, D& J& X& \& X9 O  C& ^' Z$ ?
( V2 b% n  G! e1 y( ?9 s; Y+ D1 G2 [& n% g) W6 b0 Q

  m: W2 H. O) @* B8 Y/ e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明+ K" u, D! C$ p( J% T& d  p
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
5 j3 W0 w1 d6 w. M4 ^(不过疑惑的是,为何单独DSP仿真就没有问题呢?)/ v6 _2 k9 o2 K. w; C3 R$ X
. X/ f0 V3 u7 g, o. n+ a
是不是需要在DSP.CFG中进行配置
2 m/ `0 A8 ]0 q2 R. Q8 T我现在的配置为
) B* C9 w( z# e: w& g2 L4 F' ?( I% _2 w
/*
+ x( f, X1 o9 a8 e4 o  e: H *  ======== Operating System Configuration ========
6 W# v6 w2 n! d% x7 N */! J  P. d8 I' k% L1 w

- J5 H7 N+ h8 s- y7 D, r. E+ F' e/* no rts heap */$ {8 Q( O' @7 N4 y6 H
Program.heap = 0;
& b3 q+ Z- i" T% c. c  `5 }' WProgram.argSize = 100;  /* minimum size */
+ Z! B  |9 W9 b# h+ y$ ]/ F- m' dProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
% x! `5 p. y4 Z$ d9 }3 ]2 v$ j/ P) J7 Z- A. H5 H  G5 }, |8 Q
/* create a default heap */' k0 x, o! [& T/ @3 H$ Z  @
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 Z, ?4 d5 @" {1 G, P
var heapMemParams = new HeapMem.Params();6 h8 [4 ]4 D# H+ c3 W2 U0 C
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大! W2 l& s) R8 ]9 y

- X% L  t3 V9 e2 P
var Memory = xdc.useModule('xdc.runtime.Memory');2 ^& O3 O" \" m0 y: l4 u+ S" v
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);$ a, n! @% L" X3 T9 L$ d

! h+ R: m& s; ?3 D* `$ k1 k0 C/* configure System module */
3 X, O4 x' `& tvar SysMin = xdc.useModule('xdc.runtime.SysMin');7 @" `6 M' I6 |( U$ ]: C
SysMin.bufSize = 0x1000;) V! O  `; m: f: K$ O  d4 Z
SysMin.flushAtExit = false;/ M# G) G; r7 t" n8 c# k
- F  x- q7 i! {1 P- K) e8 Y$ w
var System = xdc.useModule('xdc.runtime.System');0 G4 Q" Y! l: s& c0 G$ R3 r9 d2 t
System.SupportProxy = SysMin;
4 I& v1 q" s9 [3 I$ [
- B3 e- b2 B! F/* configure SysBios to use the lower half of Timer 1 */$ H4 k1 |& t( _9 {5 Y
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');$ n! X3 l4 U" V- \: _
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
! u* u- [# p$ MTimer.timerSettings[1].master = true;7 U  j+ f6 T' U* e' j8 R( O
Timer.defaultHalf = Timer.Half_LOWER;
! h* |" }5 j2 @& ?Clock.timerId = 1;
& q8 a* M- [5 m; ]2 _3 n4 v  y: r" s! f: J/ K/ C

: L, c/ |+ I( l/*
% ^- s+ O2 v: L; m& ]9 M *  ======== Miscellaneous Configuration ========( {, h1 U1 U7 k
*/9 }2 r6 K  [& q4 j+ V/ H  i* V) ]
7 e7 z: S% t2 `) C6 }) j% f
/* set default diags mask */* p) K! o0 P7 [! o! \" ^
var Diags = xdc.useModule('xdc.runtime.Diags');
$ T4 p- f( o8 d4 A  F: xvar Defaults = xdc.useModule('xdc.runtime.Defaults');
; b# F, q7 ~: _1 G1 _1 {1 `, `% ~$ \( o5 g
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;  F7 F) y% O4 ]* z# c
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  x% r5 c, ]" {5 T+ D5 A% v
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;6 u' T' L9 }5 R2 r- U
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
& d- C0 Q  w  A, WDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 i# X$ {: M" D( Z6 gDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
' v3 g. w6 e9 c2 wDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
5 o& `1 a& O7 z# [, X* K7 T; T" m) K6 t6 QDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
' C8 h, |, B+ L# L. K' J: K! XDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;2 _  V- U" h8 c) w
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;1 u9 \% u/ y# @1 y. `4 C. f
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
+ ^" Y* i! z' Y( v) [  [Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; Z6 c$ }( G( s$ _* [
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;8 h4 E( j0 Z; F- ]9 \; R
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
7 X  H6 @5 v- p* A
+ E/ |- v* M% W5 _. w; T/* override diags mask for selected modules */. i* R3 h0 A- c; u. k9 i8 P0 [* N
xdc.useModule('xdc.runtime.Main');
, p! H* H2 a9 T$ J; ZDiags.setMaskMeta(0 `- r7 u7 [" r# u+ }/ r
    "xdc.runtime.Main"," E+ [% c' o9 ~/ d7 A
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" f# N1 U1 a; u* I' p8 a    Diags.RUNTIME_ON
+ s2 d/ K7 @2 f8 F; t);
' T* W4 z  M! _$ c) W+ x$ C8 F8 w* C; J0 P2 W
var Registry = xdc.useModule('xdc.runtime.Registry');/ u, X  ~8 C. y. g% ~; A, S
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;. |1 ?+ g0 Q; V# p# `, H
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;! p/ s' _9 \- }  {, J" L3 f, V
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
. o$ t  D1 {: L& pRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
1 `( }- s6 I7 ~6 h
: u5 U: \, d7 t4 V( R. A/* create a logger instance */- L6 e6 S0 f( @% k% Z$ ]
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');+ K% o3 `; S8 [' u6 Q
var loggerBufP = new LoggerBuf.Params();/ E4 M  S' x1 u1 O
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */! G% m8 S. p1 O  h
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
; d0 l5 _3 D, E6 p: k- ]
0 z7 l2 F  w0 _' b: X" J4 l4 Avar appLogger = LoggerBuf.create(loggerBufP);
% z' V0 F, _' j. a% i8 N( i# \5 c) yappLogger.instance.name = "AppLog_Core1";) Q. z( Q& @0 ^% D
Defaults.common$.logger = appLogger;
( _; x' S4 a! D/ o3 WMemory.defaultHeapSize = 0x8192;   
: p: Y" ~0 }4 {8 i, dIdle.idleFxns[0] = "&LEDStatus";
1 k; z1 Z0 h3 j# O( ICache.initSize.l2Size = Cache.L2Size_32K;2 p# ]: L7 a0 E$ s5 m% C, x  K
9 _% d& ]6 t. w( R& d7 k
回复 支持 反对

使用道具 举报

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 */
. l( E! u  n9 {) d* g+ `7 u4 v5 ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' W) O9 m1 Q3 v' y
var heapMemParams = new HeapMem.Params();3 d7 g9 c! o! Q6 m. Y
heapMemParams.size = 0x4000;# G2 T( T; e. A: Z3 `) s& u
! ~, i, a4 L3 \( R# }
var Memory = xdc.useModule('xdc.runtime.Memory');) R# \7 y7 J" y& o' ~0 L7 j1 C/ T" l
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* `, x& d- f" ?+ \$ N+ h/ z, A
% X/ O, ^8 m6 x我大约calloc  每次共计大小为5K*16bits,4 h1 Y* L$ I( Q' @8 R; i
而默认配置才0x4000、需要改大。( y9 w, ]5 V, E3 a) Z: w+ u

8 A- i/ E3 d; _" ^( S% @; G/ O% c
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */9 h- ^+ c. S+ W0 N$ w
Program.heap = 0;
+ R( c" z% ^' l* v* q: AProgram.argSize = 100;  /* minimum size */
' z5 {; ?3 Y  ~3 }Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-7 09:12 , Processed in 0.048916 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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