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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构; E, _% K2 A8 j' k. Q
! O- j. f8 x- o- m! B6 I
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
* p3 B7 U3 |' b( f1 u- H% ~
  @" Y1 T4 j6 H* b, W+ s2 }其他程序段。。。。。# U6 ]" W: W/ z6 t! d: x3 F1 W
0 f4 J( _6 ?1 n* O
   free(x_d);
) n4 G# h" o' b% x) G. _2 t
9 _; l$ c  Y# ?使用DSP侧单独调试功能,验证动态申请没有问题,' s$ J9 X8 y- v5 U2 [
( s( M6 t' f5 Q' r( A  G
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
& K. j0 L6 Q7 Q
/ v: q& w) F* Q8 b
1 R( o3 g: L" H1 s+ {$ s

6 F& [$ C, q/ k3 t5 |
' H2 I* M) d9 P/ X8 R
2 `- T  E$ M5 B# d
4 H! W! s6 j. v/ @5 U7 n: j+ F$ x5 J- X5 o

6 s6 [; E3 N1 {6 r. W8 L$ n! I7 t2 Q" W  a6 [; C* R  H
: `7 J5 p4 A( W/ F& @, }3 [( J; s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
) h" R) P8 ~+ z0 V1 E# ^* V2 y7 zProgram.heap = 0;# H( |6 S$ X, L
Program.argSize = 100;  /* minimum size */
3 |7 c' k9 Z8 H2 V- r4 b+ W$ N# w- L2 SProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
0 q2 a6 ^1 ^, e( F1 i* r; i( M" Ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ g. l% C* |2 d, p) o1 s! E& Vvar heapMemParams = new HeapMem.Params();; c+ |: s/ d- P2 P% T/ h
heapMemParams.size = 0x4000;
2 M' S' c+ {( h) `  h
! [. D( p( q- ?var Memory = xdc.useModule('xdc.runtime.Memory');
+ F1 C' }5 Z. D- c& L2 WMemory.defaultHeapInstance = HeapMem.create(heapMemParams);2 p1 K: M! k+ z! D! w
& l/ L: A/ O8 E7 V8 N
我大约calloc  每次共计大小为5K*16bits,
6 v! y% u: i8 ~, d而默认配置才0x4000、需要改大。8 m5 Y: j  \9 m7 ]( G/ V9 i

: G2 o" B$ o4 w3 d9 B; J! }
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明% j0 R* [* D* w1 P7 Y9 f
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
  [8 V8 C: [+ C/ O- I* ~$ Q(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
0 \' G1 U" G% |" y8 h+ H; I
9 V6 r$ W/ Z" I0 j4 r  N
是不是需要在DSP.CFG中进行配置! d8 w( O8 a, B( ^
我现在的配置为0 g- M# ^; S0 \+ h9 M5 e

, P0 ~8 `5 h( N4 o/*
0 e- c7 d5 K9 V6 q *  ======== Operating System Configuration ========0 M* n2 t$ V* U4 @0 v  W3 ?3 `
*/7 ?7 f/ ]8 g' }" \" F/ B& e% n# ^

' j$ M5 T3 s0 |/* no rts heap */- p) i2 }% c- v; c0 C/ X5 B
Program.heap = 0;7 T; j" e! L7 ]& \
Program.argSize = 100;  /* minimum size */3 S' @# b: A6 a0 p  y4 |6 N" B% p9 G
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
# B5 Z, B  R( |. r: k2 N. K- t( S2 K) r( @. U8 i
/* create a default heap */
4 o- K% D- q$ O7 O  m/ }, pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( T! r3 Q: \& B
var heapMemParams = new HeapMem.Params();
. `- k/ v% h) U' hheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
, H- t8 E+ s/ w  K8 [- u: `' x& C) D& u7 R  Q
var Memory = xdc.useModule('xdc.runtime.Memory');9 c& M6 I9 {' A; {- C! a& Q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);7 k% w0 z- I; t5 O

9 Z* T( O% C) L% E/* configure System module */
6 v$ ^( q1 g- ivar SysMin = xdc.useModule('xdc.runtime.SysMin');
8 [( r9 ~" S2 e5 A- r+ u: s5 SSysMin.bufSize = 0x1000;
6 A( C/ V* \3 cSysMin.flushAtExit = false;
! \9 d, P8 g  V: ~) g, x$ b+ E$ i2 w" `- S7 X6 C6 Z, G) h% A
var System = xdc.useModule('xdc.runtime.System');
0 N5 L( `2 u  P# l8 M9 e. ?& SSystem.SupportProxy = SysMin;
5 c1 [) I3 Q/ x! |+ L' s- M: i6 j6 V" \
/* configure SysBios to use the lower half of Timer 1 */
& v( [+ `' F  t  d. p6 L) Kvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');) s& V" R8 s5 l
var Clock = xdc.useModule('ti.sysbios.knl.Clock');* J. Q+ c; w: x: f" a0 v
Timer.timerSettings[1].master = true;: `' k  L% g6 R
Timer.defaultHalf = Timer.Half_LOWER;, P9 n3 n* ^; F1 f
Clock.timerId = 1;
+ [5 Q% ]0 ^5 z2 @$ x
; a. J. I! G9 s+ L% W  p7 f4 ^5 j. G. s+ O6 j
/*' Q1 }/ e2 d* s6 ^( C
*  ======== Miscellaneous Configuration ========2 a4 e0 D* o& W9 @9 U  N
*/1 i  v8 A% ]2 I# a  ~( k' ]

* {% C, e/ U  d6 c5 u6 s/* set default diags mask */
. x' e6 `1 X6 M( l& Mvar Diags = xdc.useModule('xdc.runtime.Diags');! k' K6 F9 Z( c) ]3 x1 g
var Defaults = xdc.useModule('xdc.runtime.Defaults');
, [9 H, l( E# u  d# ~& `! z2 b
2 S* i$ R1 B# {% u2 {" fDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;6 p7 K- U6 ?1 s. V
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;% z. z, v9 L% E( H4 c
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; t: N6 ~/ t6 |0 I- {, _5 lDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
+ ]0 ~. w8 o& iDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
2 \2 n, h, Y) V* n  s1 R0 z1 ~Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
0 ?/ ?" D* e0 Z. {1 rDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;! G& _: T7 e, v6 V$ L
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;. d# {" R; g4 p3 E. P# ^( y- B2 q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;2 Y& _& ~* H0 b0 J2 b" @! |. z
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: K( p- ?" T: q+ ~- ]  [  VDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;. ^" b0 L! j* R
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 m3 N& ~6 j4 v1 x5 D* bDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
/ e, A# `" z  o/ c& i/ ODefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;( Z0 ~$ Z: s/ @, p; z/ D8 e. ^" y
) ~- |1 ~- J1 o: w* m
/* override diags mask for selected modules */
) K2 ?5 M% y( c: }2 jxdc.useModule('xdc.runtime.Main');; s2 _& K8 v- a% b) [8 N! T
Diags.setMaskMeta(1 T3 Z4 @2 m- N+ X/ I* c
    "xdc.runtime.Main",' V0 f: q; i2 G$ f0 w
    Diags.ENTRY | Diags.EXIT | Diags.INFO,: M6 K- o# ]7 Z  P/ U# c1 \. P$ C
    Diags.RUNTIME_ON
! ?6 N; c7 y; g- N0 Y9 @);
& ]% ^! Z: z6 R( }4 P8 {+ L- {: C+ H9 A  H0 b
var Registry = xdc.useModule('xdc.runtime.Registry');. Z) e9 R. a" z9 N
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;% W  h: ^/ S, o, _, o
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;1 d3 w# |: O* u8 t3 Y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
2 A( x! s1 Q, a/ B, ?  E: C# O+ _+ TRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;1 n5 ?& {' B! E& ?& w5 e& r
( H* R! F! i4 R  A: c" x% I
/* create a logger instance */
; E3 K1 g, J  ^4 E# Ivar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
( I- R' _# f. m# Hvar loggerBufP = new LoggerBuf.Params();
/ ?, C8 o& B! q/ e! K1 ZloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
" h% L$ l& o% u( d, floggerBufP.bufType = LoggerBuf.BufType_FIXED;
! B* {4 ^, W$ P6 _; a- E* i+ P+ j2 _. b( ]4 |3 @
var appLogger = LoggerBuf.create(loggerBufP);
, v: x, g' i' _6 w1 GappLogger.instance.name = "AppLog_Core1";5 _) N( a& ^0 x7 }: Y8 {% P5 X( E
Defaults.common$.logger = appLogger;
7 N7 u9 x5 p* O& M0 M) {Memory.defaultHeapSize = 0x8192;   
+ b- F0 c9 ]" P1 t* I& kIdle.idleFxns[0] = "&LEDStatus";: B% S3 |' _% j" d, q& A3 [" y
Cache.initSize.l2Size = Cache.L2Size_32K;" e9 ~: m. L- l" a3 J

' n* u8 k1 y! ^6 u: n0 b
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-1-23 00:50 , Processed in 0.041649 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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