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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构. v* J% I! q( N5 M9 n

0 ]: S8 e1 {, D& T    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
; i% |3 i$ K, l5 P  n! B' O: Z
) I' I! Z4 t6 y! O2 v其他程序段。。。。。
4 [8 g0 F& D" k* a! V3 b : U% U) ?$ r* u# Q8 i4 L! ]
   free(x_d);
, x& k5 }5 {/ h$ Z3 Y/ C8 l( b9 m+ g9 m
使用DSP侧单独调试功能,验证动态申请没有问题,9 W) k2 v: n( N. O: W% \9 O+ n

, R% d. U7 O7 `, ~% ^但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
) q6 }' U2 [7 R, H
1 N- |, [6 F/ J

0 E" m# ]; K7 p9 S9 h2 B! K# D/ u# [1 P0 K' b
1 t; g2 H, h# K- Z

  w0 F- _8 }3 [
6 L/ z6 e/ i( \- Z1 _) ^) \8 x5 g; e/ ~4 _! d8 O" }# W7 E! k
$ I" U. O6 d, ]4 D- _

6 d1 w9 w) z% @# r
; p+ S1 u8 ]! C- ?/ w% e" M
分享到:  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 Q* v+ W% h* `# R. g8 ]5 vProgram.heap = 0;
- g! t- m% c' cProgram.argSize = 100;  /* minimum size */
. _) I5 z% ]4 M7 N2 T: S+ x& LProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
8 E5 X2 p8 Z' gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 ]9 Z+ |% o5 w5 v% q6 G! E# q, x
var heapMemParams = new HeapMem.Params();6 I; ]7 m3 p$ j% J
heapMemParams.size = 0x4000;
5 W: \  K1 k* M( ^, K7 M1 ?4 r; I3 K5 H
var Memory = xdc.useModule('xdc.runtime.Memory');
3 g$ y; Q. r& v8 O, S$ xMemory.defaultHeapInstance = HeapMem.create(heapMemParams);. ?5 f/ T$ ?( `# E  e
. p; z; p( k- e9 D* b
我大约calloc  每次共计大小为5K*16bits,
9 [3 u) b- r' V, O而默认配置才0x4000、需要改大。
% _+ s3 ~: _' Z* x" X; v+ I4 L. E. M, v! i1 i4 j- z, H* u' W
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明4 @' y$ q& G2 y5 A' x5 _& E- s. G/ D
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
& {3 \5 {7 l8 q2 I$ N(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
: a; F4 F% p' V4 N3 Y
( N2 b1 u8 o- g9 F4 U/ C" C( q
是不是需要在DSP.CFG中进行配置9 X+ L( ?: Z/ K
我现在的配置为
3 Z1 w7 R0 P- i$ P( w
6 d& R4 m  r8 e8 B5 U. q3 b/*' o7 |8 i6 m: o5 I' @; L
*  ======== Operating System Configuration ========
7 F' y% l9 Z1 `1 ? */
# D3 R' T$ w; G+ T
7 [4 a9 L  B! d/* no rts heap */5 ?, m0 J( R. }+ ~& d- A) O
Program.heap = 0;
( S# ~0 f" N7 y. [9 d" IProgram.argSize = 100;  /* minimum size */
' d4 j% L% ^) O5 q- L2 Q& ?Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大/ e- r( a7 n: I3 t4 e; _; z
/ f" S$ |! l% C( z+ n! {6 E  @
/* create a default heap */
- |6 `% {# S: C; ]- \7 _' Pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 \( |/ e# ~3 F9 d  Z, e
var heapMemParams = new HeapMem.Params();
* |% n  X2 H: nheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
- C6 }6 b# M+ d  ^- W+ l# d& k7 u  z* R: \- V/ M
var Memory = xdc.useModule('xdc.runtime.Memory');* S+ e# q1 \& Z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);% z  [  B% F/ v5 e

# K6 s0 M  E5 ^+ T6 K/* configure System module */
/ f! E+ e2 J/ k3 D& _0 K, Nvar SysMin = xdc.useModule('xdc.runtime.SysMin');/ o; g* i  E+ q1 W
SysMin.bufSize = 0x1000;
2 Q" }7 ^8 ?$ V7 d( zSysMin.flushAtExit = false;; u: t+ D4 Q1 Z8 F# o. A

* Z; Q9 P3 W3 N0 o9 ^9 X! K  l, Bvar System = xdc.useModule('xdc.runtime.System');5 S$ E4 Y* N% F# @/ H; q% Z" {
System.SupportProxy = SysMin;& ?) {7 b) U3 a4 d$ `' @

, F$ o/ Y, w  l" i; z/* configure SysBios to use the lower half of Timer 1 */# d9 A4 y& m% f1 w# t
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');$ E2 O4 \3 `) }7 T0 ^
var Clock = xdc.useModule('ti.sysbios.knl.Clock');: y6 Q3 J& M* j5 u9 \( e- a
Timer.timerSettings[1].master = true;
0 j4 [) h7 a  `Timer.defaultHalf = Timer.Half_LOWER;/ t% q3 m6 |4 \0 j; K8 e5 b& Q% o3 V
Clock.timerId = 1;
& p( g7 S+ {, r$ g1 @4 O
( }( _! P3 J" z" I2 z# l: d  a% I/ w" |/ V( t/ |" @
/*4 O9 D* v" `: U, P! H
*  ======== Miscellaneous Configuration ========8 i' E0 q. M2 j5 E( G6 u% _
*/) l" x& J) q: d/ u. C  H9 e- H

9 E5 `1 M# o1 d* g' f  d7 i/* set default diags mask */
: s, N9 G- \6 @# Qvar Diags = xdc.useModule('xdc.runtime.Diags');
2 ]9 a0 ~+ D  s, @var Defaults = xdc.useModule('xdc.runtime.Defaults');
: z4 p1 R6 |) C- K/ Y, J- |
* i0 B# q& E8 |$ gDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;0 W1 K6 A! \! H1 A1 P* O
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;0 F5 p" A% k' B& x5 f0 |7 _2 M
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 m4 E( d& y( ~0 [
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */% K5 f2 R7 C8 D5 \. |' f8 r! o& J
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */5 O* |5 \! P2 W) ?! {6 J$ b1 P
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;+ d0 _0 h- P) r  A, f
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
. _7 L7 w& Y- ^Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
* a4 X. n# p' Q. t# dDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( M2 I3 w' r% m' O# x# E' K" r
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
* G5 F/ p! }& K. a7 \" N, N7 D4 ]Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
& p" A( L9 [4 q$ N  qDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;% I  n8 o9 }; v1 g( c9 e
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
1 I! R, \9 N. t: [% k& I  mDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;: ~) c# x  Y$ q1 }* T
2 o: t* N3 p3 U3 Q3 \2 n
/* override diags mask for selected modules */
6 X2 N% R* n; ]$ Y2 C# s, O5 xxdc.useModule('xdc.runtime.Main');
6 I8 ~$ C+ \' E  h7 @Diags.setMaskMeta(2 }- \8 k, E5 s( G, P
    "xdc.runtime.Main",- D& y/ H0 x! d: Q$ z
    Diags.ENTRY | Diags.EXIT | Diags.INFO,+ b0 a7 Q7 s4 O! `/ A; }. S  x  f
    Diags.RUNTIME_ON4 S4 x3 E7 P8 \: T! T
);
3 O0 S2 z( r3 r0 R
4 Y. B7 L4 ?8 h/ }& u( Zvar Registry = xdc.useModule('xdc.runtime.Registry');
. H) k) e/ a, j( eRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
+ b( L; U+ o( l( u5 |4 _; O( w* \Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;7 \& ?- C5 x# ]5 M9 A- A" Z
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
. E8 F* e8 \9 h" X  t3 a7 BRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
) S, C8 \# H, r
  ?) D# U/ j# }' M0 h1 d, O7 N/* create a logger instance */: M3 |. C4 F* P! n& Q
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');1 M: _! m4 t7 D& g) o" ~! D0 @& s
var loggerBufP = new LoggerBuf.Params();
% x1 J7 h* D. c. W. |) h8 G2 `4 floggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */$ w3 _- Q8 D  z4 C( S. y
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
* _5 g' E5 r9 _+ N9 ?: Z
0 r$ k! a: x% h4 p: Lvar appLogger = LoggerBuf.create(loggerBufP);  l. J9 j" D( H  ^4 e+ r0 q5 W; F! r
appLogger.instance.name = "AppLog_Core1";
/ N4 Y9 w) N" l! f5 iDefaults.common$.logger = appLogger;5 |9 S# D+ n6 q
Memory.defaultHeapSize = 0x8192;   
  V0 c$ g# R+ k3 bIdle.idleFxns[0] = "&LEDStatus";
3 |; i4 j$ x7 i/ YCache.initSize.l2Size = Cache.L2Size_32K;) z5 o9 i9 K& `; u
. C3 V4 e" C  `7 h- u  ?6 E# G
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-19 09:00 , Processed in 0.042537 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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