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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 b2 @- W3 W4 N
6 e& T/ |! }6 g0 l" j4 y    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
# P& N6 x2 U# K# w1 W. p+ X0 {/ `& [" X3 j9 X+ y! E5 ~
其他程序段。。。。。
2 f' }# z* Z- y* D7 ~1 K + b: A' q+ G( ~$ U+ _3 }
   free(x_d);) g0 H; ]& O" t$ r. i2 D, ?9 X0 ]; N

! {5 r7 c  K; D( v$ g$ d0 R使用DSP侧单独调试功能,验证动态申请没有问题,
( p- Q4 g1 I/ I+ c8 P. I* ?
0 n/ B0 Z% K! D/ {* I2 U$ Y但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。; Y! I' t" h; B4 w7 \1 o

6 `2 {) ?: x7 [6 G
. `) G: c" j* s$ q( _( p3 p* ?
+ @$ w& {- \7 l0 i) ~
4 `4 j1 Q9 D+ x
0 e7 @8 M8 t, ~" W: G' t- ~/ M. y  j' i/ Z
8 h% X- l5 P) r. p
% T* y( y2 s5 B& @7 H

0 L1 I+ H  `, g8 _# n+ k  T+ t) }* j" ^) m' ^. j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */* p9 L$ _* `4 _* T
Program.heap = 0;( n/ E0 J. f/ P+ C0 t4 r3 I7 n
Program.argSize = 100;  /* minimum size */% ?8 X4 @. }1 D3 H& X
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
* B. g  R( Q" avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  F5 w! U( J1 {, `  p! Q+ \5 p
var heapMemParams = new HeapMem.Params();
3 R; p% T. ]3 g' J! ZheapMemParams.size = 0x4000;
& a4 Y+ z, K7 H2 }8 Q, ^6 ?
1 l" m) S5 g& c# Y, K- D: ivar Memory = xdc.useModule('xdc.runtime.Memory');7 X3 d1 g8 H" I6 d- n
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);2 y3 Z9 s6 m4 `! {  w- }4 N

2 o+ @6 S" F" n我大约calloc  每次共计大小为5K*16bits,
8 S( Q2 u# m1 T9 T5 P而默认配置才0x4000、需要改大。
# F/ Q9 b, @; U! w1 J" H( A5 r4 C8 A& n. X% B
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明% v& X. `9 U" J" g6 j! p$ k
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下1 ]( X. W8 g, `" V4 g, c
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)$ M0 b7 U2 r+ q" d
2 @: y9 c# M) ^
是不是需要在DSP.CFG中进行配置
$ n# h$ N4 ?& `& e. v5 R+ g" Q我现在的配置为
, i# d+ f; ^# U5 V5 R% T! ~- ^" S1 F  A7 O0 I9 R
/*
+ v; q' n* G+ I- L% T" K+ a2 z) O *  ======== Operating System Configuration ========
& T& A& O! ~/ ~' [/ }, L */
8 @( F: @- W5 C! R" p: V
7 e  S. j( R; d5 `/* no rts heap */
$ @" ^( k; T; u% t2 {Program.heap = 0;
. P2 K2 i7 Y- a3 K# X8 BProgram.argSize = 100;  /* minimum size */
' f7 \$ i( d1 }% V- T* e0 ZProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
. m; G8 E% V& V  X4 K9 {9 Q+ [" y. I3 p. V3 x+ Z9 o/ \; h
/* create a default heap */+ M% W$ G, K& l& i0 ~! p
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# U% r$ `0 j4 w( n' I! ^/ f: _; y7 nvar heapMemParams = new HeapMem.Params();
4 {9 ]! U+ X  r, _/ P6 qheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大4 F- A: Q/ ~/ s7 S, x; u# N5 Q0 y; R
4 H' x! N' H5 l" |- ^* A
var Memory = xdc.useModule('xdc.runtime.Memory');; X2 Z! t" l( L, f2 A  a) n/ O8 U
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* p" y' [+ B/ b# l0 F7 g6 S$ Y

, C" [- r; H" L% D/* configure System module */+ N# [+ v4 M0 m7 ]+ B
var SysMin = xdc.useModule('xdc.runtime.SysMin');
' R, l! H2 z% r4 m& \SysMin.bufSize = 0x1000;
3 p7 d! z" R7 g4 p2 LSysMin.flushAtExit = false;6 S3 o" j: z. M, {" @: Y
1 ]4 T1 d0 i3 l1 f: Y; G5 u
var System = xdc.useModule('xdc.runtime.System');/ N  {7 }, @& Z; \2 f7 T$ s8 E& N
System.SupportProxy = SysMin;
0 S- R- i1 ~, I
5 P% l! }* X% Y4 |7 X" a& K3 L3 E/* configure SysBios to use the lower half of Timer 1 */
0 \1 H+ \) z, kvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');' X( o+ o* [  l! A( p+ k! ?
var Clock = xdc.useModule('ti.sysbios.knl.Clock');7 x! a: P7 g& P
Timer.timerSettings[1].master = true;
5 ^9 T) ?* f" ^: NTimer.defaultHalf = Timer.Half_LOWER;
( I8 s: n' h0 ?! X3 K5 A' tClock.timerId = 1;
) h. @& a+ p/ E; `) ?1 B: ?9 @& u; P4 X# m3 J/ P& P

1 T5 Z! e; W8 p' b( o/*& ~3 b+ f' m5 P0 v
*  ======== Miscellaneous Configuration ========* W* I) B- [$ {. c: m' R, z: U
*/( n% l( q% q( V  L: @$ O0 O: @7 x
; w3 J+ W8 f  Y* G
/* set default diags mask */6 e, t2 i' T" o, h& N, q0 f+ U
var Diags = xdc.useModule('xdc.runtime.Diags');$ L# J3 D" U2 U
var Defaults = xdc.useModule('xdc.runtime.Defaults');5 t, y* r# S  g

9 `& C& Z" z# ZDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;1 X7 ]# x6 G% P7 A4 B" T
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;" f6 p/ v; R9 p4 y  a
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
9 l6 O$ f' J$ }  XDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
$ h& w2 ^8 ]; ?/ H, eDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */# M* D( `4 S/ [8 u% D4 u
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 @2 g+ s. d3 e6 q$ x
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
7 |& o$ G4 P6 b2 `' }5 x1 \, iDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
/ ^) I7 a& z$ zDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;3 u; m7 P, ?+ a! r! m# S
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
( X  E9 _# `8 q& J  E& MDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
1 y) G: w/ K2 m$ a$ ]Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
1 W& d! s) {! D, \Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  h1 g- ~2 B- ?" i1 \) G
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;  j. i" V. \2 }
: z1 ?. m% e! T. M# N+ j
/* override diags mask for selected modules */8 o  r0 H7 N/ }2 n* {
xdc.useModule('xdc.runtime.Main');* e$ u3 \7 S2 |- m5 C" E# n/ b
Diags.setMaskMeta(
) k4 @7 L. n6 ]0 K    "xdc.runtime.Main",
" [2 ?- K+ T# i1 I0 I    Diags.ENTRY | Diags.EXIT | Diags.INFO,8 D  p3 Z& i$ _1 J# v3 k
    Diags.RUNTIME_ON3 v) e6 @' V  V2 H) v1 h
);
( n  a8 M/ Y  E4 N! l8 l: }8 v9 P1 I+ D  \* {$ y; j/ U2 A
var Registry = xdc.useModule('xdc.runtime.Registry');+ m( a% J* ^6 X$ V
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;! b2 P, ]' i( Z; S+ l8 U5 d
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;  d2 E' _. U* J( [& j
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
! u$ n3 f* n& s: ^& Q' H* S& g1 yRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
2 M% _$ Q, }5 Z& n
) i. v9 W# O% {( j  ^1 H/* create a logger instance */! G$ ^7 i5 w7 L$ J0 k* c* D
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
0 b; g! u& x) h* p* _var loggerBufP = new LoggerBuf.Params();4 l  }& r# b( e! g% ~0 `' P6 U8 o
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
7 ?3 y' ?8 X( G3 S! XloggerBufP.bufType = LoggerBuf.BufType_FIXED;
  Q4 I$ z0 Y% @# T9 _& C( |; }
var appLogger = LoggerBuf.create(loggerBufP);( W, K( J( Z: b( g# w& e# q( f
appLogger.instance.name = "AppLog_Core1";2 s6 Q: ?4 I4 s/ t6 O1 v
Defaults.common$.logger = appLogger;
8 c6 g& @0 r9 GMemory.defaultHeapSize = 0x8192;    " ?! L/ X0 n( Z" S; ]
Idle.idleFxns[0] = "&LEDStatus";
) P& h& P9 s, R) MCache.initSize.l2Size = Cache.L2Size_32K;
. e: ?, B5 q7 ~+ F& A/ G2 J& z7 V1 k5 W$ @+ m: x) s* _
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-2 15:44 , Processed in 0.043879 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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