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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ ^5 i" D6 }, x7 V5 p. @
0 w/ T2 e4 b( `# x' G    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256- k6 F! X! ?, i. C2 S- w' A1 @' D

2 [; g. t6 m5 m* O# L3 l其他程序段。。。。。
# P# m* W$ j; v3 u- h+ Z4 k 3 v" _% A' ~+ i' m2 d/ j" ^# j
   free(x_d);
  X$ [' T7 ]! E/ q3 {. b6 g4 k: a- E5 T( ~6 |& C
使用DSP侧单独调试功能,验证动态申请没有问题,
9 j+ c. D6 R# H1 d+ `* z! X0 Y8 z+ W5 m$ v
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
. {1 [5 }8 F$ `% X
! M" D6 {6 A* w" W$ k3 C  }- V
! j: \: |. f9 R+ a/ i0 T. R

  ~# V5 E6 R4 o! h7 y3 v
+ V6 `4 X5 w' L. p7 F8 V# S2 f
& W9 [( U9 ~7 K2 j8 W" m
1 r( ^9 n6 }0 F$ T* i& m3 f# L/ P3 q2 E; t

. m0 O( W* S3 F* N* w# a; H2 C* x  u$ k: \- t

* |6 D! Z8 W( z4 b. B3 ^+ s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明% v  i7 k5 K) e; Z( I5 g0 z5 H+ T
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
0 `/ \: O6 s& g% M; I(不过疑惑的是,为何单独DSP仿真就没有问题呢?)4 t4 I. d) w$ j

0 s/ i7 E: x" H/ G- p+ T# i& e是不是需要在DSP.CFG中进行配置
1 f1 w% }/ v1 I我现在的配置为
/ o! E! H, h4 s  V6 O" ^* {! l6 J) F: ]. e8 l& D; n
/*5 c/ X9 X' D% W# s1 F  A6 Z
*  ======== Operating System Configuration ========2 X; w+ O# v- V
*/" {. L3 k/ C5 r

) R% R& X6 m1 o# r/* no rts heap */  u& q4 J0 m7 V
Program.heap = 0;2 f" i* f8 \+ i) {/ N( L
Program.argSize = 100;  /* minimum size */
5 E* p% i3 q: w' n  ZProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
# s. V8 U# K3 c' {1 F
5 `# _. s( Z. P/* create a default heap */. R; @# V' Q# ^1 B
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 ?1 U) P4 S! n, R% Tvar heapMemParams = new HeapMem.Params();7 U& C9 ]' s6 I2 F0 v
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
% H# P5 W) z7 M: k. k# X  E) O- S& p& R$ P
var Memory = xdc.useModule('xdc.runtime.Memory');# ^+ ~6 L, {2 l- ]. Y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);. m% r, b4 a' E0 q
' j* c( ]' m' D1 x' k# f
/* configure System module */
1 T/ e  c3 `' u% _( k4 Yvar SysMin = xdc.useModule('xdc.runtime.SysMin');
% ^. F# ?& D0 CSysMin.bufSize = 0x1000;
% i( g& p3 p! W8 aSysMin.flushAtExit = false;
& L9 w  n& h; F0 y% m2 ~( L0 g
8 q. x; O5 c0 {' O0 c9 tvar System = xdc.useModule('xdc.runtime.System');  Q8 K) V' M( B  B- {, v
System.SupportProxy = SysMin;
! K% Q  ?6 {: e# C# n) l% H6 B
6 p% ]& e2 h6 `4 w7 F# W6 ]/* configure SysBios to use the lower half of Timer 1 */
) d/ Q) w. a1 x- P  E' `9 Ovar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
/ Q4 _  ?2 b0 u- V; @2 S) avar Clock = xdc.useModule('ti.sysbios.knl.Clock');
2 e' W+ y- [9 f! ^& E5 x1 KTimer.timerSettings[1].master = true;6 Z1 [% C  {6 \( H# Q  _
Timer.defaultHalf = Timer.Half_LOWER;- P2 ?* o5 `% |" F  g
Clock.timerId = 1;
# ~2 G1 r( d* @" v! i# ]0 s# n8 }% N1 J6 l/ w" `  w& v
. U. S# s( h# ~& e5 z- d; `4 ^
/*
  u) p  z/ ~+ Y *  ======== Miscellaneous Configuration ========
2 y/ ~; F0 @; p/ Y5 g) P( p */
; a2 j& p/ w/ Q, P+ K+ m0 L& o, t* c6 Y3 l; S7 _( Q6 a+ `. O0 S! `) k0 b
/* set default diags mask */. k7 Z) s6 p' b. c$ m# F
var Diags = xdc.useModule('xdc.runtime.Diags');. Z5 @, W/ h" W1 f
var Defaults = xdc.useModule('xdc.runtime.Defaults');) f: {( I' z& \; n/ A
1 o# p* [3 v4 q. _, z2 O
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
3 v0 g0 A$ X* V1 R" jDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;0 n( t; V( B" x% b
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
9 h0 u/ q& ?9 k  x" ?Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */9 X3 J$ H( R2 W
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */3 b4 O3 P7 g  C* C
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; V8 w  F1 ^4 }$ R. b/ {3 UDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
7 Q0 q7 S" H7 i3 Y+ \Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
0 f& ^0 }& @. Q" PDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;3 k- c& r& }4 p/ b" K# U
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;/ V; H3 T0 ^. X
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;" ^) G0 G: c* E5 I/ M* Z
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;3 @( E8 b5 e1 U( T/ L& O; [4 N
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
& p" l3 }' X2 K  f. g* V0 FDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
7 v% V  F" ]1 X% _5 _% C" T/ Z/ ~8 `. d1 O* I) y  g, s- e  V4 Q
/* override diags mask for selected modules */8 [) @! l5 L- v" L1 m1 ~1 x
xdc.useModule('xdc.runtime.Main');
1 O8 i" B( M9 ^! A5 U; X9 U, r! WDiags.setMaskMeta(
* {) b) P) _5 r. I    "xdc.runtime.Main"," J4 j7 T& m7 E6 I' G6 e
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
8 K7 {9 s. P# n+ r! m7 M" _    Diags.RUNTIME_ON
! Q3 \  @) r1 d$ c% w9 D' @) `);$ K' e4 _5 o4 U+ C4 {
9 P+ ~2 y8 _& u- M) K) l/ H& s( |
var Registry = xdc.useModule('xdc.runtime.Registry');
1 \# [: h5 o7 N+ uRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
; l  l0 C: E4 ^4 g4 y- BRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;8 O* k  P; `3 }( W! k
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
" _0 x3 L0 k, x" V# eRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
/ `9 t/ y0 L7 c4 ]5 d7 C2 y
3 A6 d& U" N. Z; C3 X/* create a logger instance */3 e8 z) q+ q# _) N# f5 T( E0 B
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');! H8 G/ M; t. o% C+ k9 ~7 v/ A1 {
var loggerBufP = new LoggerBuf.Params();
* S' H: F+ R1 O+ a0 iloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
- D& F1 d6 d$ S6 r+ A4 `. u' _loggerBufP.bufType = LoggerBuf.BufType_FIXED;
& F8 t7 I) J% a% @6 Z) j5 B
, ~* p  a& ~& u4 V/ H9 u% Cvar appLogger = LoggerBuf.create(loggerBufP);
  F; ^$ f' j( I2 t( r8 XappLogger.instance.name = "AppLog_Core1";
. ^7 j" A. N6 q" A" Y! `Defaults.common$.logger = appLogger;" b7 F# Z  u! @* ?7 w$ f; c0 d: X8 z
Memory.defaultHeapSize = 0x8192;    4 i) U8 C* l. o, Y. v$ @2 f) v
Idle.idleFxns[0] = "&LEDStatus";
6 _# g& X8 ]$ ]! g: ICache.initSize.l2Size = Cache.L2Size_32K;1 j* b. c0 a/ ^9 j: k# \/ D
7 b5 g2 P% u9 M/ x( _& x. T
回复 支持 反对

使用道具 举报

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 */; }! r' m6 l( r# c$ d
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" k, ^" o. L# Q3 B, mvar heapMemParams = new HeapMem.Params();+ a, }# H- m6 X/ h
heapMemParams.size = 0x4000;4 l3 F! \$ s& s

5 `, _& W7 @6 R' N% ]4 u2 O, kvar Memory = xdc.useModule('xdc.runtime.Memory');
+ _2 |! W1 \0 N8 @, V; yMemory.defaultHeapInstance = HeapMem.create(heapMemParams);+ M8 n: b1 f2 h* w
0 G, u$ k1 L4 f; \3 s
我大约calloc  每次共计大小为5K*16bits,& e* `3 h; X' ]3 E, p0 V$ k" [( S
而默认配置才0x4000、需要改大。% {' p0 W6 c' M

  T- n3 N! p3 M& v, n7 Y
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
1 s, Q6 J" a& x+ fProgram.heap = 0;) O8 |5 @. U  p6 h( Z) m' A
Program.argSize = 100;  /* minimum size */
3 c, ^2 ~- j) z1 ?" U' rProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-23 15:47 , Processed in 0.042555 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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