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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
, E& _$ d0 g# x' I. Y9 E2 ~  D, |. r: w0 }& ~4 {
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2565 Q% k* M  X' @- e, j9 ]

& B" N' W' J4 Q+ n) C其他程序段。。。。。/ c% s/ x( x4 _& y; d3 R% o$ P

. ^& F! X, ^7 d0 B9 a   free(x_d);5 g1 e% G6 B) |- \, z9 a7 f* Q$ Q

& t; Y1 V0 m6 d! V6 F使用DSP侧单独调试功能,验证动态申请没有问题,
! M) G8 p( ?  V4 R$ g
  C- C: r8 v1 `" ]" n. Z+ B9 m但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
* t+ c9 U) p0 i% r, K- c4 R' Z

9 y" a% a$ c# W+ Y) ^7 p% I8 W! c9 u
- R! S. x* R. z7 V- B$ C' G
* n' D. O/ {, E- K3 J6 p9 k8 I6 e" G

) F! F& Y" `6 q- c6 t
0 T5 A! x- G! s/ E) E: q5 Y
0 v* H+ n6 {, X- O
3 B: L7 f( a6 `6 t. U9 w4 g# @0 i: W* G7 Q; a1 ~* M5 o" T

9 e2 c- A3 T' ?. R+ |6 b3 u& z& B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
% S  \6 }! }1 F! d5 V0 }! r我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下% [* m. ^* Y# Q: M2 C* V2 v! i
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)1 q1 ]% c# w+ e# Q# L
) a# d5 Y4 u2 N& L7 Y. ]
是不是需要在DSP.CFG中进行配置
; C6 {2 [9 B  M8 S" |我现在的配置为
! B& _# s+ ^7 e3 ]+ ^  q- c! z4 X  f
/*7 t: c+ r+ i- m  k1 c
*  ======== Operating System Configuration ========2 J% z; Y+ m: w" k
*// J( P' {* {2 w7 A+ o) x

( Y' l2 v+ ~" u' s/* no rts heap */# E& p8 H9 @9 J6 d+ @
Program.heap = 0;! }! w2 E" n8 @4 K5 \& E% Z, h' J
Program.argSize = 100;  /* minimum size */2 C% Z7 W+ S( E3 Z% _! z9 }! }* z
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
, ^# c; ?+ C: _! e" L  B2 g! ?. P5 T3 [" \  k
/* create a default heap */) @) t" Z% b& t9 [: ~& z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- c  {, X4 [" |4 J1 h( E" k1 Yvar heapMemParams = new HeapMem.Params();
0 }* F/ R- k3 Z$ `& K, nheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大, {% W# P6 z: Z
, P$ z5 c5 I1 Q
var Memory = xdc.useModule('xdc.runtime.Memory');. g# |, C' D# Q5 A7 h
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ {% H# b- P( _! L. _0 R3 W4 v: {

/ B* z) U$ t# E# S. t/* configure System module */" |* l% [; i! S) z7 s! B) u8 N
var SysMin = xdc.useModule('xdc.runtime.SysMin');
! H9 U3 [4 Z& }$ ~, ySysMin.bufSize = 0x1000;8 J, y5 ]$ q8 K7 S9 Z7 |
SysMin.flushAtExit = false;
* s5 Y$ E" [# D6 F. e) G7 B- I. O# P
var System = xdc.useModule('xdc.runtime.System');
9 u8 I; \6 P, y2 l* lSystem.SupportProxy = SysMin;( W7 T: h$ @# f( `* M

/ Q( O. }3 }, X/* configure SysBios to use the lower half of Timer 1 */
& d, n* b! i* ^1 C" V, F  ]var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
/ k: g5 q% P; y' K9 b: Qvar Clock = xdc.useModule('ti.sysbios.knl.Clock');7 n. Z$ B5 L2 k" t
Timer.timerSettings[1].master = true;
, W/ {& S& c/ t* J2 [4 KTimer.defaultHalf = Timer.Half_LOWER;/ U3 @2 x5 F! _* Z; y
Clock.timerId = 1;. n- `( X7 ~8 ^0 Q0 ~( b
% I8 e6 t8 V  @9 L) }6 L

) l9 u! x$ Q. Y8 a' }7 ^/*
3 m) @2 T7 `5 ]$ n( p+ e# ?6 k *  ======== Miscellaneous Configuration ========
/ v  m* l9 i3 P- e */8 E* B9 i+ s+ E, j" R( V0 `
" K! R3 {$ F. D  `
/* set default diags mask */2 f+ z( n& {; Q& c6 M
var Diags = xdc.useModule('xdc.runtime.Diags');
& v, w, }& c) u( t1 jvar Defaults = xdc.useModule('xdc.runtime.Defaults');0 a& o/ N+ ~; R6 g# Q1 ?

- W/ q4 `$ F( T% `3 C# D1 _: WDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;" J, ~; f) p/ T3 m# O9 e- l
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
; W3 h1 l0 t" f$ m1 m# x1 ZDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
! @. b8 c5 e3 d: I9 z# b% ^: |Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
3 k* S* n2 f5 L0 ADefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */0 z3 n/ _0 ~. X: W" _/ }
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
  j. U3 Q; e, H% ]  L4 u0 dDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
& a# p4 A0 R$ @' Y2 ]' W) TDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
% R  p' M: x! F& Z' e5 I- Y3 _Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
# w$ [8 a# a! UDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
7 |1 P9 _9 a4 S6 i! KDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;3 C/ }6 p( \3 ~
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;1 y2 ~9 ?5 s& w2 X: Q' D* W( |
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
* s' K* h6 H/ ~Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
  {% q+ l" Y# ^; i% O9 s9 Z
( l+ ^0 _# B. u/* override diags mask for selected modules */% ?& M" o) }9 `9 u% d. p
xdc.useModule('xdc.runtime.Main');8 i0 z* F5 k  x3 N
Diags.setMaskMeta(  R0 O4 N3 I. s8 O) _
    "xdc.runtime.Main",: F! h0 E1 w2 Y/ z* z, O2 m3 l
    Diags.ENTRY | Diags.EXIT | Diags.INFO,* C& O0 l5 I* c% F7 L/ U* w
    Diags.RUNTIME_ON0 u8 M, i" s8 d, i8 S4 a
);
. N! s  v$ |  s& N! _& B/ B; |# `8 k
2 B6 h- I3 h* i" X9 B8 d. J. H: S, yvar Registry = xdc.useModule('xdc.runtime.Registry');
& O% F: r( H3 S* G0 r6 fRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
7 I) K7 a. I& ^: F. b. PRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
* h; G- J' \8 ZRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
9 y; @& Y# B% N5 g; fRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
6 W8 E! O2 z" a/ {: G# |  _. j5 K3 \  b6 T/ k
/* create a logger instance */
- X, A* M4 i( `4 J0 h9 S$ fvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
+ l) a# L, O2 S9 Dvar loggerBufP = new LoggerBuf.Params();
3 `2 i$ [6 Z" ], O2 W8 KloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
! U* y& u6 T& y# Y* Z" C+ S+ {loggerBufP.bufType = LoggerBuf.BufType_FIXED;
. F" t0 K: ^/ d6 X- H/ j& L
7 A- K; G9 {& L3 S" }# e3 Xvar appLogger = LoggerBuf.create(loggerBufP);2 P7 F8 [# \0 d$ l
appLogger.instance.name = "AppLog_Core1";6 |/ `) U4 ~8 @4 h/ `  y' o0 n; N
Defaults.common$.logger = appLogger;) m% K4 z( _7 K- {8 q
Memory.defaultHeapSize = 0x8192;    + A2 k& D* z: p, ~
Idle.idleFxns[0] = "&LEDStatus";
) M8 I( i: t9 t) z; y# ~9 ~Cache.initSize.l2Size = Cache.L2Size_32K;
" y* R6 a1 F2 J1 T- }( q3 i. ^1 [+ }1 b0 a5 Y- j7 s7 q. Y) q1 _
回复 支持 反对

使用道具 举报

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 */
+ n& v$ S1 q: ~, y- t0 nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; q2 ]- n/ j8 P2 o( L
var heapMemParams = new HeapMem.Params();8 S5 }: R. g6 i) C
heapMemParams.size = 0x4000;
3 @! o, x$ }$ t) j) C" b+ n. @+ o+ p) y( u. V' r4 G
var Memory = xdc.useModule('xdc.runtime.Memory');! z: G/ U) g4 _4 |9 f" G
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);, j: O, s- P2 Z
0 ?: o( l  n( }1 `: T, S
我大约calloc  每次共计大小为5K*16bits,0 V, ]. e+ q. P1 r
而默认配置才0x4000、需要改大。4 w- v" I$ Z. K2 G

/ l/ X. {* i1 a) Z0 u3 B
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */8 l. e6 y3 p  {* n6 W/ ]0 b
Program.heap = 0;7 G: z6 c3 t( `( M9 L8 C4 M! ^7 {3 T
Program.argSize = 100;  /* minimum size */- j+ E5 w7 `1 w7 b. A* {- C( p
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-24 06:54 , Processed in 0.041411 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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