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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

0 Z6 C5 ]  T  |, C3 V) D  W    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256  @3 _4 C! O# D3 R& ^5 @

  B0 B0 c" v/ E9 {其他程序段。。。。。; _) @! m2 V  y! k& c
; `9 Z5 B/ _' o( S" l, ^
   free(x_d);
% T# O( d4 G/ I) S' l. o! V$ e# V4 M4 h  Q4 \
使用DSP侧单独调试功能,验证动态申请没有问题,% X2 I# n/ Q/ X' X3 M2 ~" \& i# Y
1 H, [$ |7 k7 X7 a5 o
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
4 u6 y8 O5 ~$ z' N: q

" {/ L/ O6 a2 t! E+ P/ s+ z8 u; ^8 k
9 V  C% |& {6 ~0 h
0 @# s/ E" R. l6 u" Q3 A+ v; I+ J- u' e) M) M" h1 ^- W
5 {; C/ f( Z/ D8 ]

. A& Z7 I; E  B9 S/ }- n
8 m4 G& {. |1 A  `2 |% W$ k& ?9 A. B- t" \: _: U& J) m4 w
5 G/ y# Z3 E, r) p! j/ S" e; H
0 E6 }* B; c# d4 S  a  Y; b8 V( H& J
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明$ M  {5 `# Z4 a" [! V5 `0 ?
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下. x) {$ w6 i" u' F: {% s
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
& C  z/ a3 g: y) u) G4 W! X, s' Z( ]

; s7 Z  x- L' ~: H  \; z6 E- n是不是需要在DSP.CFG中进行配置
/ H/ A2 H, Y% H5 J# K: v我现在的配置为" f# n& A  V/ H$ A4 v1 p8 G2 U
" C7 ~! P) s, l
/*
# T3 @( r' M) [% i9 F  X+ h *  ======== Operating System Configuration ========
9 U, s4 p/ j; \: Q */' J" M6 ?1 r% x! b. L
! F! X% S3 w: V% V( r: H$ R
/* no rts heap */: E) `/ J: X  h+ w/ B
Program.heap = 0;. K1 R: u' {  ?6 K2 R" J: R8 Q
Program.argSize = 100;  /* minimum size *// J: ?2 H  }( P5 c3 [
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
3 Q$ C( G5 L( s  N
3 r( K3 J" n9 B. z4 |$ o7 M/* create a default heap */
2 ^. ~  s3 [' {& H, e' a/ cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) h1 I: i- j0 A1 r; ]* p
var heapMemParams = new HeapMem.Params();0 |  s1 T2 Z6 O) _1 A2 f
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大, x# ~, u9 S/ g0 {4 I$ E: n5 `2 X
! q& _1 I3 g+ q
var Memory = xdc.useModule('xdc.runtime.Memory');
, y& P& L+ z$ D& K8 m5 y  \9 ?Memory.defaultHeapInstance = HeapMem.create(heapMemParams);. v1 l4 v$ X0 P/ k. Q0 ?

; C9 B3 ^6 j! ]6 I  s7 D4 B( C/* configure System module */: R# }- W, E, U! h5 M1 s7 X4 z# m
var SysMin = xdc.useModule('xdc.runtime.SysMin');3 \* `8 ~3 Y& J' F( C( l) V
SysMin.bufSize = 0x1000;
6 [7 x. P) W2 }SysMin.flushAtExit = false;4 B# L* q5 ~! B1 L2 O
; O4 x6 M5 O, E0 Y
var System = xdc.useModule('xdc.runtime.System');
  @- ~) H( N" d6 j8 T1 fSystem.SupportProxy = SysMin;
) Q- N9 H* E1 S* X
3 U1 i3 K  P. P7 X: _/* configure SysBios to use the lower half of Timer 1 */( T7 I4 M- _% J7 Q
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
) O- I5 u* k- @var Clock = xdc.useModule('ti.sysbios.knl.Clock');
2 E! f! Q9 `' pTimer.timerSettings[1].master = true;
7 Q: h( s+ ]6 U: J5 e% ZTimer.defaultHalf = Timer.Half_LOWER;
/ T' d5 v2 `: tClock.timerId = 1;5 f0 g8 \3 M* V: J

2 P5 L2 E7 A" g  m6 m5 q  d' y$ C& I# p
/*  k! a! W2 t5 }- }' _0 l
*  ======== Miscellaneous Configuration ========
* B' m* t9 X& y* B1 H) [ */% p8 T; t1 b/ }- d& o2 J) y
4 |/ i/ G$ a& I! T4 ]0 Q4 V
/* set default diags mask */. a2 y7 b, [6 y; i: @
var Diags = xdc.useModule('xdc.runtime.Diags');
- x$ R) H3 n, x+ G. X# Yvar Defaults = xdc.useModule('xdc.runtime.Defaults');. m8 L& h4 @2 d7 c4 ^0 _# p4 W

