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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构2 N  Q& t1 z( p
' Z6 E; y: t+ E
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
, u% n! M0 X% h" }. H
, m, u) t/ R- D7 P0 p/ Q其他程序段。。。。。* K) N; \" {: s8 t
% r' O2 L- }+ p, V2 F5 l" p
   free(x_d);- c( R. a6 i8 T  W+ b, `
$ e: g, Z2 k- V
使用DSP侧单独调试功能,验证动态申请没有问题,& e' ~* n) B" }

+ F8 [8 r6 ]! J" E" `& E6 y但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。4 r7 g4 t1 k3 V& O% Q  f) h1 S

$ D+ [) o) D2 A; x! f1 y7 I1 f4 b% S4 g, Y3 z8 U9 N  q

  P/ N$ E1 R' q; A8 E: J7 {$ E% X$ _! @" }' F5 L* M. v
' J% D$ q8 J0 j" z8 j. k% b, p
5 N6 ~$ U$ |( [; Y

# k2 |. X. I8 v% a& P
- @5 f+ C5 Y/ u/ _) \$ }5 _' S, ?7 n
* F5 J; y+ z& Q0 x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明" \% Q1 ]/ w' x
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下/ \% I  y. Q7 i1 k, @) U! C* s3 W
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
$ E; |2 y' Z6 m
  m* G* d. C# h& R
