关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构& J: u& |7 z6 J# m
5 H2 x+ z% R7 W
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256+ k% e$ o1 L& {3 {. j

. c' ?. B- {" k. K( \1 L# m, [其他程序段。。。。。1 Y! N) E: `9 C& \

" [7 Y  C8 `8 v  o) u6 q+ B# ?   free(x_d);% n) D: _2 _$ M; N

) F8 h0 p7 T1 G! Q! N. G使用DSP侧单独调试功能,验证动态申请没有问题,! y& n* |! F) ?  v( v& H4 G

5 N5 g$ k0 N' Y0 ?% H: M但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
4 N3 B; |( P  U4 \
. |2 d. h: m8 O
7 K5 _. |) b8 J4 q$ ^, {6 Y

6 G$ B% p: M1 E$ j, e' E' f4 m" C3 e7 @* z, S/ f  o9 U, u3 ~
4 Z5 a- f6 J$ }$ R
4 g! F6 e$ `  b" ~" Y* a

7 x7 W, E# }; S  |# b/ k- Y% i- X; P4 R2 D, u' s/ \, c

0 p# }2 i0 T3 _1 Z5 N  O
8 J( v( Q+ J1 P; i5 s( U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
9 _3 ^* r1 O  |我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
$ y5 T& Q; a: s7 Z5 g(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
; ~0 H7 ]; u& ^* [7 u) K4 Y* X" {9 y

# H/ }/ m: e3 ~2 j* d$ K7 y( x# g* |是不是需要在DSP.CFG中进行配置
# C! G5 u3 I2 F4 s. u$ \我现在的配置为
, m1 Z$ J7 C3 z6 r. m! G
1 @3 x: c+ d' N7 ^5 t8 `& w/*
8 Y9 a3 e1 D+ ~, j *  ======== Operating System Configuration ========" ]( A/ _& F4 k5 {9 T5 U6 F! ~* O
*/
2 i% O0 u7 D( K5 r3 @. e0 n/ z) u2 S
/* no rts heap */0 v! ?& h4 ~; y1 d
Program.heap = 0;
/ T2 `& B% r* X, l& E0 U7 dProgram.argSize = 100;  /* minimum size */
7 s) V; W# t3 t0 q7 lProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
5 P6 E5 ~3 H! H$ _4 g. @4 `0 _
& ^) i2 F3 W* k0 X. ]: u- J/* create a default heap */
# C0 D7 R+ f, L4 e$ t: N/ tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& d6 g4 L; K% |/ v; [( m; Z: \
var heapMemParams = new HeapMem.Params();
) F  z( g: M& Y1 o: q# W; SheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大! M, r6 e8 x# `7 t+ l
$ N0 U/ |; ^3 n) ]* p6 D* u
var Memory = xdc.useModule('xdc.runtime.Memory');& v  g- T1 H1 W0 H
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
. ~+ n' U3 n, P/ V1 ]! }5 |% ^. Z+ H! J  g. K' M# _
/* configure System module */
1 |: \6 s- z- ?( h' p$ wvar SysMin = xdc.useModule('xdc.runtime.SysMin');5 y* l% q& I/ I9 Z6 \# K
SysMin.bufSize = 0x1000;
$ r/ G6 T4 ]7 F  I/ H: T7 L% h6 q$ ISysMin.flushAtExit = false;) E1 Q5 _* |" G# t4 S
4 g* [5 F0 Y% k+ F& |7 z
var System = xdc.useModule('xdc.runtime.System');9 D- j4 i4 U: N1 R3 L1 Y7 E
System.SupportProxy = SysMin;5 ~" w& w. @; z- ]: z# N/ c

" Q* O; k: P! \7 k& r! e/* configure SysBios to use the lower half of Timer 1 */0 N/ C9 Q+ A% r0 m1 G
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
6 `/ D! `& r. b& L7 Q" ^var Clock = xdc.useModule('ti.sysbios.knl.Clock');  D; O/ \0 s* x4 w; A  Z/ c# q) E3 q
Timer.timerSettings[1].master = true;
3 X! y! K, V( u7 NTimer.defaultHalf = Timer.Half_LOWER;
4 v# f! a5 N4 z3 U3 xClock.timerId = 1;
7 h* U! M  L6 F
& ]% M4 D) P' T( n" M$ ~; V9 X
5 r! o/ u' r* ?/*) Q, f+ y  D2 }
*  ======== Miscellaneous Configuration ========
+ U; ]* u  N; r' Y/ _1 _ */
3 y( i# l8 P% e5 [' `6 h, }
9 f0 d/ k1 q( ^# d/* set default diags mask */# d1 R* ^* @% x
var Diags = xdc.useModule('xdc.runtime.Diags');6 V* C  [4 l+ v8 B! Q
var Defaults = xdc.useModule('xdc.runtime.Defaults');- M. ?8 f9 }  E4 r+ c9 h9 f: y

  h0 t( ?& j) ?# O  |5 S1 R" VDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;! l3 F7 r; h; h% j
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;% u8 r, ]& p5 d' m5 ~1 N$ `; i5 M1 H% ^
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 U% o' B  ?  Q. Z( L
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */8 g6 c8 S) L' L2 N( S& X7 S1 I
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */" c$ o' R6 R7 G3 R
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;; }8 y/ P0 V. ]3 ]4 B
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
0 A- q' w# b0 GDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
0 r4 P4 p# Y  UDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
% p/ t$ D6 ~" z( q& I, E$ ~9 bDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;  _1 U- }: p' Y0 _+ |# @
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
- T# t* s. l; g" ADefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
! q2 C! r3 @. Z7 e4 PDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  X, q2 |7 W, d- d3 A' b  s
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
1 }4 R& D% L8 f! I% `
  a$ h4 q* {8 \; H/* override diags mask for selected modules */% w* x3 H) \1 T+ y$ O+ k
xdc.useModule('xdc.runtime.Main');
. {. ?# O; O; |Diags.setMaskMeta(
% F3 k. U& L+ w; O8 E: H; D    "xdc.runtime.Main",8 r; P9 D( A* d4 I( j  l5 U
    Diags.ENTRY | Diags.EXIT | Diags.INFO,0 V. S! _2 ]. y2 f+ i/ q
    Diags.RUNTIME_ON0 y# y8 H9 c7 C: M
);
( p$ m8 x6 e5 l* q0 K) s
$ A& P, ^' t4 U4 i+ q# rvar Registry = xdc.useModule('xdc.runtime.Registry');
+ i+ o2 ]) m, _# PRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;% I* C. k; B1 ?0 o7 [2 q, O
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;" o6 l8 f* X; s$ o. U" Q* V; @
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;! H- r6 }0 p8 a# j7 E
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
7 |' a+ t1 Z. Z) x2 R
# h' j2 A  y+ l/ Z% w/* create a logger instance */
0 W# `+ a/ f! C- mvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
% d* ~- q( o) x9 c  Hvar loggerBufP = new LoggerBuf.Params();
. |! t( ?# a: l( T9 NloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
. W% Z: N2 V6 Z7 e; NloggerBufP.bufType = LoggerBuf.BufType_FIXED;
/ G9 v0 u7 ^( x" I
' U* ^9 @1 a) P# [+ F, y  u: n# ?var appLogger = LoggerBuf.create(loggerBufP);/ [5 V' I6 G- P+ o' x0 ~+ x% t) \
appLogger.instance.name = "AppLog_Core1";
2 i7 \$ ?8 k( Z/ ~3 XDefaults.common$.logger = appLogger;5 H" s4 U/ {/ L- y! X5 l6 {, p  k5 C+ W
Memory.defaultHeapSize = 0x8192;   
5 M- C+ E2 s7 [  O# p. aIdle.idleFxns[0] = "&LEDStatus";
; Q" m2 @9 ]0 OCache.initSize.l2Size = Cache.L2Size_32K;& p! h& c# s) m. I$ x
: D! w' [$ ~: j7 l( f) h& Q% 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 */
* t3 u& z( a2 G9 I9 |& k0 qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ d5 j/ P1 `( F+ {8 g7 |
var heapMemParams = new HeapMem.Params();
3 b- t! D- ^" J; GheapMemParams.size = 0x4000;7 z1 A; H2 B# K, Q' Q, f) d
: R2 T, j8 C1 W; Q7 S. r
var Memory = xdc.useModule('xdc.runtime.Memory');
' k) z- E7 p. k* T- |; s0 V. w7 yMemory.defaultHeapInstance = HeapMem.create(heapMemParams);% e  o4 t* c5 Y4 `0 {
8 X$ F. R2 l# D
我大约calloc  每次共计大小为5K*16bits,2 o! w+ ^- x( M7 }0 @+ u
而默认配置才0x4000、需要改大。' l; ^  N+ g- X& \- a
: y; W4 F: k2 q% e; `$ Z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
; L/ q4 G0 e" @* JProgram.heap = 0;" n8 R- Q) {2 Q5 _. e9 Y! ?
Program.argSize = 100;  /* minimum size */- \! f4 p2 m' S6 ^) O
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-3 21:28 , Processed in 0.048287 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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