6 s" r( W0 i, ^7 ]Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
2 v" ~3 a/ i% M- Q9 Y1 W5 iDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 [' B! q+ E; v; b0 }! qDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
) c) Q( W5 Y" C" t+ C) VDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */1 I% Z) {7 r) A5 Y( V  L) C
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 {( w9 _; S" Q+ n# N- HDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 e9 K2 f. d/ Y7 Y7 @
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;* A) g% j5 @  t5 `- v( M. l
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
. h2 e8 U" T5 RDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;' S/ z+ T$ A. R6 \6 J
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
) L3 Z$ T8 u. W4 J  `Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
# V& z+ L. A: n. zDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;" _" ?7 L, y% z, N7 g) g+ I
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;/ _, d# t& @" v$ h7 Q/ ^
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
8 w. n3 c: F# _4 a# E6 @1 i0 d* g. t
/* override diags mask for selected modules */
$ s* x$ ]; s- U# Z0 o9 jxdc.useModule('xdc.runtime.Main');9 ^% E+ T8 o) t4 D
Diags.setMaskMeta(* Q, E0 D" i$ T1 \" i
    "xdc.runtime.Main",: I6 V" v" t- ?! U& H. u
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" {% y3 {4 U& W+ s! v, [8 E    Diags.RUNTIME_ON1 o! W# d+ ^/ l, ^7 a9 v1 w2 B5 N
);. f: b6 q) p3 _" t& V9 ]
) H7 I5 |( w( ~
var Registry = xdc.useModule('xdc.runtime.Registry');
. g+ I0 |4 ~% H; `/ WRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
6 O" [: `8 R- j/ [Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;7 a3 g5 }% _1 `0 l6 U: G
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;, @$ V0 z5 d0 f* Q6 x6 n
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;9 U. r% X9 F2 z. O

* Q  g& O4 Z8 N9 X: l/* create a logger instance */$ b/ G' _2 W  `; k
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');, j1 C7 G, V. ~' X
var loggerBufP = new LoggerBuf.Params();
/ o" [/ T& w' o8 O: d+ O7 p9 zloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
- _3 X* P. B+ W' H8 W! K/ A) ]# }loggerBufP.bufType = LoggerBuf.BufType_FIXED;
/ n: b; @. I! V1 E3 M; X: d' r7 [
var appLogger = LoggerBuf.create(loggerBufP);
% h. g4 q) U2 Y' p! E9 a0 YappLogger.instance.name = "AppLog_Core1";6 T# ?" q; j8 G( G6 N7 c3 k7 P
Defaults.common$.logger = appLogger;
! ]2 T& P) j0 T. W% F3 OMemory.defaultHeapSize = 0x8192;   
. f7 _; |' |) L) J9 P/ b; |Idle.idleFxns[0] = "&LEDStatus";
: E- H# G0 O; Y: R7 q. S0 @, [Cache.initSize.l2Size = Cache.L2Size_32K;
7 D! r; x  ^$ t9 I! C0 t1 o; Z; Q7 f3 g( N1 x  A% y/ D
回复 支持 反对

使用道具 举报

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 */% y" m* y$ |* Z7 R) j  Y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 P7 p' t9 K7 M6 e8 ivar heapMemParams = new HeapMem.Params();! R: z# z* c0 F' C
heapMemParams.size = 0x4000;, u4 H' a' s  z/ C) h
6 {- J9 F5 a+ N( I/ N2 P* s8 ~
var Memory = xdc.useModule('xdc.runtime.Memory');* O! E" L$ O+ i# \: S+ K; q7 z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
& X. n/ |( \/ _4 u% E0 [6 s8 R& @% w( ]- U* e, x
我大约calloc  每次共计大小为5K*16bits,* q4 J# R& }- y4 _- H- r' j+ z& R
而默认配置才0x4000、需要改大。9 s# G3 `5 A0 {" K
0 ^; ]5 S3 C% J7 z# r+ V0 L7 W3 F
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
+ m6 o9 c- {& R/ P. }/ [" H# SProgram.heap = 0;; K: G" z* u" D2 A6 X2 i
Program.argSize = 100;  /* minimum size */
, K5 @: R( d" U9 c2 V1 o5 |Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-27 09:28 , Processed in 0.042011 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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