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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 R/ F2 z; v1 e- d) ]4 M  q: m/ y
, B3 r+ P, t. E3 _& A: w# K    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
% ?* |+ F0 [& d0 k- Z
1 b; H9 g3 E  g, Q& ~3 {其他程序段。。。。。& c8 h; z: K7 t% F8 V0 f7 U
7 Z) c7 b4 y9 t- X
   free(x_d);% y: _. w; S7 P) @) ?1 q# B+ r" [
& @4 ~' y: G2 V! Z
使用DSP侧单独调试功能,验证动态申请没有问题,% r' k3 l- O6 V2 K4 c, j: Y
! S- J& ^8 N$ `- [& i
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
3 Z3 B  P5 q; b" |2 {6 f

$ G5 S# d. X0 X" q  n: H, q4 N' u9 \$ [  Y" f3 |6 w

! d# x! j" i$ q5 `+ u8 r- i  B% f: C  K) R& {# f- B% L6 ?
, S" j$ t: }' ~/ K  D8 D/ A, `

- b  F; C; H# b# D  Q' f8 M, s* U! W) Z! i' G7 D# R/ E% _9 q: o/ C
8 B. ]0 ~. ~+ I( C5 R, [) [
* p. O" X8 f9 ~2 n* E9 B3 B  W* u

' @0 a, d( A% ^  d, |1 i
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
, E0 @  R8 @* R3 m& }我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下. R3 ?) }- f1 U+ |8 E7 y3 u
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)3 q" v3 k. R3 h1 }

+ Q7 a5 [6 T$ I3 u6 ~  s是不是需要在DSP.CFG中进行配置8 n) t' S! ~( z. k
我现在的配置为- C) ]/ S8 z" N; @
5 {7 _" t. a$ E6 p3 b/ e
/*
2 `; f" X& ~, W8 x2 j# Z9 {0 u *  ======== Operating System Configuration ========
, `; M4 \( t, W) C2 |/ r: } */
. X' p* u* e0 k/ {
6 S2 a; W$ u8 V, ]/* no rts heap */% J. v* |8 e& H6 \9 q: U: L
Program.heap = 0;
( X6 O' k( y( `, f  |5 eProgram.argSize = 100;  /* minimum size */! e7 X$ r6 B1 z! U& q; e
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
" |# R5 A+ Y% R9 N6 \; N" ?" r# X. }4 N2 [7 p0 j3 T( p" D% ^  P
/* create a default heap */+ k! \; l8 M) \+ m9 Z! U
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! J3 Y3 e2 B0 B9 u8 j& M
var heapMemParams = new HeapMem.Params();( p/ l0 E7 c# N% o2 O! d$ c
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
1 ^  [4 ~1 u& v! n) m" |" f9 d2 }- i$ `; a
var Memory = xdc.useModule('xdc.runtime.Memory');
0 e, @: k7 U3 p1 W2 a. O# s* HMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 b! Y* m, t6 i2 S* ^5 {
& Y* `8 s1 t) H7 ]' v# C" q7 z6 A9 @/* configure System module */
# V1 d7 t4 X6 M( Hvar SysMin = xdc.useModule('xdc.runtime.SysMin');
' E! L$ X2 d, w9 S9 x$ rSysMin.bufSize = 0x1000;
. r  X/ i; p0 l4 B: c; MSysMin.flushAtExit = false;
8 t1 W9 S( \$ v% K4 j5 C
0 J: v, c( }/ K' J0 [% ~! d: Wvar System = xdc.useModule('xdc.runtime.System');& n$ c# [- ~! x5 v$ O3 x
System.SupportProxy = SysMin;
# N( r3 [  I/ e3 ^4 B
# M$ p, [) T6 |9 i5 n3 r/* configure SysBios to use the lower half of Timer 1 */
. M0 G3 r: ^5 Uvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');/ {5 C( D+ T" f) e+ T& c, G
var Clock = xdc.useModule('ti.sysbios.knl.Clock');5 W7 A. r2 q( s: N% N5 b
Timer.timerSettings[1].master = true;) K. k. A( w7 y, u0 d) r9 W
Timer.defaultHalf = Timer.Half_LOWER;& h+ ]4 B- l; E2 C' A6 X7 u+ ?, I
Clock.timerId = 1;
  D6 @0 |+ F& t& K5 z
