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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
. s' |# O7 e+ w5 t0 {. M% X& ^0 j4 G% @# Q+ d( o
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
2 b, U' c* P( G5 x/ a+ K
! R  N* V. g- Y8 D其他程序段。。。。。; v7 @7 B: J3 i
/ G& ~( r' x8 ^
   free(x_d);
9 |" q' _& @' ^$ [1 W' H. _$ [7 y
& M8 T# @$ s  i使用DSP侧单独调试功能,验证动态申请没有问题,( C# U' A2 ]' a. G- s7 A4 G) A  U

; B& z# w, @! F# ^$ P但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
0 f) S3 ~  |! G+ X- z( R

1 }, n0 }; l6 j  c# `7 B3 }# o! ]& f' k9 O8 f6 f$ {

+ j: E2 X% X/ ?( o% @4 \
  S3 B% k; f3 Y. G+ G; |9 r; |3 R

9 L4 e% W( o5 Q. Y% u6 f3 n* l9 e0 ^2 f, _$ F5 s, m
5 X7 {5 z" Y- J+ \2 h+ {

, O. I2 V: Y$ m/ U! B9 l9 e, [0 ?
8 B2 x5 s! `+ G6 F  S) m7 |9 P  X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
- f2 q7 f5 p* b) W我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: @: f' Z- f$ M(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
9 W8 C7 q" J4 u. Z

) o% ~7 x  b5 g) G是不是需要在DSP.CFG中进行配置
) }: j5 Q6 J/ q我现在的配置为
* j' X+ x4 z+ I. `& D3 S  R. b: K. K% J- W7 j0 ^
/*; G, R, e7 V1 i7 E2 z. ~8 k5 d3 Q1 H
*  ======== Operating System Configuration ========. Q/ W. ?5 c0 s( ~+ f1 o
*/) ]) l8 y6 x3 Q3 {; @
4 B0 p; E  p+ H
/* no rts heap */
0 w( Z6 D* C" O0 m+ tProgram.heap = 0;
$ R, K2 G2 s  A! Y& nProgram.argSize = 100;  /* minimum size */( X0 A( K1 W; z( a* x
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
7 O, Z$ D- m6 k* _+ G) Y- y. \3 u, P3 S; \7 }2 A( X
/* create a default heap */
) R" M) Q5 w3 }: N7 C* ^8 z1 A3 r! z- uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" S9 V+ p5 x, z- T5 M& a# pvar heapMemParams = new HeapMem.Params();
2 v4 m) r& X5 f% [9 c$ m0 cheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
# m# i* N# t; _! l9 R4 G1 g
/ h; [3 M6 `& H. J3 `" P
var Memory = xdc.useModule('xdc.runtime.Memory');0 s. l. r. s' m- P1 g+ [4 ]% K7 y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" y8 j- b+ G7 Z& f) B: v& U
0 H# f9 Y; n" C9 b" h4 g
/* configure System module */) G  i/ @1 z, \$ y# A/ E& D* }( I
var SysMin = xdc.useModule('xdc.runtime.SysMin');
5 b6 ?8 S/ ^/ B% i4 z- L+ p6 r) z& OSysMin.bufSize = 0x1000;
  C0 q# g$ E' H: ]6 uSysMin.flushAtExit = false;2 Z5 `2 c3 `" E+ Q2 ]6 S
+ X& U$ I! _( s. F$ I9 @2 U0 X! {
var System = xdc.useModule('xdc.runtime.System');
. G* \7 G1 Z% p2 J! y2 i" wSystem.SupportProxy = SysMin;/ z$ D0 o1 a# [& j: i4 w  l

0 V) @. y* E6 t7 |; u% ]+ C3 @/* configure SysBios to use the lower half of Timer 1 */
" K, {$ D& T! ~: m: evar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
( i) Z: U: h7 }/ Uvar Clock = xdc.useModule('ti.sysbios.knl.Clock');# K5 _! L4 N1 g2 h- n( n& o/ B
Timer.timerSettings[1].master = true;
- z' W9 R0 o1 w& L8 m3 nTimer.defaultHalf = Timer.Half_LOWER;6 C- r4 h2 `5 f  j* P( X
Clock.timerId = 1;
+ D' K# k5 w! i; S$ J0 m8 ?; r; c9 G

+ O" F+ H# ]8 n/*
3 I) ^0 ^1 i( K# ~2 ]7 X6 m: E *  ======== Miscellaneous Configuration ========
' X6 `+ F, l$ U7 |/ l; u */
# C" q) ]: i* z
4 b, i  Y: q# n+ o$ ]) ^! o2 ], l/* set default diags mask */
( j7 @9 V% z. x( i. x7 \& U, mvar Diags = xdc.useModule('xdc.runtime.Diags');/ }# F: L$ K! _$ |- y3 Q7 a
var Defaults = xdc.useModule('xdc.runtime.Defaults');
+ n+ y: G! Q# p7 l( p+ f# c" u" i: j8 v* o( `& c4 g+ y
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
  ]7 S5 Q# ~& R' ~2 \Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
. ?5 Z  v$ N  R! _) bDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;$ E2 `+ K! Z& o9 q7 z4 T
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
* J. x% d) b5 V$ t3 QDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
5 E$ [% {" M" `4 EDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
4 F* }( F6 S2 f& uDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;3 _! |# b/ D& {7 u# N: g3 x7 h
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
4 G! x# ]/ S: w! o. vDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
, V1 V6 i/ G- rDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
! Z: C( I( p: [; I6 J( DDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
  @5 O' U9 N( H7 B6 V5 bDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;2 z& {6 H$ l& z$ P
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
, r4 ]4 [. \; O) _, M& ODefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
! d5 V( B+ c* {, n, U1 x) J# r6 Q) p3 p- G
/* override diags mask for selected modules */2 R( e( r, v" C: H
xdc.useModule('xdc.runtime.Main');2 P1 D" ^$ V" N& i' y
Diags.setMaskMeta(+ ^/ J5 e& a! ~$ G
    "xdc.runtime.Main",
3 r/ x( t; ^" u* r. k( {    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ J# k& w" V6 t  Q+ M7 q    Diags.RUNTIME_ON0 J) d6 T) C, o) B$ s' Z
);; [! Y: A& X% v8 R0 y7 q
9 E( ]  [. q. G3 L7 D7 S
var Registry = xdc.useModule('xdc.runtime.Registry');
- E% M9 i7 h2 c( q* J6 \4 DRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
0 x) n" V% k/ x4 g3 [Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
- \  w3 L0 W& y( z9 i: ZRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;" C7 {5 u' g+ D0 F% R8 l* C
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
1 f9 p7 r' @! m: k0 k, \! T, X5 k: B7 s. T4 R/ X) f
/* create a logger instance */
. u. m0 [3 [0 f% ~! o5 [  y/ n" `var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
# G9 _" D7 L1 `: Uvar loggerBufP = new LoggerBuf.Params();
, q  D, ]& b0 a0 ]1 LloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
/ q: G, \# u) hloggerBufP.bufType = LoggerBuf.BufType_FIXED;% P9 j) \' _8 S* M0 G
6 a- S- K) V8 o" u+ r
var appLogger = LoggerBuf.create(loggerBufP);0 p6 n: v) O6 }! n* J3 o
appLogger.instance.name = "AppLog_Core1";
( f+ ~- A; c; D1 CDefaults.common$.logger = appLogger;2 `, M* ^1 _$ ^6 U# u( K  X
Memory.defaultHeapSize = 0x8192;   
  L* Y7 Y2 @. W! G- hIdle.idleFxns[0] = "&LEDStatus";- ]0 Z, N0 @- ]( g2 W/ h
Cache.initSize.l2Size = Cache.L2Size_32K;  G) p, J1 t7 d' E; e9 G0 C

8 E" ^  s9 c+ ^" P+ Q
回复 支持 反对

使用道具 举报

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 */! l& Y2 O- k) L- F6 S4 R1 S
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 x: w) Y0 @! J. x: e) S/ C+ a
var heapMemParams = new HeapMem.Params();7 [: O0 T+ }& {0 r8 h3 _# W! k
heapMemParams.size = 0x4000;+ w) C$ J- \. Q4 A' C2 J8 h9 H  {0 W8 M
$ n9 G+ \4 p( H  Z. F" P$ [4 \4 `
var Memory = xdc.useModule('xdc.runtime.Memory');
2 `3 G$ y6 B- |/ aMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 \6 H! j( E( G
/ X3 [6 C9 C% d8 d& m" w我大约calloc  每次共计大小为5K*16bits,/ Y& v: V$ k8 u% u
而默认配置才0x4000、需要改大。
. \% y( p6 ]: g6 o; p: j
: J( C1 ~5 G( I: o4 J6 s7 O% d) r' |6 @
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */* [' \7 A9 ~; G% W+ K; W& ?1 O
Program.heap = 0;' ^/ ~! x' V7 l8 `
Program.argSize = 100;  /* minimum size */; q  `. ^+ }3 ~; Y& 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-3-16 16:59 , Processed in 0.047846 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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