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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构: p* J- T" o3 K
' n( R4 `& U9 B8 }" c
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
6 ~/ J7 V8 x  `6 V) Z' P: S9 Y% e* R
其他程序段。。。。。, y$ z3 `# i0 ^$ f# A. r

0 g0 k2 U. {% ^! D( d   free(x_d);4 q7 a( T* i% x

9 g1 n6 h' ]( P8 J& `: ]  `' ^( y使用DSP侧单独调试功能,验证动态申请没有问题,
0 H, Q+ K8 I, [3 K) T# f  p) ]$ K) u. u8 w# E/ x; O9 i
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。% D& N4 b' o7 ]

: J8 `4 Y+ l9 o$ I
, L5 H/ _# ?! \/ o9 C- B: m+ u* g6 S7 @7 T, k: A1 `8 J
- a  K" g# c# L$ B3 m8 ~: T5 l

! C8 J# P% W7 ]# M- T  u* @
4 E( ~) V; r& ^) I6 J& ^: ?
% x! _; N# R" }( D$ `) I
6 ~/ }3 p! Q# D) S% D3 S7 ~/ i1 P
: O" V+ X. ^$ R& ^2 M, p* F
( ^8 U' d( e2 o7 B  g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明0 ?2 w+ ~. s' S4 X
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
1 j# I+ a% t# K  S- [; {5 ~  Y(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
' }2 I" w" X3 n

% r* p7 O: o$ V. t) [4 F是不是需要在DSP.CFG中进行配置
2 r# I* n" s" D我现在的配置为. p. r( G$ g2 t- \  ~# v9 P& L

9 f/ ~4 M' I5 S' x/*
8 g5 u0 {  J  s/ W *  ======== Operating System Configuration ========
3 u$ c/ y" {6 F& P' w$ ^0 O' b7 \ */
1 l& d5 K! }8 A) i1 \' A5 B# S1 K! _7 @5 Y
/* no rts heap */
3 s5 x/ `# _; ~, b+ y* a" QProgram.heap = 0;
$ a: ?( c! {  I) WProgram.argSize = 100;  /* minimum size */
; ~6 t7 X* `5 B& N9 AProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大: l  t7 B9 t" {" X+ i# @

  Y6 A0 s8 \1 [, N3 d5 E/* create a default heap */
1 [' m2 a  d) d+ W, hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* U. s/ Z6 f4 I& k, M3 A2 D' r6 d! r; A
var heapMemParams = new HeapMem.Params();+ x- B+ j# C/ }# `- M4 o
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大2 R7 F+ N7 ]8 n0 v" s) x; _

) p+ L: F1 x; m2 P) k4 D
var Memory = xdc.useModule('xdc.runtime.Memory');
- d& P1 h/ B* y! I0 mMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 {) d* w3 `% H0 i1 \) {9 \. \- J) @1 Y6 s7 c; p3 u
/* configure System module */
$ l$ w  U  W: f7 `/ \" c2 zvar SysMin = xdc.useModule('xdc.runtime.SysMin');
. f2 c; H! e2 T5 aSysMin.bufSize = 0x1000;1 n6 ~4 V$ N0 Q, c5 A/ x) {
SysMin.flushAtExit = false;
0 Q0 f( _8 L( P) E0 t! B( e( `5 t3 F5 f1 W# p/ [8 {- w/ Q! A
var System = xdc.useModule('xdc.runtime.System');) r/ Z+ e  N# J: f" ]: h  y+ U
System.SupportProxy = SysMin;
, ~: `3 R+ ~% j. c: M
  c1 P, l  _6 W' U4 K* r# m7 [/* configure SysBios to use the lower half of Timer 1 */( G2 {; I( B' x4 ^( @
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');3 v- w  t. D- T
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
) Z' {0 _8 |! E% c9 {Timer.timerSettings[1].master = true;
3 \1 O: H7 v- x8 aTimer.defaultHalf = Timer.Half_LOWER;
8 ~& j( E- B% ?' H6 o  [/ [1 A" n( }! zClock.timerId = 1;
+ L0 v! Z6 N8 d; {5 e8 Q5 V9 j" K* u9 _! ~

2 S& }( ]; e2 z$ i+ q/*6 L9 |. O6 k8 b
*  ======== Miscellaneous Configuration ========; h" J! B: h1 Y9 v* M2 W
*/5 ~! ]" Q+ {2 ^1 U" n5 b
2 U6 S' F! j7 K* A' n+ t- ~
/* set default diags mask */; n  S& [1 U# ]. U' F( L
var Diags = xdc.useModule('xdc.runtime.Diags');
  x' l6 R+ S" o1 V: r- a1 hvar Defaults = xdc.useModule('xdc.runtime.Defaults');1 e) {9 o( C: v9 Z5 \9 ?, D

3 Z/ J4 A  A( f7 d% vDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
' W7 i0 A+ i: \( n+ H. iDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;# ^5 L0 W/ T1 k% ?  e1 B; P
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;6 m6 [6 I$ G( v$ p3 S0 Q
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
- ]% T4 g$ m1 e2 vDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */6 T0 p# j* c& V# H
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
9 ^& h" c7 c7 Z9 g- IDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;& ~6 `  x1 V4 a( {# [: C& H8 b
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
) ^- b9 F8 Z/ t" H# R- wDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
0 ?0 p+ k9 B6 l( EDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
) x$ [: F- [4 X2 l3 M8 r) ~# g  oDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
, X; U# q  K! M; RDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;/ L* Z% q$ K5 W3 W& q- P
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;. g7 q; }6 `% A1 `8 u
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 {! h+ n/ k* _; B9 I5 ?- P
1 \  |! [/ G+ w
/* override diags mask for selected modules */1 G7 b9 j* j5 h2 |$ K7 T* ]
xdc.useModule('xdc.runtime.Main');
  [( K" p% U2 Q0 v$ _9 y7 ^Diags.setMaskMeta(2 c, E% L: e1 P9 Z
    "xdc.runtime.Main",
- B5 Q& L" f# c/ U4 q# y    Diags.ENTRY | Diags.EXIT | Diags.INFO,. M1 g( ^' b0 `+ p; Q3 P
    Diags.RUNTIME_ON% a7 s: }/ e+ k8 J$ {8 k/ }
);
& T- J' B/ G4 N% O1 m1 B6 b/ F  I# N/ U6 O) j
var Registry = xdc.useModule('xdc.runtime.Registry');
/ c# T0 C/ Y) u+ |& QRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;5 f  E) s6 T3 Y9 n; _
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;3 b5 q: U  p; x2 A; T, A
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;4 \; b# X( i. q
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;) E( C( Q6 Q9 k2 M, o; y5 n

: s) G1 F2 x2 @2 p& K" Y/* create a logger instance */
! d& r0 }4 F/ F0 F0 {var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
% o/ F4 Q) `/ kvar loggerBufP = new LoggerBuf.Params();
: ~" c) I. y, w' Q: kloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
1 Y9 B: D) {: _" J* f/ c. R. P' i2 SloggerBufP.bufType = LoggerBuf.BufType_FIXED;% I3 ^. n) I( s7 A
+ D& u/ q' W: g; c
var appLogger = LoggerBuf.create(loggerBufP);
: M: y" ]: `  `" E7 VappLogger.instance.name = "AppLog_Core1";9 T6 N  @: D! @3 f7 {3 z
Defaults.common$.logger = appLogger;
# |' y7 O: v- c1 e' @Memory.defaultHeapSize = 0x8192;   
/ D* l- g2 ?/ p8 E$ ~2 D6 J& BIdle.idleFxns[0] = "&LEDStatus";
5 X8 B3 M9 m5 W: |& |Cache.initSize.l2Size = Cache.L2Size_32K;
5 r6 E% D9 N- ]9 x, z
- r3 W2 M0 X) m4 \
回复 支持 反对

使用道具 举报

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 */
, @5 L7 ]3 Y9 ]' Z# cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 I: a) H+ Q; n# i; V+ \var heapMemParams = new HeapMem.Params();  G. ~) p5 Y, ?9 c! N
heapMemParams.size = 0x4000;
0 i; n5 s1 @+ y9 t9 Q! `
* x4 E6 v( G" n. i" O0 I0 fvar Memory = xdc.useModule('xdc.runtime.Memory');$ F9 c+ `, F7 S4 N) O7 ~
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);% a$ j0 z' |5 t3 s5 [$ h2 z  W
9 ?( s5 ~# m* Y: c/ U
我大约calloc  每次共计大小为5K*16bits,2 t6 O+ }! [; ]2 ]# K
而默认配置才0x4000、需要改大。
+ u" O1 U3 P/ `: m1 T3 o6 _8 O; g5 u: Q
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
5 Y4 w1 C) ]1 T. A% {' D5 D4 j9 fProgram.heap = 0;
- u( _2 {5 M: R  ]6 f" \0 YProgram.argSize = 100;  /* minimum size */8 G& g$ Y; M# H1 U* ^
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-31 03:26 , Processed in 0.041362 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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