7 F# [5 L2 K0 Q1 M" @( ~, h8 X( v! ?: B
/*2 w# Q" }% G" x! Z  z& _  O
*  ======== Miscellaneous Configuration ========
! @; A" S" U4 [; j3 }( |* E, K9 z */; z. j, |) Q* `( b% `7 B  f
1 A" `3 S0 _1 _
/* set default diags mask */
. H0 Y8 [' ^/ d- Y, |% B1 ivar Diags = xdc.useModule('xdc.runtime.Diags');4 {! `8 ]) y( i; U7 `! ?4 U) X
var Defaults = xdc.useModule('xdc.runtime.Defaults');1 _% I, q8 X0 o
) @0 o) l/ K0 O( R1 Y( w# L
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;7 c& \3 _+ u# V& ^. k1 g! C* j
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
6 V8 i: f! [* Z! p3 Z/ Q2 _. GDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  A7 Q! ]- Q5 d* j4 QDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
7 B% a' D$ n9 W" Y6 \Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
3 c6 ?; r2 v; d4 ?; U. qDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;. |* o5 D  C. S2 ]  y# s
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;! W1 \' R5 D$ K
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;. W5 b8 ^8 g: G' u, p. G, W& e
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;$ S3 I4 c# v' s
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;8 a) v& V( A' c, \) P) d( ~
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;4 w( m. ~: L5 L
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;& m0 h6 M# T; k- z, t5 _) |
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  u+ |& R3 l/ L. C* Y) Q, [+ A
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
3 N, d/ N0 N2 s
5 r! W  \; a7 a5 |) d9 f/* override diags mask for selected modules */+ U/ B3 \+ D' e3 @1 C
xdc.useModule('xdc.runtime.Main');$ K% {; B' o0 O* D, H
Diags.setMaskMeta(' w% N  x2 u0 M* R. D$ ~2 ]) ^
    "xdc.runtime.Main",# m. y6 [) a! B# ]6 ]4 _
    Diags.ENTRY | Diags.EXIT | Diags.INFO," u2 u0 I* p' y7 K7 o
    Diags.RUNTIME_ON8 ]4 I1 @1 E- M/ x* e- q
);
3 e" i% F: x5 Z9 g3 B$ ]5 V5 s, x& D$ m# y* i) V8 t5 T4 f) Q
var Registry = xdc.useModule('xdc.runtime.Registry');) l/ q9 e8 A0 V% Q4 b
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
# O- Y3 v5 z$ U6 ARegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;4 x5 a9 I  \( m* y- d+ \
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;! B* I* B* m; Q" i& U4 I% f+ a6 ?, w- n
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
6 N5 ?. o: ]4 E0 g3 n* \8 f" E/ X/ R7 E5 R  q- O1 k
/* create a logger instance */
$ m% o  g( h" W! q/ E# s! w4 vvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');. s2 e! _" t4 E! {0 h9 c5 B. b
var loggerBufP = new LoggerBuf.Params();
5 L1 V' S4 G) r6 I/ g2 [# ZloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */7 C8 m6 d/ W$ h: @
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
  n, f# T; [; I2 p( j3 I7 Z7 c7 j8 ^7 i9 m7 o5 ~  x* ?, N
var appLogger = LoggerBuf.create(loggerBufP);
: W+ x6 B" P: j2 a  b' _appLogger.instance.name = "AppLog_Core1";
& J" g; `) V. A' KDefaults.common$.logger = appLogger;5 Z0 y. B8 ]5 b) D! |+ \) E
Memory.defaultHeapSize = 0x8192;    * r/ t. O; B- D
Idle.idleFxns[0] = "&LEDStatus";
* w9 B1 w9 g# t$ [4 g# K; [- a1 T" D# ~Cache.initSize.l2Size = Cache.L2Size_32K;6 Y2 J0 A- h$ X) m) U  N

) K; ^/ w4 x. L) u
回复 支持 反对

使用道具 举报

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 */
( u2 g" g- W" f, j+ D9 xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 p7 @7 v  ^( q
var heapMemParams = new HeapMem.Params();
% P+ `3 A7 n& F2 bheapMemParams.size = 0x4000;
; J" {0 M9 D- e: i% |. b( x- A" I5 J$ W- Q
var Memory = xdc.useModule('xdc.runtime.Memory');
! V  Y7 Y5 U2 b4 h# wMemory.defaultHeapInstance = HeapMem.create(heapMemParams);) @9 }0 n" R0 k+ G; a
$ X% `  a$ R) Y- X; ], q8 h
我大约calloc  每次共计大小为5K*16bits,, G( M4 M- j$ B' H* ]- B
而默认配置才0x4000、需要改大。1 ~" w* g- C5 L1 P7 b

, Q2 v; S4 H' g) B* J* M
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
  L- A1 U5 m1 w3 V5 U4 xProgram.heap = 0;
) Z1 W1 v* ~0 P# U9 Z/ I' Q! E$ ]Program.argSize = 100;  /* minimum size */
7 h/ A/ R9 S# U$ |' s1 F0 z! ?' rProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-10 16:35 , Processed in 0.042003 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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