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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构2 o6 I/ g% v' A& f0 C# s0 Y
$ T$ T5 T3 b6 q; _5 j' w4 ^
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
( p5 L+ t+ E8 N; M5 k
; d  U+ n6 `! D; R' C9 M# V其他程序段。。。。。
! \/ ?; E5 p8 H' p
5 ~$ @8 A  J6 N$ e; p   free(x_d);/ `7 g3 Q3 J8 `% \

  M8 r! z; ]6 N* I7 N) S9 ~7 }8 C使用DSP侧单独调试功能,验证动态申请没有问题,7 h3 A1 M* r( Y2 O

( L7 l0 l$ [- C, E8 k0 b, d但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
7 q) W# |5 z1 g! N0 @

5 i* ^$ `0 q0 O- o  V
) l5 Y( A& \/ {7 e% S$ l: M6 g' S$ S

8 G' I+ x) d" K( x5 F
4 S: m9 w0 ~. j9 j4 e
! ]# o7 F6 L9 x" ^/ u+ X6 ?, H2 y$ g1 O1 d! {5 H

+ h9 U1 d& v& ~+ H8 k! q
# P, C, v8 \  A; K
$ t4 H. ]& q3 h  R' d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明! ^9 V; H9 D3 m* Y& Z% T# Y, R
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
8 V9 ~9 {- \7 b& ?$ T1 S(不过疑惑的是,为何单独DSP仿真就没有问题呢?)9 F+ x! _! n1 I! Z( J. n# S
  D& R9 n9 Q2 M: u; i
是不是需要在DSP.CFG中进行配置
5 w# A, I( Z  f) C我现在的配置为
7 F# W9 }8 Z" u6 Q5 k- Q
9 O- s2 h1 g" ]: W+ U/ ]% c+ r/*
! u! ~+ b& C" [7 M3 r *  ======== Operating System Configuration ========
( p/ X) W  X# |0 Z% A. T. n */
" J5 ?# Y3 |9 {. ?. _7 C# r0 b
+ M+ `3 p3 N- z* k) m8 L/* no rts heap */0 P1 S( O$ q2 P
Program.heap = 0;
) b3 w4 ]" ^5 t- D4 gProgram.argSize = 100;  /* minimum size *// L1 M# g, c! v* Z& H1 @
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
, U3 I4 p8 l% O! w! G6 `3 K
( D. Z7 i, e2 w( I$ W- F4 x/* create a default heap */
$ W9 c& B' J: P" x; o2 ?! O! D5 [9 Tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 r$ o$ r# z/ Dvar heapMemParams = new HeapMem.Params();9 E, T1 s5 R8 Y5 k, G
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
4 q6 C' d2 F- G4 E: d& Y2 l1 d7 x3 H8 Y; D
var Memory = xdc.useModule('xdc.runtime.Memory');
1 B" x& Y* C$ D, K3 k/ `Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* K! p7 m5 C, e$ k# N) N: h
4 O* u1 C! p( v3 x' K* B/* configure System module */9 R# P! @6 q. _: w( `6 s9 W
var SysMin = xdc.useModule('xdc.runtime.SysMin');
7 F- F; ?' [; y# `5 ?2 vSysMin.bufSize = 0x1000;
# A* `- U6 m8 y3 R- E4 _SysMin.flushAtExit = false;
- P% S- E2 z/ O0 w9 l$ q
! n3 \1 T0 N, wvar System = xdc.useModule('xdc.runtime.System');
8 C# y: J- I' h( x, a0 b* W4 N$ R; MSystem.SupportProxy = SysMin;
( @- i& }; ]1 N+ f) r" I
) f! I0 l* ?, H- v, X' P! \/* configure SysBios to use the lower half of Timer 1 */  j$ ^+ H* K) l/ B
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');, C! ^' z' q2 D1 C$ z9 C1 u
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
" A1 e5 X- \4 q3 M  C: r4 sTimer.timerSettings[1].master = true;/ L. k8 ~9 y( E9 q2 ?6 N8 \
Timer.defaultHalf = Timer.Half_LOWER;+ d# U, ^* F% e/ l: M
Clock.timerId = 1;
8 m5 P& V: I' ~. F1 N: h  e
! k, T# v# y1 r0 M8 H
! \( E, @/ U/ B# L# `/*0 O: p- Y1 U# D6 G$ b6 O; I! Q
*  ======== Miscellaneous Configuration ========
2 B- s; m. b9 m2 m */
$ C' [- p# \2 t5 s$ ]9 V7 ]8 b/ \; ]* U+ O) @& Q7 v2 Q
/* set default diags mask */
9 W9 H2 \) t0 Evar Diags = xdc.useModule('xdc.runtime.Diags');' Q& V8 j) h8 E% [6 i
var Defaults = xdc.useModule('xdc.runtime.Defaults');
# x7 z. v6 `7 j4 m$ V% P6 `  F% c& ~: i
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
5 j8 z) E; b/ _" q( S+ K+ {Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
7 U2 Q3 g' S  GDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
$ J; \- k- q; `" ?0 `. B, VDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */1 }+ X. Y  |, S% g1 P& q  }% p8 o
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
* S9 N- V) C  ODefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;* v5 c) n# Z: o1 b
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;% Z& c! r# J1 _6 \6 K
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- J" m% |' u( j: s* K6 e9 D) F
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;7 J) y  @' S- r+ S0 u! y' t
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
  ^7 G2 z! Q( O! A7 nDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
9 T7 T' G& Y' J1 N& \# dDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
! o. U* s! ?9 n" A( SDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;: S% y" n: P8 H& V2 f4 |( ~% B
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;( B& V, S" c3 {# @' M
: j2 v+ }) V6 s% i6 ?
/* override diags mask for selected modules */+ i2 ~' s- m4 N; Q
xdc.useModule('xdc.runtime.Main');, i* n8 K+ K4 V  N
Diags.setMaskMeta(
7 D4 s* Z8 d/ r+ L# k    "xdc.runtime.Main",9 Z, T3 E/ @$ J. T5 [* i% F# X
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ e9 e% J! j' @3 N% |4 c' R7 C7 |9 A% @    Diags.RUNTIME_ON
; L  ^5 g3 A5 r2 M' g);; k! X9 ~* i. y" A' H: O5 m( ]0 U
! b6 H0 j, e! |9 f# a
var Registry = xdc.useModule('xdc.runtime.Registry');# N# Z+ u0 D6 I) `& T- q
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
. C* i: y+ O8 |" T, S. mRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;1 p" H$ B: U1 ]& G2 K$ i( U1 Z+ t
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
% @# @  |) [( Q  d/ d3 A% @Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
+ E8 j2 F6 y& m7 D+ D0 n" W* f; n2 S7 i0 y
/* create a logger instance *// c" A8 P/ v& G; e" Z, c1 I
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');* A9 Q: g  b# Y) e
var loggerBufP = new LoggerBuf.Params();
4 S# M* w( ]% z. w: H2 a* uloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */6 u3 H/ H  Q+ J0 q4 S/ V
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
) X; x- ^+ B" k0 i5 L6 O
- A8 `) A0 A, p: s1 s" K  vvar appLogger = LoggerBuf.create(loggerBufP);
8 B( Z. W. E7 J: t7 j: J' CappLogger.instance.name = "AppLog_Core1";5 W5 d$ `  B4 N7 p
Defaults.common$.logger = appLogger;
7 t% i/ w: l/ gMemory.defaultHeapSize = 0x8192;    0 o) `0 k& Y7 A; q
Idle.idleFxns[0] = "&LEDStatus";
; a* ^2 v# S8 @7 x: \0 @Cache.initSize.l2Size = Cache.L2Size_32K;' `! S) o2 P" x5 N+ T3 ~; ~. q  g7 [

+ w# u  O# R0 `! p3 t6 p
回复 支持 反对

使用道具 举报

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 */* E! l+ a" F5 p8 i1 R
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 x* T1 o8 D" l8 H5 T* hvar heapMemParams = new HeapMem.Params();" B8 `& c; `+ e) d
heapMemParams.size = 0x4000;- ~6 P8 D( V5 U. K1 Y8 L6 i

2 [9 S) w7 P1 D/ K4 nvar Memory = xdc.useModule('xdc.runtime.Memory');
) G# f9 r4 b# lMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 \0 N8 [, x( H1 Q4 F
" Y6 j. d. P; X9 B8 l我大约calloc  每次共计大小为5K*16bits,
0 a9 s- c" G* C而默认配置才0x4000、需要改大。
. A! O: W# t6 G! M/ J; I
( f- b9 p; Z$ @- y, q5 ?4 c# a
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */3 {- n; f  M7 h  f- S+ g( A# i
Program.heap = 0;
# R) S$ [# I+ U! k3 }/ LProgram.argSize = 100;  /* minimum size */2 R7 [9 g* \2 @, H% [7 N) e* E5 _
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-25 22:54 , Processed in 0.042480 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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