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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
8 J" p2 }7 L& q/ V1 w" L2 k( z, I% m( w
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2566 A5 ^* Q8 G5 ]4 D2 @

/ X6 e) l% w- R( W( v其他程序段。。。。。
8 N' p. _* _7 `; ]& P8 u" E( D) z 4 G& t' }- ^0 ^" j  N
   free(x_d);) W& D# p. `" X& K! i

% E  K# y) ~! G, \5 {使用DSP侧单独调试功能,验证动态申请没有问题,
% {5 s6 T% P# V# U5 `) D3 m- k7 H) r: ?/ |6 T1 d" E0 f
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
% D3 U+ Z, k) `2 z

! \# _, }5 d* J* D, _) {) z* G0 U$ {1 b4 {( c5 q) z) B3 y; r7 [
: v9 l0 U6 G% |2 \( z; y, U

3 T* V" n' z* u4 |. T- ^2 c* w# q; i1 {! e0 f, P1 X

. [! Z) D/ K, ~, ~- K, H- Q% ~+ T8 D
, P* K; A; ^0 V
& i& q$ |. }0 f2 P

  g6 {6 S) L$ |4 X8 }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明% C" j; a" h" O. G4 A/ ^
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下! j: E  e. z# Q% q
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
! y4 C/ N9 ~8 T9 ]2 d) e2 x$ z" t" M
# l- j$ M- O7 W( t, p
是不是需要在DSP.CFG中进行配置
; M* @  h7 L; m( |6 l4 S# I: O" ?我现在的配置为
) V4 T5 E& x( ?1 ?$ D, [' x( n4 O* w! _  M& W$ V# |3 H
/*
  v1 u. X3 k  S) V0 | *  ======== Operating System Configuration ========7 E! }4 U& c; P, b: A# y
*/) l7 ]# F% v4 F, \2 K" E* F" G  ?4 |1 y
9 L5 |% q7 q  V% \# N
/* no rts heap */
# i3 k! X4 [) x3 g3 @Program.heap = 0;
6 f& ~; `' {- h% sProgram.argSize = 100;  /* minimum size */8 i6 @0 v- U# h. Z
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
( G& t8 @" z2 i5 a  \  [% m6 W
3 I! @, R7 A% A, j, ~/* create a default heap */# B5 J4 o' V1 n1 g% z1 B& k
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) k; w- T7 E, `1 D) i; _. g& h) G
var heapMemParams = new HeapMem.Params();
# i% i: y4 z: e( Q8 R7 ]! rheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
' H2 G2 O7 {( `1 }- \6 T& Q" U3 ]& w' _& U; p1 f! e8 N
var Memory = xdc.useModule('xdc.runtime.Memory');( S+ d8 n8 R. B6 D9 ~0 z3 N
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);! U7 M/ F% J& |( j( z* o5 O

, d8 _. |' Z% ~6 ]6 T) X6 T/* configure System module */' P5 e1 o! ~2 v; x+ G
var SysMin = xdc.useModule('xdc.runtime.SysMin');3 r. D0 k% u2 t+ c
SysMin.bufSize = 0x1000;% [- B2 D8 s+ P* l# x8 V
SysMin.flushAtExit = false;
% g3 s# j8 ?  s/ @3 \8 Y) l# O! u+ Y/ E, B" p
var System = xdc.useModule('xdc.runtime.System');; f1 @& s4 o, e
System.SupportProxy = SysMin;8 c) S& l2 |( A9 o9 Y) L

2 P* w3 R2 X* O2 D% x% [* s1 h; v/* configure SysBios to use the lower half of Timer 1 */4 G% {8 X) }7 e' X! R& \! h3 }
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');# z$ H7 n/ _6 e) L5 h" C! ~
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
: |% o* N. P1 T/ S7 nTimer.timerSettings[1].master = true;
4 |7 y6 u: |1 R) rTimer.defaultHalf = Timer.Half_LOWER;
+ G) {' Z- v- R, VClock.timerId = 1;. G( u2 `2 `) v5 {

: L* S; g+ u' j2 t% K+ @
. i, `! y$ _# k) l# Y/*
, O* h  J) h1 ~# p9 L *  ======== Miscellaneous Configuration ========
3 Y. C; ?& H  ^" U! ?8 F; f* x */
* D4 ~# \$ N3 u. l- L' k) I
; D! b2 T! K2 L$ X# E, _1 I$ t/* set default diags mask */( a$ z: `7 N9 B5 A2 b
var Diags = xdc.useModule('xdc.runtime.Diags');
/ ?5 o7 D; q" n4 Y5 X$ Dvar Defaults = xdc.useModule('xdc.runtime.Defaults');
) H7 B' t& Y/ }5 B5 \0 f$ x1 M0 @  t  `6 E
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
/ r! A  k! P! V: u# V: G, yDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;) x7 [# j8 e+ T/ }  F5 F
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;+ W5 Q, m  L0 C+ k# t3 @1 S
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
5 }. V9 g% t: q) d% qDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
' e: f% k6 z5 XDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
$ ?5 G; a/ l4 y1 t& [, `Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;3 b/ ]; m6 p/ `( p$ W1 k/ g
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
7 N* Q7 c& c( k* H( TDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
6 k/ q9 Q2 o8 h. jDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
$ L6 {3 u  \. h1 i. qDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ |( S7 D) h4 B0 q$ n1 fDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;6 _% V- W3 `& G5 m# B2 b. \
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;7 U& @6 A% w# U7 c0 s
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;3 f# Z; y: Z( }0 I- Z: U+ L" I

! X( K/ P  D# F0 @( i/* override diags mask for selected modules */
7 e* V0 z5 a! ]5 v6 i9 b( c) xxdc.useModule('xdc.runtime.Main');6 @5 k- e5 }' f* u* T
Diags.setMaskMeta(3 U$ x3 Q& B* N, \" s' K# s
    "xdc.runtime.Main",, A6 P2 i( u% O4 C3 o' t) q
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
% i' D3 \% c$ k/ S$ J3 Z    Diags.RUNTIME_ON
( q0 o+ ]; [. Q% |( T2 I# R9 b);
* {0 W% S% v4 N( h
9 T7 K$ C, E0 N( j6 c% pvar Registry = xdc.useModule('xdc.runtime.Registry');$ ~7 U; ~- K4 I0 f& D2 u$ X6 }
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
0 c( a4 A# ^9 v0 C) c) zRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
: H( _4 t  r  L) X" J* Y+ ORegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
3 m8 ^$ h. B' X+ I5 O' ^# E/ jRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
/ V" f6 Q" J! z: J$ y# k
8 R9 X/ w' F) b8 N/* create a logger instance */
- w. U: G$ t. z) _( _4 y( u) B6 Yvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');  j) G- F8 L% _& k, a
var loggerBufP = new LoggerBuf.Params();
4 f9 i: P7 z, y' j) gloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */! A6 p6 ~  {! g4 R, Q# I
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
  G. Z: A7 I8 j# p* _; l
7 C$ c1 L" U8 [3 ~. q. b$ E8 ~var appLogger = LoggerBuf.create(loggerBufP);. \$ P+ \1 n. ^# I+ C
appLogger.instance.name = "AppLog_Core1";+ u# a7 g1 B2 b* B
Defaults.common$.logger = appLogger;* T% s9 }1 M9 c
Memory.defaultHeapSize = 0x8192;   
+ ^9 Y/ g, G: @& F3 oIdle.idleFxns[0] = "&LEDStatus";
! w) [& d  U/ A) n, a5 j8 X9 g5 aCache.initSize.l2Size = Cache.L2Size_32K;6 M" Z( _# z; ~1 \- _
3 A$ }- Y, l% c+ b! Z7 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 */- H8 K6 E" I% I3 a
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) b2 ?7 ?/ J+ Z2 K: T( _var heapMemParams = new HeapMem.Params();2 g7 x5 `) S( ^3 i. a5 D( }
heapMemParams.size = 0x4000;! v7 A' Y* s$ G$ h/ j

6 \9 P9 [% ?. t( q- j0 v  `var Memory = xdc.useModule('xdc.runtime.Memory');
% x8 U7 O9 o8 q4 R8 h; r  h9 aMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
- Z( j. m/ p$ U* z1 w8 Z$ y$ b5 W, U3 ]+ ?) X
我大约calloc  每次共计大小为5K*16bits,, B9 ]4 u. e8 j! p2 V: s/ l1 `5 k/ E
而默认配置才0x4000、需要改大。3 I. b$ C# B8 l) @* |  ~( ?
6 B( N# Q% B* y* j* ~+ t. o. p
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
# w% h/ R2 _" S9 x. QProgram.heap = 0;
+ J3 v2 D* _$ I" h5 vProgram.argSize = 100;  /* minimum size */
# b  Z& z/ P6 N* a+ {9 I$ {$ {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-19 14:30 , Processed in 0.042323 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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