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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
. g) T" J6 a- g/ Q8 k- R: |4 T& `0 z' A
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256' d1 H1 O" H" F  f- p) R; l

# ?- C7 t- t* {! l2 B* ^其他程序段。。。。。
! y* @$ f9 X/ H- [ ; r0 }7 f0 q. X# w; d0 \
   free(x_d);# x. f  l8 N7 _% v
9 S0 I3 Z- x  a) V2 S9 I
使用DSP侧单独调试功能,验证动态申请没有问题,
. f7 o; g. E) L
$ v1 Q  B8 j2 c$ t" ^8 Q  a但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。2 E7 A+ y3 e+ S$ S4 D
1 I/ w! k! h2 I) [1 Z

$ Y; ]& I2 K, p4 D6 D
. l3 h7 P2 g# d' T% A5 ?8 P( ?- h" ?3 ~. {& @
& t' P+ z9 K. O: J7 _! z- I
; g* T% v' x7 n5 q' F
! f% {- u; d- M6 y3 k

" V- s  L; s9 J3 X, M8 d
; a7 G6 U# K2 t! D$ J! R0 ~: |' P" o# _0 C3 i" u
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
( _1 ^/ m. Y: i& c2 Y我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 e* z4 K" k& E4 R5 g
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)& o: c" u+ y* G  N0 b) d
5 w. Y. V9 Y2 G, j7 b& j$ s6 h+ E
是不是需要在DSP.CFG中进行配置
7 \5 a0 r$ H: s* w# O我现在的配置为8 Y' k) F- w  s% T' N& H

4 A- g$ w; q  l) I) z4 v/*
; B4 B/ W# t9 |  q3 \3 c *  ======== Operating System Configuration ========
8 q. W& g- I) E. V" c4 c* ]+ E */
+ w2 ^* }0 {3 H2 r) S
% {8 r- L. }  D, \9 s- H; d/* no rts heap */
9 H0 H) i6 A/ B% _/ R4 X) TProgram.heap = 0;) m8 k1 T* b) N5 _6 j8 o" V: I5 s
Program.argSize = 100;  /* minimum size */! F& n9 C2 P6 F; C
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
# M9 I; C, v6 m! L
3 p0 G1 v: T# C% H4 N  y1 y/* create a default heap */
6 {2 f) e% }3 a9 {8 l% {& ?5 n9 Uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ k  U/ @, }3 ^0 ^/ s9 A9 _7 F1 ?var heapMemParams = new HeapMem.Params();2 p% q7 m7 u' e
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大8 Z  f1 \) x4 U; J

