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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构1 ^5 ]' s, X- d' S1 M0 v. v+ P2 I
! @+ V- F; s* [/ y9 I3 A
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256  e0 n  o" s" Y5 I1 w/ o& g0 \! ~: Q
; r# @$ ~  M% o6 N0 H( w. m
其他程序段。。。。。
1 p4 A. ^8 Z- y7 Q; Y
- a. I5 Q6 h2 s: D" T3 q7 V8 ~3 O   free(x_d);
# A; G- v% Y) q% f' d- m7 L1 s/ e0 v$ c8 t: ~: g# G+ J/ i
使用DSP侧单独调试功能,验证动态申请没有问题,
) u+ y, C- |% u; t) f! N' \8 a, R  M
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
+ y/ v5 ^4 T- }: q# U
/ @( x4 U! p' b) b8 [' @

# H+ d4 A# \" H/ b! f% m3 v4 n: q
% g( ~- c9 y* \: @$ J' M. _' E& L- n
2 m: ^5 O7 J2 {& \  a/ m

' ^4 A/ a8 u! b6 }- h6 x4 `# J& z0 O$ O. c& }
- D- o7 i- j0 I4 n: y- W  k
2 f2 E8 }' a& [; z! n/ r# c

5 V, O9 H# H4 [$ {" T5 k
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
/ ?, m$ w8 y9 |/ `3 R4 o我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下9 B. O. d/ u5 e3 K, J( p
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
; J) q& W( q. G) o# M6 q

2 P8 K( \/ x% Z是不是需要在DSP.CFG中进行配置
8 ?+ `! ]$ N: S' M我现在的配置为' U7 z7 ?+ t& u

2 ^, R! P' _0 t/ J/*
5 e5 p% k4 u8 m, {1 B9 E1 Z7 U6 E *  ======== Operating System Configuration ========8 N# Y, M' V& |9 {
*/' I$ }, R6 Y) o2 [5 v0 l
( Z* Q. {5 b7 f/ u+ S9 a
/* no rts heap */# P. q: c$ l8 ~& ^. M. P+ q9 E
Program.heap = 0;
/ l9 O  u( I$ \2 @* CProgram.argSize = 100;  /* minimum size */; f) r: U, t9 i* \" G+ @7 P
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大: l' Q: P2 A% q  U9 Q0 a' [

5 }1 m* J7 \( }! ?) i0 N( b/* create a default heap */+ |8 n  A3 Z8 T
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 q: I/ k3 T% S$ N+ V# N
var heapMemParams = new HeapMem.Params();
, l# v2 u* Z- v1 FheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
' Y' V8 w3 Z1 a( o* e8 ^6 @' P9 \. S  D& R0 v6 f: W
var Memory = xdc.useModule('xdc.runtime.Memory');
' d$ a. d. g: f  z; pMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 L9 Z; A  r' D8 S" N' L% v
) x  e: p; X2 O9 \- ~+ z/* configure System module */
. a  ~, o0 K; \  |- u) i4 ]var SysMin = xdc.useModule('xdc.runtime.SysMin');! S% O! F5 m& q
SysMin.bufSize = 0x1000;
2 S3 G8 X, |* h8 O5 }+ e' r1 \SysMin.flushAtExit = false;
3 @, P" P" I2 a* O- W* p. {/ I
var System = xdc.useModule('xdc.runtime.System');
! R& I5 M$ S) l# X4 zSystem.SupportProxy = SysMin;
4 ~# K) }$ p! E1 Z! D, t( x( U& M9 d$ D" A' [( X
/* configure SysBios to use the lower half of Timer 1 */, c* u! v5 s( p# y3 `- q
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');, B' y9 \. B- @2 z0 ^+ u
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
% [% [2 D1 e$ ^# K2 P$ z, vTimer.timerSettings[1].master = true;
0 F- D8 |0 M$ ?. d& iTimer.defaultHalf = Timer.Half_LOWER;/ x3 J" y) {3 Y- ~' `; O- R
Clock.timerId = 1;7 J4 ~& m0 o/ ~; o1 E1 `1 O
7 n/ q+ k1 [+ P8 Q: l+ ?" ?! s
3 E5 R. q; @( t9 ?  X( ^
/*7 a. y  q  G2 d0 l1 M
*  ======== Miscellaneous Configuration ========5 N( |" h0 y: E+ h/ {# c! E+ s
*/
8 g5 @) E9 |  g) H4 C0 a
  U  H: p: G: u9 ^8 w! m3 `) i0 x/* set default diags mask */3 T$ }9 E( e5 r5 \2 r$ G
var Diags = xdc.useModule('xdc.runtime.Diags');7 q+ Q$ C) h3 S% [: d7 J% G+ Z! a+ v
var Defaults = xdc.useModule('xdc.runtime.Defaults');
  T- Z: S4 T" K3 k' v  p; ^
) U/ ?% k1 O- y! PDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;/ L6 i# ^4 j4 T8 m
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
, i  `7 c4 C) V) dDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
+ g2 w' n5 T- X" BDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */% Q! m. l. r) H) C5 P# H3 e# D
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */* J  f7 r# c8 M, j6 S3 ^
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;2 W6 e! K" C( ?
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
$ X& }" k! @# [. h$ d2 p9 t2 b! CDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;$ Z0 r8 q2 W2 V. ?
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
7 g" a- r0 q0 |4 |! F7 YDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% Y2 p/ U8 w- C
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
4 R- t9 L. N# k6 DDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;$ |- o$ f3 j: `  {* M
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;/ c# S7 m3 ]+ h$ V; p- X& G
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
6 a4 e* ^- A" H, {
  F) A/ P8 ?. [" z5 @/* override diags mask for selected modules */6 z% g/ z% s- j! i% d; n, ]
xdc.useModule('xdc.runtime.Main');
0 }2 w. Z% O- c- R6 |. iDiags.setMaskMeta(
, P5 W" ]+ M6 ]; X/ x    "xdc.runtime.Main",( c  Q. ?" ?3 u( }
    Diags.ENTRY | Diags.EXIT | Diags.INFO,1 c; \1 d% z; T0 \4 ~
    Diags.RUNTIME_ON: V$ I$ N$ w( o
);
; X4 g4 F3 ^# Z6 E( {. Y" O& Z9 A8 w$ l2 p7 d
var Registry = xdc.useModule('xdc.runtime.Registry');
6 e9 Z2 i3 d$ C7 w2 }Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;/ |3 I9 V7 a/ H1 B
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;/ T; U) X" e: \7 m1 e' d
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
1 b' w( ~) [* N) G! L5 }( S/ jRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;: Y& z8 P  u; {. y4 j  @1 K7 T

4 ^; Y- P' A4 f2 w/* create a logger instance */. Z/ f& s0 x8 j7 P5 m$ J% k
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');5 s* D& R& b8 n& @( U
var loggerBufP = new LoggerBuf.Params();
, m/ E- e5 l8 `- b, e2 {: YloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */. w# A) ~6 @+ L8 j
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
0 C8 R, ~, s6 s( _  b2 ]0 l/ n2 C# A/ ~1 o
var appLogger = LoggerBuf.create(loggerBufP);
5 b" d+ n  {5 Z5 R* TappLogger.instance.name = "AppLog_Core1";
) U9 c) }; Z, ~- f/ N0 I' nDefaults.common$.logger = appLogger;
9 j# }) S7 K5 K# P/ V3 w( e7 }Memory.defaultHeapSize = 0x8192;   
" |* g' C+ T& K5 A9 Z' SIdle.idleFxns[0] = "&LEDStatus";9 e( c% E5 |' W% q  r% F
Cache.initSize.l2Size = Cache.L2Size_32K;
0 d$ s- [* h0 f  u; L+ s$ {$ q- V4 }3 w4 W' v% ~4 u" M
回复 支持 反对

使用道具 举报

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 */
6 }# Q% n, ]) Hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, G  ]8 W& R& m# `! F5 Gvar heapMemParams = new HeapMem.Params();
& F; w3 D. I) L8 ?& ^heapMemParams.size = 0x4000;' |- P( F" m: i, Q7 o* j; Y" x1 @
7 @# h# K- l+ ~, D3 L7 G5 \
var Memory = xdc.useModule('xdc.runtime.Memory');* g8 V2 R: f% b% l- h( Z$ i5 w
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" n+ }+ {( [7 t1 D% {9 B
+ ^9 B. Q" E& K& v/ w1 M
我大约calloc  每次共计大小为5K*16bits,
+ [% I. q2 \/ Z1 k3 {; }. b而默认配置才0x4000、需要改大。
7 p3 \$ \0 @/ h0 b. ]: Y2 [3 S' Y; l8 h, u
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */$ ^# K: ]. O9 g' S
Program.heap = 0;
0 o/ f, B9 l5 P  cProgram.argSize = 100;  /* minimum size */
( m% P7 s4 ?. @2 D& t( _7 AProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-6 20:12 , Processed in 0.041135 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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