是不是需要在DSP.CFG中进行配置
% I" j; b# n4 T5 k# O我现在的配置为0 j3 T0 ]9 E6 P% e) f
# p" j( G+ S; Y7 O- z
/*: n1 t- D( x8 T. |
*  ======== Operating System Configuration ========, M) t6 g( b# f/ U; p3 X
*/
+ G) k9 p1 X7 M* R, Y5 v& w
& @6 Z+ O: Y" Z/ q1 ~0 t; E1 w( P0 A/* no rts heap */7 l' Q" @  I  D& I6 ]; \- h
Program.heap = 0;6 {6 ?9 j: N' x5 Q' w
Program.argSize = 100;  /* minimum size */
9 U4 s7 O" {4 A, EProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
1 V4 i; d1 G) V$ {+ c6 n2 b  I7 t- J! z
/* create a default heap */
8 |5 W. V. F, F( Xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" [. [- f4 Y) b9 hvar heapMemParams = new HeapMem.Params();: b6 j5 D) h4 X% O
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
! |5 R4 H% c0 p8 [/ R; K" P$ N( o
0 ?$ N. d" `" x# e* ^: |1 A$ G  [' V
var Memory = xdc.useModule('xdc.runtime.Memory');
1 P' f4 w) G' @9 j! SMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ `1 e5 Z- B" X# m/ i' U- R
" C* N& }/ m: o+ @5 B+ c/* configure System module */
$ X$ l) b5 E2 K9 l  tvar SysMin = xdc.useModule('xdc.runtime.SysMin');
, M2 {) t  V6 A1 o$ y0 g/ c9 \( QSysMin.bufSize = 0x1000;
/ U$ ^; L1 |0 m: uSysMin.flushAtExit = false;
* X# T8 I" N* p. c1 d+ G: Y2 ^% B8 R# O% l8 [2 l
var System = xdc.useModule('xdc.runtime.System');
# [# m: E' E" d) g) y5 O# jSystem.SupportProxy = SysMin;
( n' K- C3 ]' F
6 z" W/ |( B5 Z& W# ~1 G/ |% D/* configure SysBios to use the lower half of Timer 1 */
$ F/ X( E  `( L3 Xvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');" A! u, I! z4 q1 O$ F# Y9 ^6 S
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
0 g4 _% H- _1 PTimer.timerSettings[1].master = true;
& V4 D3 ?9 G3 \" `Timer.defaultHalf = Timer.Half_LOWER;
) r3 x! }; s. o3 kClock.timerId = 1;
' G" z' @2 ^% n; J4 I  V
: Z3 N" u  |( T8 _3 w+ l5 B
( Z) i; r; \2 ^8 M$ y, e  X/*
! l9 ~- i0 ~/ Z( S( F8 G *  ======== Miscellaneous Configuration ========
) f/ i* c/ b7 |, J */( [+ C3 g, ?5 A4 G3 ^* i

2 s% }7 _  E# b9 E% X  ^- [! ^/* set default diags mask */3 q) [) L' b4 i3 i$ i) k4 D1 a
var Diags = xdc.useModule('xdc.runtime.Diags');
* f- ~& U7 Q* `! Svar Defaults = xdc.useModule('xdc.runtime.Defaults');
7 q) n1 j( q+ R7 _- d% [* o# j$ R, j; n8 p' M' g7 {! n
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 L% o& u2 J' M4 w+ e
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;- {* T4 r2 n, |  L& x5 c4 F
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;( {* o0 G) A3 w  k- a
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 |/ o) c$ f/ k" M5 d
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */1 O$ s7 V  R* k9 i) A
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;- l; y; p( P4 l! N0 a' I, U
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;1 p- F! v; ~) |; O. V/ X2 ?( b
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
1 I" u8 q. H  \! e# ~* kDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;$ D! e$ I; d- j3 p! }2 w8 C
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;. S7 ~( q7 K* y) L6 J% ~
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;1 Y" z8 i. W' D
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;8 T; Y+ e- _# L! `! W
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
1 S: z* O: o  v5 M  DDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
$ Y- K8 O" b  t1 u- e% Z! y
5 A4 m6 Z) m' D  F: K7 n% q% r/* override diags mask for selected modules */
4 x! h1 O- k- w6 ?- Txdc.useModule('xdc.runtime.Main');
/ w# l# b+ i. f5 S' hDiags.setMaskMeta(
1 A$ W' j! C7 k+ Q+ @    "xdc.runtime.Main",
, [. |+ X/ ~1 G. D4 V& e: ]( n6 s    Diags.ENTRY | Diags.EXIT | Diags.INFO,
* A. J  z7 L+ y. ]    Diags.RUNTIME_ON# r8 U: y5 p8 _- y
);
; m1 O* W' m6 w* }7 n0 V" A# |" E$ H6 D3 C: d9 e: r9 r& e
var Registry = xdc.useModule('xdc.runtime.Registry');
! R3 e/ }. I, X2 c. u3 cRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
1 p3 D( \  N3 c; JRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;. q$ o! Y7 r5 a7 d8 i& Q
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
0 B6 f% G% N) GRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
8 U9 q5 V4 `$ e
4 W. N3 v3 K+ I2 d/* create a logger instance */
  V6 X6 V1 M7 u# ~var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');9 E0 |. h% [" [# i  C- [  c2 U2 C: G
var loggerBufP = new LoggerBuf.Params();
; T- S, z, V# Z; e! y' AloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
- I4 f2 V* q5 {$ I  ^3 i4 ~& ]loggerBufP.bufType = LoggerBuf.BufType_FIXED;& r1 E) H3 a1 e4 S5 c" g8 ]! M
1 x4 F! W) w" O
var appLogger = LoggerBuf.create(loggerBufP);
  l0 z& i) F3 m# c8 E$ R/ i7 bappLogger.instance.name = "AppLog_Core1";; X( Z9 _, h. q$ a
Defaults.common$.logger = appLogger;+ A  y; Y+ B" q: M
Memory.defaultHeapSize = 0x8192;    ' l- S; F2 Z- V3 e, W
Idle.idleFxns[0] = "&LEDStatus";  o3 T1 |, O: c5 z  A6 g
Cache.initSize.l2Size = Cache.L2Size_32K;! `. P" T" a. M' i2 S

5 @- f1 r  ]% ^+ S5 X' W3 Q
回复 支持 反对

使用道具 举报

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 */
8 g( Y8 Y% B3 B/ |, p$ j' `var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 l( p" N9 X* I7 k6 U9 n! E* Avar heapMemParams = new HeapMem.Params();
' [& i0 E; R" ^, a3 r! x3 vheapMemParams.size = 0x4000;
8 ?# _0 O4 v* F# K& ^& y6 Z9 I4 y
var Memory = xdc.useModule('xdc.runtime.Memory');
8 x3 n0 F: A  C0 b& j8 A+ ?Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ h6 O8 A; d# {: F" m# W5 C5 x
+ e! V9 [# e5 T5 T5 T' A$ Q我大约calloc  每次共计大小为5K*16bits,) _, D+ M- F  M3 h9 E4 N1 d
而默认配置才0x4000、需要改大。
8 t/ A/ L3 y2 o  \2 A
6 O6 [- {) ~6 _9 ^: }( l
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
( o- f* Y' C& t& `" z+ DProgram.heap = 0;* t- z: o: R( i$ p& S; i
Program.argSize = 100;  /* minimum size */
' K, y" K7 y! p+ z# q' A! BProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-28 23:20 , Processed in 0.041722 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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