+ Y1 F# {4 m& g" ^6 [* g
var Memory = xdc.useModule('xdc.runtime.Memory');: m8 ^0 c: E! M; J
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);; ]9 j+ G6 [$ R/ k& _

8 \* j( q# T% ~# T$ n6 W+ ?- E/* configure System module */0 v0 ?$ y; `0 o# J9 @
var SysMin = xdc.useModule('xdc.runtime.SysMin');
& W! D( F0 b5 v! X& bSysMin.bufSize = 0x1000;4 ?. w& U8 S1 {; V
SysMin.flushAtExit = false;
: V$ ]& n* w% @# Y. `2 A& n' |* M/ o  a
var System = xdc.useModule('xdc.runtime.System');
/ q: h2 z; P3 r  {0 G) s" eSystem.SupportProxy = SysMin;
! m/ @, F4 k" A/ B0 [- @& C) k7 y2 L! j; p& l1 {
/* configure SysBios to use the lower half of Timer 1 */
' ?$ T2 x1 z8 o+ n9 }  y; J& r6 |var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
" x6 q) q9 i# U5 ~, Zvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
4 I' H, n1 [8 ~. S2 D( Y2 m8 KTimer.timerSettings[1].master = true;
7 S& L% w  w8 ~$ FTimer.defaultHalf = Timer.Half_LOWER;0 H+ ?  X: ~' C- x; c( H
Clock.timerId = 1;
# p5 a3 V* i( b% T+ u% j
2 ^1 w5 A  o, D4 y( {
- {# V6 J! K% W4 t, B: e/*$ K  Z" B; E6 O1 L7 [5 r0 m$ p
*  ======== Miscellaneous Configuration ========
( E, V8 g1 T7 A  s; p- t( y, @" Q1 b* k */5 s) u/ v$ h& G, Q4 o! m

- S4 x' `: R" }9 S$ V$ X2 P) J5 X/* set default diags mask */2 B. Q+ y$ s) n
var Diags = xdc.useModule('xdc.runtime.Diags');4 r3 \- P: e3 H/ b8 X$ d% V  q! b
var Defaults = xdc.useModule('xdc.runtime.Defaults');
6 c" H3 C! X0 p! [  i5 x! d% q; }4 v# u) K" p5 q, N4 h
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;# [( P0 m# a* d1 s3 g
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;. Y- s7 h- [! Z7 e, D# }  }
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
! J+ w2 @& w! n% z4 s  @Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */( ^1 P( h0 [$ I, r
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */5 ]) b/ C0 o# y
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
. u% m' T/ J0 C6 B* m9 |& F: x$ R  wDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;8 R  `- K( {) K5 Q1 W
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
: R" ?- ~, ]0 |$ qDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;6 X2 \# w- w+ q# O# d9 F) b3 D
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
$ f' P" ~: P: D1 aDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
! y8 z9 _  z) YDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;0 A- I# q/ u" _3 i8 {- {0 d
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;+ Y, ?9 K5 Z, I" {6 l
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
$ A2 s1 ~6 _6 b3 }" D: a6 ?2 C8 ^+ G
/* override diags mask for selected modules */
7 A( D: F7 L0 \; ]& d$ V: gxdc.useModule('xdc.runtime.Main');, Z+ u5 P7 u( t; a. V. k; M8 p
Diags.setMaskMeta(
6 }/ y5 e7 A2 R; Y    "xdc.runtime.Main",
9 S, P) b1 v5 _    Diags.ENTRY | Diags.EXIT | Diags.INFO,0 R* C* c- `/ f% q
    Diags.RUNTIME_ON
/ Q2 B7 M: }) l8 P* f, b);
+ Y3 E! S# B7 B2 {* ]  y( R5 R
var Registry = xdc.useModule('xdc.runtime.Registry');
; g5 a8 W# y4 X. u* q/ U, |Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
* o; {1 q0 X0 m- n7 dRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;# y+ ^3 X, z% U* _1 w
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;: [+ _& Z- P6 f/ Q( j9 c
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
! Q+ D" @7 S8 q: e$ g2 k3 b8 p) x
. _: s/ t# T9 R2 J# \- P/* create a logger instance */7 z; b/ G: H3 p9 J& v
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
  S- B; u" w% e3 S: Bvar loggerBufP = new LoggerBuf.Params();8 J+ w8 X& p5 T
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */+ h6 y, @7 P" z" j( Z6 @# I
loggerBufP.bufType = LoggerBuf.BufType_FIXED;# A' @1 ?7 |: O& l

! s) [$ o* q3 A) e2 O5 qvar appLogger = LoggerBuf.create(loggerBufP);
6 K; u1 D1 |6 ^3 A! KappLogger.instance.name = "AppLog_Core1";
9 v( |6 X7 A, I) j' ]+ QDefaults.common$.logger = appLogger;' x7 Z1 O6 R+ M, Z7 i- [3 s4 p
Memory.defaultHeapSize = 0x8192;    - U" s% B! r0 H' e
Idle.idleFxns[0] = "&LEDStatus";
8 `/ {8 L0 Z& I, K: TCache.initSize.l2Size = Cache.L2Size_32K;
- Y; m0 U8 C+ @; X3 @- k. g. ?! j/ W, G+ J
回复 支持 反对

使用道具 举报

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 */
. ?* I, e/ i# H5 ~- r* cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 \: B4 m! k% D
var heapMemParams = new HeapMem.Params();
( B! @$ m' R  w. lheapMemParams.size = 0x4000;
" L) u! V$ R1 I8 v+ x: h2 l
  _; ^7 ^' V* n8 M' C4 uvar Memory = xdc.useModule('xdc.runtime.Memory');
+ a8 j+ q. b5 ]Memory.defaultHeapInstance = HeapMem.create(heapMemParams);$ _" ^8 X( @) r" @' G" N0 {
5 ~  @' A4 `! w* z( x' ^+ |6 ~
我大约calloc  每次共计大小为5K*16bits,8 d2 o) n  ]5 t1 n. f3 O' B$ {1 i
而默认配置才0x4000、需要改大。8 B1 L& F6 R+ \# J) B; A

1 b+ Y- R, n! K1 E) a3 `
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
2 T) ^+ U! T9 Q/ k" E4 k6 b" kProgram.heap = 0;
, F4 g6 `4 r& q7 I4 }  jProgram.argSize = 100;  /* minimum size */
( o4 F2 [# Y' z4 o# i/ y" DProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-31 16:40 , Processed in 0.041919 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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