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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构& e- x6 h" H# m% ^/ P
' J4 W6 B: u/ y% r- m) D, g
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
( n4 S" {' y; U7 h
  H: W. }# h2 _( w其他程序段。。。。。
" b8 v4 ~! N9 l+ O  G 3 U' f; P% p% w' v
   free(x_d);
# Z  t' ?* j+ @& P5 v
- |3 \+ J3 P. T" t0 u# @/ r使用DSP侧单独调试功能,验证动态申请没有问题,
( V! T* n; N$ I% e2 {3 G* [0 q# p
8 `$ g3 Q6 y# B1 ]但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
4 `: c9 B3 J( D! p0 O3 Z

5 w. X1 h8 z# X  D! D8 W2 K9 A. J: Q% P2 j  [5 N2 o

' _7 o2 I3 l, B9 H0 \# x6 Q7 W( V; t) Z. N! `2 _

' V* W- {* ?4 ~: X- Q/ J
1 @$ x$ k+ ~7 @% _& \& j. X7 K1 A7 O3 P1 _6 P6 \( b
% J" |( w7 _5 H8 W

/ z% @. m! ?+ c$ n$ L% a; p' T) X2 z  U) V! r$ D% h
分享到:  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 */
# U; X- O! R0 w3 K; V0 ^0 ~Program.heap = 0;! m  T4 I! c7 v! s1 ]3 G
Program.argSize = 100;  /* minimum size */
% b. l7 Z# N# h/ H$ GProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
% z0 K; \' P% z0 G( ^var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 _& e0 ~* m! D2 ^
var heapMemParams = new HeapMem.Params();* n( \% c; }& G- b1 v8 i# G" Y! X
heapMemParams.size = 0x4000;
4 K  y) T) a2 |# z+ X, N6 u" [  e! ^2 Z# U. p4 R
var Memory = xdc.useModule('xdc.runtime.Memory');, H* a- H" T6 y- R( h
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 H0 k2 c% h9 Y) |6 z8 H
+ z% h; V# A- t8 d4 j: G7 _7 c我大约calloc  每次共计大小为5K*16bits,$ I  [: @3 z. Y& [2 V, E
而默认配置才0x4000、需要改大。
( s+ T9 T! z' \9 A1 @% n9 X
( f& I) i. T# w; |2 A8 H$ `
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
3 P% k1 c* C# U+ n4 O我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
$ s; K$ s  [7 G, @(不过疑惑的是,为何单独DSP仿真就没有问题呢?)% q$ F$ J6 b7 I5 f$ ]; R4 t; M8 E
5 g' D0 A, w0 }3 t
是不是需要在DSP.CFG中进行配置' L; e8 ?* M8 x. r3 A8 f
我现在的配置为; x5 F, H1 Q+ E* n' U

7 H' u$ y. k, d/*! j) ?5 @. ^, F" D5 w% i. h  \: ?3 m
*  ======== Operating System Configuration ========
* t4 d1 Q1 z" v, e( O( O; b */% a( e+ c% p' T! ]: P
$ w5 r/ F( Z# E! k8 f
/* no rts heap */9 }; v0 O+ t" M3 K6 f1 X
Program.heap = 0;- v! K! w$ p+ E& H
Program.argSize = 100;  /* minimum size */
; O4 V. e0 M! \! I8 y3 _Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' v0 Z) @( X% s# H. ^
) @" Q6 D$ B  }: M4 |; @; v% i2 V" e
/* create a default heap */
* L1 W2 H2 |5 o$ |var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. E; K5 T) D7 D0 L
var heapMemParams = new HeapMem.Params();# q; q" h5 ?2 t0 |
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
1 b* r+ h  U/ ?6 e5 R  o7 G' T5 W6 [! c8 }0 s4 A7 _" Q
var Memory = xdc.useModule('xdc.runtime.Memory');  a( \' R6 ^) j+ U8 v) T% I* ~
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
, R3 Q5 ?2 |" }/ Z) Y) H' K% \" ^
7 }/ _# A' b4 E7 F, G. ?/* configure System module */
5 z! W9 q( J9 C- ^- S6 e% W1 V5 lvar SysMin = xdc.useModule('xdc.runtime.SysMin');
7 p) p: S) Q& B7 F4 l" bSysMin.bufSize = 0x1000;
, ^& Y# d9 m8 [1 `1 J+ Y- f8 {2 }. _. qSysMin.flushAtExit = false;, d/ M& [3 }7 O3 @% w, i5 `, @* a( b

