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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构, `% x+ t* G6 I! D

; o& g/ ]; j/ Q$ @    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
. I* r/ ]  ~1 r, D2 x& a( m; g" x9 L" w: ~- ]% O; \
其他程序段。。。。。
+ u4 a; f! m9 ?( W  A+ K
6 k1 X& }4 G0 Y   free(x_d);
1 _0 c! a: ?2 K) V2 c. T: X
" I* Y3 \4 M3 W: n: z! ^& p% l使用DSP侧单独调试功能,验证动态申请没有问题,( b/ {$ o9 v! \4 ?" ]9 q& T' a

$ x- J! F( I5 o/ ~) [! f但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。* c. I5 ?. W! B0 f9 L8 t( x
4 e: S  g( c3 U1 c+ Y

1 b0 a$ i# n' w! {  [$ N& I
6 g0 \8 e9 C5 S0 u
' ?7 s1 \8 C, b# B4 z1 g
8 |# D1 Q% [# M$ {& f
' e6 d7 h* H  x4 A5 V" q3 ~- ?4 ^. q( N7 y1 o/ x+ ~

9 \7 J9 x; Y+ j( n' T' S
: P2 Y% Q" I' o+ ~5 c- Y+ b" @8 T- Y; C5 s' r3 {6 @3 J1 ?. g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
$ k* T4 |1 E6 E( t; M/ y6 A我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
6 b( Y2 i! V- Y* c(不过疑惑的是,为何单独DSP仿真就没有问题呢?)9 [; |& r* V6 B: n9 J$ s& Q
* G. m: z+ ~- H4 j! n0 B, Y0 s: _
是不是需要在DSP.CFG中进行配置$ b8 {2 h( K) s) V& [: `) K
我现在的配置为
0 k" m5 S4 w% o) W6 N+ K9 C5 x  @1 _4 h
/*
4 I$ N' {( Q2 x6 D *  ======== Operating System Configuration ========
9 J& y0 T8 H1 a6 K/ e8 B */
+ L) k" b' y# K' V
; q# J- j0 y4 h/* no rts heap */$ H/ P& B1 }/ _. U1 z) G
Program.heap = 0;  `* @7 ?1 k5 Y7 }7 K9 O& ?
Program.argSize = 100;  /* minimum size */5 t  L' r: e! E
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 c8 ]" o6 v4 P

& b1 i. G5 l& A9 R/* create a default heap */
4 `% A+ U/ g1 b! |2 F/ kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 U' z, e$ G" bvar heapMemParams = new HeapMem.Params();8 T! ~: ~8 J" r7 `- A9 W& m. m3 `
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
' J# n& s# E2 I+ z
; b3 Q/ R* |& }8 U' J6 F% |
var Memory = xdc.useModule('xdc.runtime.Memory');
: X1 R6 H+ A6 T6 O' J* T' \Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 D  J2 B0 x) n  Y0 W' }/ A- q6 l) Q! x7 B  O2 v
/* configure System module */
5 g5 j% v9 W$ `var SysMin = xdc.useModule('xdc.runtime.SysMin');
% f2 E! R, c% _SysMin.bufSize = 0x1000;
2 S+ A. K5 e$ j# M# HSysMin.flushAtExit = false;% a7 \* I, C2 ?

/ }0 y. M4 }- V# U5 }var System = xdc.useModule('xdc.runtime.System');
' J3 t5 J) r1 b, F# V+ W) L2 aSystem.SupportProxy = SysMin;$ I# P  ?, ^1 M
; }' T9 b/ s6 e! m6 @* x
/* configure SysBios to use the lower half of Timer 1 */
; q& q4 V2 x; w/ T( `5 Z9 O5 }% Jvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
% F3 [% ?. L" w1 g' N' p! }var Clock = xdc.useModule('ti.sysbios.knl.Clock');2 M$ i; x1 b, n" X5 t
Timer.timerSettings[1].master = true;
6 }  p. ^3 A$ D8 E% N' bTimer.defaultHalf = Timer.Half_LOWER;$ D8 W& y' o- G9 F
Clock.timerId = 1;3 n7 p4 G7 ~4 t+ l! \" M
) M1 R5 \( P6 ~1 i) ]
5 V: p( L7 m6 c3 u
/*
. j8 X! V3 f7 {: [, m *  ======== Miscellaneous Configuration ========
% e% y3 I  G4 d, [- y+ H7 d */
- L7 |/ l: B, Z/ B) o9 N
* }8 e8 T# r: _! y% Y# `/* set default diags mask */
3 A; r% {' B+ Q& w0 Z9 Ivar Diags = xdc.useModule('xdc.runtime.Diags');
1 s/ j1 C; }0 D( j  J* C& |var Defaults = xdc.useModule('xdc.runtime.Defaults');; P3 U4 H- r" J$ ]4 {8 v% T3 r( Q
; Q- F9 c7 M3 z: b3 s9 c, W
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
. A9 f; d7 M0 t' I) Y) C+ M+ BDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
" i: Y  Y8 G- Z0 sDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;' s: B$ x  E1 @; J4 `* P1 Y; }
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */8 h$ H+ c- [" r
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
/ _4 F' B8 B3 L7 J, O5 H# _Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;: B2 v9 q+ n: d! R: i/ o) P" f
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;! l( k: [8 T+ {5 |& d
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
, g5 Z% O/ ~/ ?" A$ s4 ~6 iDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
: E* h& l8 Q5 \+ YDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
7 j% x4 Z$ B9 c/ T$ [6 xDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
- o9 R! Z4 I) YDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;+ ?% T6 a" x9 O: ^
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;6 a3 P6 t" Q  c) [) |
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;( l1 v; R0 l) N7 p. @
. r. m# K3 C: p9 R7 b' i
/* override diags mask for selected modules */2 m& E2 T. l+ H$ ^1 I8 W1 H
xdc.useModule('xdc.runtime.Main');% [# N) Z- |' L
Diags.setMaskMeta(" _3 @, d; D: |9 ]  {
    "xdc.runtime.Main",
: O  r- }$ j$ u    Diags.ENTRY | Diags.EXIT | Diags.INFO,
; ], {* Q' p6 S0 H' T! d6 e    Diags.RUNTIME_ON
/ ~: U% W' _5 z9 r* c1 g);4 s4 N7 g- X" y( ]  \$ X7 [
6 H- {9 a" ]: X) v
var Registry = xdc.useModule('xdc.runtime.Registry');3 ]  ^7 c+ l1 s' Z; i/ m
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;! u8 K+ f- {; W4 {1 Z
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
0 e: Y$ B$ d+ v7 j1 fRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;& x1 Y: w  J' C% T
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
  K' D4 O. w. N0 }) v/ Q! f
# d9 V6 o+ m) \/ C: z* A% t/* create a logger instance */
4 J/ o( B5 w* D0 U: [var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');6 C1 ^( @$ L. B. a6 t) X
var loggerBufP = new LoggerBuf.Params();
. ~+ ]# {7 z/ K8 v& v/ w1 |loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
" b! C5 [, B$ |& QloggerBufP.bufType = LoggerBuf.BufType_FIXED;( V( E  e3 H, T+ q5 h4 h) {, G

! U! ]3 `6 x! Z* _) I! qvar appLogger = LoggerBuf.create(loggerBufP);6 g6 T2 o/ U# g0 n( |* _' h, ~
appLogger.instance.name = "AppLog_Core1";/ f  `6 T/ N5 i' u
Defaults.common$.logger = appLogger;) _% Y- d0 ~1 D1 T' r$ u
Memory.defaultHeapSize = 0x8192;   
, D3 }/ _' G- k  v+ _; _6 C# I, J: p, KIdle.idleFxns[0] = "&LEDStatus";8 ^3 a2 S4 ?# l# _* f# J1 S/ v
Cache.initSize.l2Size = Cache.L2Size_32K;4 s% S' ?: Z4 ?
! }& }1 n" o; H8 D; D7 R; t
回复 支持 反对

使用道具 举报

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 E3 @- r; \# t- Q6 F( lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 n; n+ t. F2 i" J; g( Tvar heapMemParams = new HeapMem.Params();; m' W- R0 N) c* _, V8 h: E; C) v/ P
heapMemParams.size = 0x4000;
% r* Y+ ]( B* Z2 Q  L& F1 A+ i! t2 A' u3 ^* }4 b* m/ Y7 Y
var Memory = xdc.useModule('xdc.runtime.Memory');9 L" ~  W$ G1 i$ [, C) D
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);2 g& L) D* r' A, \9 s: i0 ~  J

9 [1 `( h1 A: v, P. K我大约calloc  每次共计大小为5K*16bits,
9 e! P. z' E8 ~, p* S1 S而默认配置才0x4000、需要改大。
+ l! M& [- `0 Q5 |9 t  U! F, s
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap *// ^, _, k6 O) i  ?7 L) E
Program.heap = 0;
+ K# J1 o4 B6 F( \Program.argSize = 100;  /* minimum size */1 F& Z/ A/ G3 @5 P& _: k
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-22 05:17 , Processed in 0.040928 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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