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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
0 N7 O8 ]* [; f3 B! K
$ i1 P/ z2 Q2 |, ~" U    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256# Z- U# s; ], P( C: b

, s4 M) A; ~$ f6 ^0 Y0 m) O, t: Z其他程序段。。。。。; q' r. E8 ]+ `  D7 ]; O) J% t0 X
9 F5 s! A+ O! N- k* C
   free(x_d);
7 x7 K3 i: J. k: s" v, G6 e6 E$ A$ E
使用DSP侧单独调试功能,验证动态申请没有问题,
! ]" o# e* W+ l
9 B' }3 |! I$ J- I但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
- r- D& S" s7 R) o6 C7 P% b1 [
4 q* [8 }4 B9 d1 v/ H
9 j# h5 y$ L+ t4 l1 K  t
" ]& }  ~- D* {- p
9 d( h5 E  y' {4 E* o

' [" q* C# w+ k! D1 k: k4 l1 G% J, t& D+ G% Z

4 \6 w7 z! E8 e! A
' L  t* I: o$ \7 ]; A. i. ?0 h% y$ |5 \  B7 |4 j- t8 Z

5 o* C/ {' T7 j1 O. s. n. Y0 S% M9 L
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
% ^9 x5 E4 s1 j1 g! U我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下( ]8 a* p' C; E. R
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 d: Z2 C3 L- L0 X9 I! Y
, j6 [7 Z6 y- b( y- k9 r
是不是需要在DSP.CFG中进行配置& W4 W/ l) F1 M9 `) B' \
我现在的配置为
- {& j) F% [# J5 I& r. p6 A4 y
5 j' E# z! U" b/*
/ F/ h) |: B2 A *  ======== Operating System Configuration ========% Q7 ?  y* b, I) {% P# s
*/& U' y9 Y' @. |

  D* p* V$ O1 o$ ]" w* C/* no rts heap */4 C, e% ?. u7 q# V
Program.heap = 0;
0 _4 M& u- U- J& x/ QProgram.argSize = 100;  /* minimum size */
  R6 b% h9 l6 Y8 K; P3 A& @Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
" X# O: h( D. C% e& Q1 Z- l5 y1 T
% y% ]: R% Z/ ?4 g9 }2 t/* create a default heap */
. s+ p; s# O8 E. p) ~0 b0 g+ Hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 I# ]6 w3 Z- F) x/ x
var heapMemParams = new HeapMem.Params();
3 R- s" W% H/ A; ~( j, bheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大! Z4 `/ R( H5 s5 s& b

6 L% @9 |. D) V
var Memory = xdc.useModule('xdc.runtime.Memory');3 V( [# [! A" ~- y& \2 [9 f7 X
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);1 k/ p  }" ^/ b7 l( \/ Z. |; Y. w, d# r

2 t4 K9 m$ g( L4 t! ~/* configure System module */
1 @$ t* B7 D: p3 @, Pvar SysMin = xdc.useModule('xdc.runtime.SysMin');9 g8 W; n. x( w. p% i
SysMin.bufSize = 0x1000;& h! K& J; Q5 T6 n6 ^2 Y! y
SysMin.flushAtExit = false;! c) i, r5 H  F; |+ T9 \0 u. I

( I) Y3 N; i; X( |/ z2 d6 rvar System = xdc.useModule('xdc.runtime.System');
' P6 n( n& K; ASystem.SupportProxy = SysMin;" ]2 F: j  \; e/ d0 ^

5 k( n7 u6 C) l$ B7 d# {1 n/* configure SysBios to use the lower half of Timer 1 */
# k0 [: I/ ~0 Z$ ^/ j1 ~var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
0 {3 }( P2 e% {, ]/ _6 d9 {7 u1 X3 fvar Clock = xdc.useModule('ti.sysbios.knl.Clock');9 r& Y! ?$ t& P+ Z
Timer.timerSettings[1].master = true;1 a9 {6 f  Q0 N2 H& e
Timer.defaultHalf = Timer.Half_LOWER;# Q( D& ~6 r, }0 x, w
Clock.timerId = 1;# H- X2 s1 c) ~9 j+ x, A
8 _7 z3 O& V+ u( n  Q/ U! |+ g
) g3 ], Z+ J; X, R0 D0 D4 F3 U. y$ F: L
/*2 H# j; ^- i& x
*  ======== Miscellaneous Configuration ========
5 [' y) W1 [  [8 M6 Y */
0 n8 j  e. G5 p% r& X3 G$ t' s, ~/ F
1 g' W/ v: Q0 C2 d9 o/ y/* set default diags mask */
% A1 \7 N1 J1 K8 Y. m& ?% ivar Diags = xdc.useModule('xdc.runtime.Diags');4 J, }3 c4 {: l
var Defaults = xdc.useModule('xdc.runtime.Defaults');
% M/ H9 H4 z& \5 ~. f
+ F0 f0 [- g, H' a, QDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;- E  Z- B3 c* E& M! {# K& N  s
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
5 P' Q! B; d, sDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;! Z4 R. S3 J. L% P
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
3 q' d: q5 o8 h; y$ f' [Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
+ [" ~2 ^( H. u& P- BDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;, Q" A" @" G+ d  w- z; N, i
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;, B! J- p1 }* p$ V7 m( |
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
- a! @3 p* u& RDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) b8 o5 T) S' |6 l4 @, g1 d# yDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;7 A, R8 ^  g) |5 U
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;' D% }9 _4 n& D* j  g
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
% p$ a8 [# @; v  QDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
9 g! x" c: z2 I& I6 O1 yDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;- ^: _) ?# ^; g/ s
. `2 o1 t' v5 p& d( `
/* override diags mask for selected modules */
' S' \* B: @5 W7 rxdc.useModule('xdc.runtime.Main');5 G  C1 y9 V/ `. u$ C
Diags.setMaskMeta($ N1 f' \/ [$ ^3 o# D: R+ r) G0 ~
    "xdc.runtime.Main",
4 D/ _: |7 ~# N! ^8 @5 T/ [2 i    Diags.ENTRY | Diags.EXIT | Diags.INFO,
& ]2 y7 K% N5 _* ]8 y. a' O* e+ W9 J    Diags.RUNTIME_ON* {& {0 y2 J$ [
);
% G5 P5 g0 S4 s6 g8 c+ I. g
& I  K7 ]) S# g2 I6 d* Kvar Registry = xdc.useModule('xdc.runtime.Registry');" A6 L0 m3 y: q+ y" R  s. k8 [- h
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;8 Q6 I+ M$ [4 J, n( K( s' r  x0 U. c
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;5 u# V; S  D7 E# W3 ^$ Y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;- B* T" {! B, E( a( j
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
! Y( w6 p/ [- \- n* h
6 ?. M* z" I1 F7 b* ?; F/* create a logger instance */
; ^4 a& E, h2 `: `! o/ Gvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
, q* G9 Q/ f$ q" P, k  t" {2 dvar loggerBufP = new LoggerBuf.Params();) z. `" j4 z: k; u5 T
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */( V; n4 h% T2 g: Z+ y- I; I+ Q# I
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
/ L3 f, V- g3 I/ U
8 P& A; g) x: M0 ]; r4 \var appLogger = LoggerBuf.create(loggerBufP);" u+ Y/ _, ]0 U" h0 A
appLogger.instance.name = "AppLog_Core1";' h; y( b5 R- G. u' A) y
Defaults.common$.logger = appLogger;
7 y" h& ?! G- R; ^# j( r. IMemory.defaultHeapSize = 0x8192;   
& B: V3 v' S6 H( IIdle.idleFxns[0] = "&LEDStatus";4 k  J, ~/ }3 d: g4 n
Cache.initSize.l2Size = Cache.L2Size_32K;
$ q9 B7 W4 R' p+ n% t. T6 B/ C" P5 x; S' `4 u" Z
回复 支持 反对

使用道具 举报

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 */
7 o1 _7 k* ?6 L, s9 v0 }var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 a! ]2 v$ ~) s& z2 O- |. n- w( v" r
var heapMemParams = new HeapMem.Params();
& e, S% P7 W* M$ z- y" U: l$ ?heapMemParams.size = 0x4000;
" |- ~4 G- H, M# Q+ ?' i
" ^" d5 Q  |9 lvar Memory = xdc.useModule('xdc.runtime.Memory');
/ A* [& m0 g* L8 O( G9 {/ S% T# XMemory.defaultHeapInstance = HeapMem.create(heapMemParams);! y) G  Q3 o+ n2 p2 R. `6 b

) W% @* y2 Q' s. C0 L8 S我大约calloc  每次共计大小为5K*16bits,
" T9 v8 |3 U9 d0 |, M1 Y而默认配置才0x4000、需要改大。  Y" h" a* C# d/ t
  g. C/ O9 x; ?# ?$ g6 F
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
) O- V" M0 i- H1 FProgram.heap = 0;
1 p0 e  I/ g  i7 G1 }- i4 nProgram.argSize = 100;  /* minimum size */1 r3 O$ t$ w( `) @
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-7 02:57 , Processed in 0.066206 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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