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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

, l- j  W  |8 K/ b& B2 G    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256! x: ?$ @- X7 p: [
- N' w- K9 ^6 \5 N0 K7 N* u* B2 g
其他程序段。。。。。
4 U4 K9 k. S7 p" M+ _) P - ?7 Z; y( V" ]4 Y, h5 w
   free(x_d);
, h. H9 J8 x) O- I  o
3 U( z0 L& k6 J# H# O使用DSP侧单独调试功能,验证动态申请没有问题,/ @" m8 Q+ j% f5 I4 q, \' x
8 w( L1 `( s( z: [& p) G
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
. B" e" I6 E* ?

" \  G& z$ V+ \, F( |. _& u$ K
! f1 f" P( \. p5 {& R) {2 I' e1 ^

2 x3 i0 I$ q: G: f, \
! w9 ?9 q. \' Z" S  C9 w) @6 _( j' T7 Z8 z2 e

" G! R' B3 a: X5 V# p
: E, M0 w- }# G8 d7 V
! z( y3 n/ V0 |( q5 s9 N1 K1 P/ m5 |* I2 o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明4 [9 @. P3 C  V  k3 g2 W7 J
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下( s- H- L! Y" f5 y
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
4 [0 o7 v/ l: j; q1 U. \

7 V% s1 z# e+ ?4 |- n是不是需要在DSP.CFG中进行配置0 a/ [" d; O+ n" o- @- U4 `# M+ I
我现在的配置为
% {2 R9 q: q2 K0 Z8 I# O: o5 e; P- u6 f" N5 M; r$ X+ M" O
/*
/ j2 M7 {: @: G+ R- a *  ======== Operating System Configuration ========
9 z/ X( d0 c, r* y4 G1 z/ Y */% g6 `0 Q: i$ o5 D8 u
$ [& q9 z/ E% `, l5 J5 V% K% B
/* no rts heap */
4 C1 r0 r: I% DProgram.heap = 0;8 }! f4 v5 I/ Y2 F2 G% M! E) S! s
Program.argSize = 100;  /* minimum size */
& R4 K- b: b/ ^Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 c5 n: H' X: t; f  U' \
' t2 h2 [& p3 Q! ?/ ~' n
/* create a default heap */8 ?5 F2 g. [  @  k
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. m+ O) C9 q4 @7 `; uvar heapMemParams = new HeapMem.Params();
$ f% c! E2 B% R: m. theapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大8 s0 t  T2 v& J3 p8 k  `
  z3 `. V0 k* |& h& H! {# }" c
var Memory = xdc.useModule('xdc.runtime.Memory');1 I* y* I8 o8 |3 g! b. M* h
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
) d- _+ Z1 S; b2 y3 B3 c  J+ y/ T  {9 d! a+ m. m
/* configure System module */
8 v2 b0 [$ s5 I2 p) {5 ~0 z( r7 t. Fvar SysMin = xdc.useModule('xdc.runtime.SysMin');; P7 T8 r- O) O& j
SysMin.bufSize = 0x1000;% j% O1 Y+ v5 ~0 R# v$ c
SysMin.flushAtExit = false;
2 a, A) _, a2 _0 H
! I2 r4 o5 @7 m  V, f# bvar System = xdc.useModule('xdc.runtime.System');' Y" f1 N: w+ O. f% `, ^7 F" i
System.SupportProxy = SysMin;
, C: S7 ~4 h% q; a0 M- f$ t
+ I4 ^- i# K8 m8 k* v/* configure SysBios to use the lower half of Timer 1 */0 T3 b2 [* c$ T3 {
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
6 m1 {- F4 Z6 h: C/ Xvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
4 ^3 l# Y; K+ r8 XTimer.timerSettings[1].master = true;
; S7 f) l. j) O  V% `Timer.defaultHalf = Timer.Half_LOWER;
. _+ b8 D6 _0 P2 g/ g3 j, ?Clock.timerId = 1;, x: v1 H  b9 v, i4 M) w

& ^, R1 W( y/ k8 `% w
/ G: k9 A0 z/ t8 l  A/*
4 d  |. h4 Y! j5 w+ r5 U0 W+ B *  ======== Miscellaneous Configuration ========
9 c. E/ ?, C( w! a- X */4 w5 V1 c) v1 K; L; I! \. ~
3 S- }3 z9 [2 B- Y
/* set default diags mask */
- {$ R& D- L# g7 z+ ?$ ]6 r( avar Diags = xdc.useModule('xdc.runtime.Diags');
  y0 L* Z1 s2 P9 avar Defaults = xdc.useModule('xdc.runtime.Defaults');) l. a: U. R; D
5 u8 Y( ]5 ~5 i# X- V! c9 t+ }
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
: y: o# ~: s+ x) H2 ZDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
/ B5 T6 C9 C4 A6 a) i- zDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
+ j2 [( X; e: l; F) ?Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
2 r* N$ ~  P) h0 H1 ADefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */1 P6 w9 _9 X  V0 f4 L
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
$ k! C  A) C+ h, c5 PDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
  }! x$ @3 c/ t, yDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;7 e; E4 G% P! ^* K" B$ @7 [; s
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;' C& P% k3 D2 R& P* f
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
* W4 N) A5 y4 }1 d% a. j% vDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;# R0 g  e. A2 b# G9 r% y9 q5 b9 ]
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
0 `* E: Q- q1 _( h) UDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
' d- ~& z4 M1 m+ X& ]' [) H$ y7 EDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
5 T! }, Z# u, W  U# _$ ]2 |% O7 H
0 {0 ^$ c" ^% v% d/* override diags mask for selected modules */0 _/ R' |- k, \+ ~; ?
xdc.useModule('xdc.runtime.Main');
4 V* ~" `$ f# bDiags.setMaskMeta(1 d: [1 E' G. r9 W+ J0 {( U6 O, h$ v
    "xdc.runtime.Main",9 x1 u4 H# l2 |9 [  A6 e. o, I, _
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
) I8 \9 F% [. A' y3 A+ t    Diags.RUNTIME_ON4 |3 k5 f6 ?- q3 `
);2 T; W: ?: V" b' t# n9 u) e- V+ ]
; q. H( Z- D$ u
var Registry = xdc.useModule('xdc.runtime.Registry');
+ W3 K, \) Q1 o1 R6 R! h  F, mRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
( s' X6 `# c: L: nRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;0 J7 c6 }# V0 E- y+ c
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;3 \( V7 X6 t% [/ S: m
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
: }# n! j# O* W- I* Y* L( `
8 G1 Z  ?+ r$ i% R% T. K/* create a logger instance */
0 d2 I  j  W  U2 v4 W/ w& |var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');, s+ V- s8 p, e7 x) G
var loggerBufP = new LoggerBuf.Params();# X  A9 }2 O0 o/ W/ v# W9 P& k
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
) J( ~5 A4 L9 o- mloggerBufP.bufType = LoggerBuf.BufType_FIXED;* s+ x" b# `, H9 _- Y; x% I
$ \$ a3 t% d  x7 V: u+ D9 x5 A9 e$ t+ U. o
var appLogger = LoggerBuf.create(loggerBufP);
0 |- z( W) T: K5 y: v" lappLogger.instance.name = "AppLog_Core1";
/ s1 o' W  N) Y; h( I5 ?Defaults.common$.logger = appLogger;
9 n8 \( Y( b  T. }: \Memory.defaultHeapSize = 0x8192;    + h+ ~) M; D9 X7 K
Idle.idleFxns[0] = "&LEDStatus";9 c, n7 A! Z; |
Cache.initSize.l2Size = Cache.L2Size_32K;* T& o. @2 D: V- k2 p4 o6 C

. E; }) H; B& p- ]" n0 C
回复 支持 反对

使用道具 举报

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 */
$ @$ C! \) m9 V% l5 J. avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( t* w- n: S; u- M
var heapMemParams = new HeapMem.Params();7 y3 z2 ~$ ]( H/ W0 t: N) |
heapMemParams.size = 0x4000;
1 \5 h* M, S2 H: d$ {/ K% f1 @& v& l1 N
var Memory = xdc.useModule('xdc.runtime.Memory');
2 O, w1 O: y5 f% _Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
# H( o) y/ g/ _4 m/ X, s1 ]% H- `- U& O# @: u; U9 s
我大约calloc  每次共计大小为5K*16bits,- S# X) I' C; {. W0 G
而默认配置才0x4000、需要改大。/ N' b5 R. `8 Z0 N3 d) \2 U7 ^( y- h
/ j) h! z: R- G& U% h% c4 P7 k
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
0 y; `  E8 ^" |1 H/ H" @6 W( G  KProgram.heap = 0;
5 g* d, s2 C( bProgram.argSize = 100;  /* minimum size */3 ^: B: ]' R# X
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 07:56 , Processed in 0.044886 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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