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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
! H! |( g0 b  \, p- O5 S2 Q& x; j: d( E, R' L
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256  q+ o2 ?( f3 C" S

" _) @3 u( E4 y' h. S3 p9 f其他程序段。。。。。
% E8 U" z1 q2 u4 j: h6 p& {  L9 D
8 B5 e, M, A8 x- r" D   free(x_d);$ f+ ]; p' c& o+ v

! D6 [9 k5 e% [* D使用DSP侧单独调试功能,验证动态申请没有问题,* N& S& n1 z1 s- {$ p
; f3 o; y) Z& S' q& E8 h4 l
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
+ n/ b0 a, G5 ?* E

- F# ^$ H+ U; r$ }  z, x6 S+ X+ f" F9 Q

" q' n8 h( n; U& @# M5 ^. @1 Q7 P3 c+ j1 ?* _

: A7 `8 Z9 U' v% F% u5 L0 w, c0 ~) E1 D: U

! s) w# N6 \* ^/ H! ~" f5 f; A
+ j7 s) ^5 D$ m9 }: v9 t6 D9 @5 b$ @4 W$ I* k$ g( E  I. d; x. d

: O% |) C  ?4 y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
% E3 a& w+ Y0 s4 {我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
7 P3 t# [- `' u7 X3 A  Q(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
% w( U$ X9 `3 x
( o  t! W5 I$ S0 L
是不是需要在DSP.CFG中进行配置8 K5 D5 E& y/ R* I' F
我现在的配置为3 W! N  l3 L( u
6 [2 x9 f# T4 K( e5 j7 I/ T
/*
' O4 Y6 `- g1 V5 O *  ======== Operating System Configuration ========3 p& T4 `+ {1 D% k5 a2 M
*/6 o7 j, h- B8 h+ p7 e- q3 c

2 p* R, q2 u) t0 Q/* no rts heap */" F1 n* q/ C5 B4 t
Program.heap = 0;2 e8 N; E) X. C+ q: Y" g6 V
Program.argSize = 100;  /* minimum size */
( p. B3 Y( g1 P# U5 @9 D( GProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
6 `; Q& ?0 E( P" W7 b
* [. }  G/ k. x4 D/* create a default heap */
  Y  p# j2 U1 X1 L* ^  }5 Kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ M! t+ J7 R" S: T% S0 l" Q9 ]
var heapMemParams = new HeapMem.Params();! n3 N- i$ T2 R2 T) `& p
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大3 }7 o& h& M: L0 }/ G6 q

2 o  R3 J7 }5 L" g! w
var Memory = xdc.useModule('xdc.runtime.Memory');
' I7 C$ g9 a" {Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
  m# K9 i0 T) h
, _3 f* n: ~! s5 @2 v/* configure System module */0 [6 X0 r( W/ j/ h
var SysMin = xdc.useModule('xdc.runtime.SysMin');5 u) F4 C. Y* U  r
SysMin.bufSize = 0x1000;
. _, h8 X  E% v+ \5 LSysMin.flushAtExit = false;
" e1 L7 r3 K1 ^4 W" P
2 N/ k5 a% @% b( d7 f0 \var System = xdc.useModule('xdc.runtime.System');
/ z" [6 j7 a$ \1 e2 Z& G9 M9 B: `System.SupportProxy = SysMin;
: o! f- X9 ], Y1 `0 j; G& ]. i) i  g
/* configure SysBios to use the lower half of Timer 1 */) o+ Y. L7 `! R4 M$ U/ ]6 J
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');  }1 T0 e4 n$ a# f5 D9 P
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
  x. V% X, ?& d" k! kTimer.timerSettings[1].master = true;
2 {( O! F2 Z3 ]; t* gTimer.defaultHalf = Timer.Half_LOWER;) l  G5 p5 ]% x0 l& A- a  X
Clock.timerId = 1;
. n- T! \( H! M& X8 O3 Z5 p$ B1 N5 a4 H5 d5 n$ O
' u3 j) x7 M; P! A2 [) H8 G
/*
. v6 H5 Q6 X# Q' } *  ======== Miscellaneous Configuration ========- K( a6 q* Z# L" w
*/& l2 D$ e6 z: M0 S8 E; s1 L! F
5 Q* z$ u* A$ \* U. _0 b3 m2 X
/* set default diags mask */  ^& c4 ?4 E( K+ |% ?6 x
var Diags = xdc.useModule('xdc.runtime.Diags');+ ~# s  f( M1 @9 v, S, @
var Defaults = xdc.useModule('xdc.runtime.Defaults');( v: i! s& Z0 A8 q- f" J

* u2 W& O/ ^" n2 p$ a& RDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
. S; x6 |3 j. ~& {9 q" O. W: t) _Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
6 b- Q9 Z; p: G2 f' wDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;0 C5 ~. t9 e& W- ~5 Q
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */6 C6 h# z( ]( L% n) X
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
" U' W' l" I2 q! zDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; i1 c5 Q1 H3 R1 Q- MDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
9 K. v2 y! t3 @: ?Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;3 e" |9 F5 y" P
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;; I( T' M$ R2 b  W% a8 h$ ^( N, z- P
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
# X$ M& }. X2 ~Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;' }. b1 u' U1 x- t3 }
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;3 w5 V4 J9 C- q# m3 [+ H
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
& `" F8 D8 W$ R0 _# r9 ]7 XDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
: s- i) ?2 \( l6 t1 B' t7 q) S6 }$ ~
/* override diags mask for selected modules *// f" `8 ]+ {  L$ a% S
xdc.useModule('xdc.runtime.Main');+ z4 d7 r: K% `& g6 |
Diags.setMaskMeta(
8 Q+ t6 v4 f, O    "xdc.runtime.Main",
1 K! l" o2 R; o2 w; g3 ~& {! C    Diags.ENTRY | Diags.EXIT | Diags.INFO,
% A+ x3 `' \8 M& e/ h1 q    Diags.RUNTIME_ON
/ z+ M# z7 }+ L3 H5 `0 m' Z);! v' d) W, Z! h( u
, {/ D' w! w8 O  |
var Registry = xdc.useModule('xdc.runtime.Registry');
( }, e1 g1 F) o/ R+ lRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
( G: H9 }' j% b0 `# L, KRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
& ~6 ^8 s2 m( }Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;* U' G" ?" E; B& G
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;% Z" y+ n* l% n* H, t  O( F( M
* a- o4 X6 ~2 W8 i
/* create a logger instance */
5 @+ s) a6 K6 `& E2 Y. X' N/ w' uvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
- p' ]$ y8 u& w  B, [/ Mvar loggerBufP = new LoggerBuf.Params();2 K  F" t  q( J( t- _
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */* D! A# {7 ~: G( L( Q) P. j5 g
loggerBufP.bufType = LoggerBuf.BufType_FIXED;9 U7 X! E7 \; O$ V% N7 g

% m2 i2 C3 C1 r0 n, Ovar appLogger = LoggerBuf.create(loggerBufP);$ Q& V' \! i7 z/ k
appLogger.instance.name = "AppLog_Core1";
0 O: O9 R$ Q& Y( o9 VDefaults.common$.logger = appLogger;+ `; O3 Q% X* Q% y. i/ V* F3 c1 `# |
Memory.defaultHeapSize = 0x8192;   
8 y+ a# E2 y  h% K9 j, u+ G7 wIdle.idleFxns[0] = "&LEDStatus";
7 J: U1 o- b: gCache.initSize.l2Size = Cache.L2Size_32K;, p/ I8 C  J$ s* Y9 m' q
! v! A: E9 ]# y' P, H
回复 支持 反对

使用道具 举报

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 */2 S3 G3 T" Q1 o, p+ }8 K0 O
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 o, Z. i9 Z9 f& _- hvar heapMemParams = new HeapMem.Params();
4 d1 g9 X) s! r% J" P" u: {heapMemParams.size = 0x4000;% ^& @4 G3 g! ]" R

4 p) Z! [! F+ T4 p: o, U. @var Memory = xdc.useModule('xdc.runtime.Memory');
) G7 E! ^& q8 F5 @+ t' W' jMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
; L! N4 |) s9 W0 U: I+ Q
* a& m8 D9 [0 l6 Q" A4 H我大约calloc  每次共计大小为5K*16bits,
5 X! h+ v3 f2 ~1 T而默认配置才0x4000、需要改大。2 a8 u5 ^+ B: N# U8 N' t$ ]
/ C* X+ N. y& [+ x
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */* x& _$ r1 \' C0 Q& U# Z
Program.heap = 0;9 d7 v9 B# e8 k4 V0 L* i: ^( \
Program.argSize = 100;  /* minimum size */6 b0 X3 ~8 g4 G$ M, P
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-27 06:11 , Processed in 0.043115 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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