( k9 n2 V- Q# Ivar System = xdc.useModule('xdc.runtime.System');
2 w5 }3 W! X5 J5 T/ ~5 h) `" G$ mSystem.SupportProxy = SysMin;3 N  z2 a  l# }3 j& X' p1 a
/ Q& s/ y6 [/ r! n+ e) G% A* `  a
/* configure SysBios to use the lower half of Timer 1 */
5 P% l0 q/ I5 e; q, Mvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
+ j( K# f8 ^1 Y& ]/ avar Clock = xdc.useModule('ti.sysbios.knl.Clock');
8 F' Y% N( p& B' BTimer.timerSettings[1].master = true;
; N1 U& l$ D' D! E" h( {Timer.defaultHalf = Timer.Half_LOWER;% g( l, q" n9 v4 ]( u3 {# ^! V
Clock.timerId = 1;
$ V6 v# L  ]8 g: P/ E9 S: B; w1 ~2 |3 E' A

0 S0 \; a# G: O5 B$ H6 `0 f4 F  ]/*
, V! h( h! y; S8 ~: U8 I$ @; s8 x; i  e *  ======== Miscellaneous Configuration ========; f% U  L* @2 u3 B
*/
% f7 _; ]) j! n" }6 Y8 y+ M! s; @4 N$ i
/* set default diags mask */( ^! C  V& [2 ]/ b
var Diags = xdc.useModule('xdc.runtime.Diags');
% {5 j! ~1 S1 z2 q! i* t3 G" C3 b( tvar Defaults = xdc.useModule('xdc.runtime.Defaults');
+ I# e3 T/ R" g8 M% y
# M3 x7 y- z& Y8 a5 kDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;# `! w, ~- c" w) q7 g
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;( I1 j4 a1 ?# \3 g4 I
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
7 H% q' C, j* u/ o" p' r" m3 w! {Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
% F; T% ~% ~! h) sDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
) I% J( l! x6 {! j9 ^Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
, e; z9 w5 m# yDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;0 S7 n) K+ \; |' o% ~) q  `! `: h
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
* q( l. g$ H1 y  l9 V- f. t4 kDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
: G2 U8 a5 a3 t, l' H/ n: pDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
4 ^* E5 t( \- U4 O) ]4 E0 R8 d: DDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
6 g. ?8 \: n( O" F1 ]# `1 Q% ADefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
# V% o8 N1 Q/ U: o( U) TDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
! K" W- f7 U6 YDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;  ?! C; w( i3 n8 [
% E, Q: Y; S. j+ M0 p, O- V5 m4 {. ^
/* override diags mask for selected modules */
& w# u5 q$ @2 f& v& E3 m6 lxdc.useModule('xdc.runtime.Main');
' }, M  M  ]' EDiags.setMaskMeta(
6 Y$ A8 i, ?0 K- Z* y" b    "xdc.runtime.Main",1 G+ n% {! T  T$ S5 D+ x
    Diags.ENTRY | Diags.EXIT | Diags.INFO,* n8 a& h; z& z& h
    Diags.RUNTIME_ON
& F3 D* s1 B* C% o);
" l+ P% T9 N  z& i. K2 q. @5 O) E- @* \4 T0 U8 x
var Registry = xdc.useModule('xdc.runtime.Registry');
* F9 T9 F& ]1 s# n2 W2 t1 {% ]Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
: f0 v, a+ {& j$ |* ?" q+ U4 d! H8 iRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;  ?' K, u" q  X; r8 Y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: [0 q" O8 B' l  KRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;+ S* N, @8 C# R; t$ ?4 F$ b% K0 ~! z
4 Q4 F+ Q; S3 Y; u$ o: `
/* create a logger instance */4 Q' D, G" T- J0 I3 j
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; |- v$ D$ q, Bvar loggerBufP = new LoggerBuf.Params();0 g% M2 ]( C1 P0 n1 {  Z! W* y) M
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */5 V  I' ]3 C+ w
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
; j2 X8 S- T, `4 i
/ v& ^) V$ n- K7 U+ ^var appLogger = LoggerBuf.create(loggerBufP);! e$ K% ^8 u+ |1 K/ V: W
appLogger.instance.name = "AppLog_Core1";6 n6 S- C+ [  c- @; @9 y. |$ c& |: E
Defaults.common$.logger = appLogger;
4 r- L* h" W) l1 y4 sMemory.defaultHeapSize = 0x8192;    * H% y8 `3 ?1 r; ]" P
Idle.idleFxns[0] = "&LEDStatus";
$ A# y  `( |. L. j* [Cache.initSize.l2Size = Cache.L2Size_32K;* T/ P7 z2 _3 ~; |

3 [& `8 b% y2 m) m  ~' {1 v& O$ P
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-13 15:24 , Processed in 0.042142 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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