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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 m. f; D. i. `, Z
' W5 P, S& y  Z/ \2 v, _, P    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256( Z& R& Y+ `, D( v6 L

# v% x  p9 J: A" E. @其他程序段。。。。。
, H  q# ?0 M& x( W0 K  m7 W7 z* z 2 g4 g; _- h4 W" a* \' `
   free(x_d);6 h9 r) O8 q5 u! g7 o: ~
2 x6 Y6 C5 `+ a; l1 O! n0 }
使用DSP侧单独调试功能,验证动态申请没有问题,
% X2 g% J- }& R2 z$ v$ @4 a
7 a5 [. e' C- b- _" q' D) m0 a6 Q但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。" N9 R0 F4 i( F7 r

( ^3 A, F8 M( n( k  x. x# Y8 \& j
. ?& c- U0 f4 @; e3 }0 o# F6 ?" \0 `) v' ?' H. G
1 D( ?5 H% _2 w0 p

! _7 _8 @5 f7 \0 i0 A' E/ C. S' l1 b& u$ y$ M+ `8 S0 k- i$ ~# C

7 m, N9 O( |% L5 R2 t+ t
) W$ `+ U. e5 N, _
9 y$ O- w* ~! R) z% A: Y5 L* @
$ Q& v9 t' n1 k  @9 v) [
分享到:  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 */7 y3 J, [6 h( ~1 U2 r
Program.heap = 0;
6 _' V3 j4 N- {" f( PProgram.argSize = 100;  /* minimum size */
; I& P7 K2 r4 J2 l5 A$ K" |/ eProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
9 i: k( q# m" _, l/ `$ q* nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: L9 u4 ^' A8 q# ^& ~: T  Z
var heapMemParams = new HeapMem.Params();
9 Q' J  X) K) ]; ~* OheapMemParams.size = 0x4000;, z" G/ R. F2 e1 n: g5 P0 l

& _: Y+ W& i' i, F! X, N( C9 ^var Memory = xdc.useModule('xdc.runtime.Memory');
& K* y1 ]3 h! e7 o" pMemory.defaultHeapInstance = HeapMem.create(heapMemParams);/ F8 s5 w5 a. w) R; K

& n  o2 i! X6 u我大约calloc  每次共计大小为5K*16bits,
$ y4 ~5 q' D1 Q; {9 w而默认配置才0x4000、需要改大。
- \( X; e# V3 Y" F* T- A, k8 i' B! x6 H
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明5 G9 ~/ ]  a( I/ |4 o: Y; O
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
2 a4 ~; [" @( A(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
; W- L! N; f, o& x1 g( V
7 T( T! W! {1 {+ c& I; R
是不是需要在DSP.CFG中进行配置9 K. [' g0 f9 e- ^( F
我现在的配置为( s/ S' P  \# J% I$ V
' }/ ?% _& u0 j3 E- F; G
/*! M2 G8 X$ F& `$ t
*  ======== Operating System Configuration ========
, w4 o- j" E/ e1 s */# d2 u4 \5 F( U; h9 s  D6 F
) Q2 ]" b, h' W7 b) D+ ]) Q
/* no rts heap */. g; ?# p, _4 @0 o. h" X7 q9 x
Program.heap = 0;# t. U7 }8 B/ A# B1 O; I
Program.argSize = 100;  /* minimum size */
; X! M6 G8 y1 i+ sProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大: W7 n9 _/ r- p& [; ?
1 w" O* u7 m" g; X8 Q1 T; _, |$ i
/* create a default heap */9 P& k, A7 E- R3 T! y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- p- a3 a5 s3 a3 o
var heapMemParams = new HeapMem.Params();
7 w; F, d) L& m) LheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
  k# o1 R$ _, Q0 P  i  D+ w. `7 a; @1 r/ ^
var Memory = xdc.useModule('xdc.runtime.Memory');
  Z6 r7 B5 D2 X& M8 y+ oMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 @- Q1 q! q* W3 X" }) M$ L4 L- c  N" _% S* a
/* configure System module */
$ u2 J" O! n8 e" N6 r7 b( xvar SysMin = xdc.useModule('xdc.runtime.SysMin');
% R" Y. }8 n; ?% N. e+ k4 ]SysMin.bufSize = 0x1000;9 e; m( w$ L: @5 @2 `$ u& O
SysMin.flushAtExit = false;
" M6 p' X1 I+ D+ O$ V/ a7 x- `4 p$ x
/ f( N2 F* A& A( V) Fvar System = xdc.useModule('xdc.runtime.System');
" N6 j1 N) R' `* ySystem.SupportProxy = SysMin;. @$ w3 R8 S( N* t
) k" @8 Y2 \3 |; h8 D
/* configure SysBios to use the lower half of Timer 1 */
* }" V' T+ w: f. G! C2 rvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');, w. Y. b- r$ A5 ]* Z; ?. A4 O/ q
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
/ |; L7 l: S' DTimer.timerSettings[1].master = true;
9 o4 [6 B4 I3 i  l% }& {) eTimer.defaultHalf = Timer.Half_LOWER;
3 z( m$ R2 }! g( _# gClock.timerId = 1;) ]9 A% t6 x7 M0 v

+ R1 u; O5 |2 i6 I/ v! g: n( ]) O* d" b3 S
/*
. p4 M& Y$ g# T% c; S6 C *  ======== Miscellaneous Configuration ========
5 |1 u9 r- c- c/ T */
. I- R7 C8 R5 R) }$ ?8 ^8 t, v. _8 r  A+ ]3 p; g0 |
/* set default diags mask */. M" }1 W4 m8 }) ]
var Diags = xdc.useModule('xdc.runtime.Diags');
; N3 f/ \6 Z) Jvar Defaults = xdc.useModule('xdc.runtime.Defaults');
; Z! |% W7 U- T/ {- a8 t- u* F4 M* P% W. o
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
7 c  }' @$ q4 ?$ w, J! U: }2 i0 hDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;& u* g7 v! J5 L# m; z5 |9 T
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
- U, \* J) Z, y! X& f, JDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
+ r" o+ h$ [- a' B: c) }1 NDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */  ~* W# `5 s) l
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;/ C  {! k9 P! J3 L# n5 z6 Z$ }" `
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;, P. Y& Q1 q! L5 K. @
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;1 d2 Y3 k7 B; K
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
5 Q! a' ], k: J0 ~$ E1 u1 tDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;, b) i* z) s! T9 |6 N4 }
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
" }7 m; X$ ]/ lDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;1 k' m8 r) h+ L
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;' _* B8 P7 y4 z( B0 O
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
1 I! Z6 C$ Y4 W) ]2 S2 r
: s3 y# f2 L# r/* override diags mask for selected modules */" X0 n0 w' f4 l. v
xdc.useModule('xdc.runtime.Main');5 r* p: ]' \: V
Diags.setMaskMeta(
6 p( X, y( B( S    "xdc.runtime.Main",8 f" n. W7 F- [* V3 x
    Diags.ENTRY | Diags.EXIT | Diags.INFO,2 a' l( C' J- U$ G$ J
    Diags.RUNTIME_ON# A( H" g8 }4 G) P' v9 P
);0 Y& i* d$ L" v, A6 T0 X# m: v

& n- q4 M2 h# _/ i1 j6 R, uvar Registry = xdc.useModule('xdc.runtime.Registry');: @8 X: _) g% Q" f* {5 Y. [
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
+ W( x8 Z: e) \' l7 ORegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
5 J5 c, q  ^$ v+ a. PRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;# p& v  X1 r( R. j
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;2 K9 ~& }# }1 s& N. Y
" I, |: s- J7 J4 a1 U
/* create a logger instance */0 ~$ A& ~+ c# F& [4 \
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');# |/ h' X1 j9 {; E/ K
var loggerBufP = new LoggerBuf.Params();5 F/ k  w* t" g
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */- }* ^' i' Q9 Y  M
loggerBufP.bufType = LoggerBuf.BufType_FIXED;5 h& I% i8 p8 R$ \

- A. E, X8 U1 P: ^0 |: \; `  D6 dvar appLogger = LoggerBuf.create(loggerBufP);1 }3 D* C- h' t9 o
appLogger.instance.name = "AppLog_Core1";
  ?, W  r4 v+ |$ k' d, N" p1 MDefaults.common$.logger = appLogger;( Q1 k! t% I' u7 D  b/ {
Memory.defaultHeapSize = 0x8192;    % v1 P  \6 Z' Q% J, y
Idle.idleFxns[0] = "&LEDStatus";
3 U3 L  Y' ^: x4 X" _2 u: n8 lCache.initSize.l2Size = Cache.L2Size_32K;
0 G- k& |6 b0 Z8 F: E
7 i; K$ m' d1 u2 d% @8 P% b# }
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-13 07:05 , Processed in 0.044441 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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