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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构( o; y/ z; i0 z# i8 P* s" E

* o1 r) Z; I& {3 Q& n1 m4 x    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2567 e- V2 G( z& n' q& c! ?6 G
, w3 T% x+ g; _) r, N, p: c1 Y
其他程序段。。。。。# e) b. c5 E9 r! L- L' F& |
0 l' P) y: u& x- e4 }2 E
   free(x_d);
$ c0 a4 R. W; A) B  _5 O- l( f4 X
使用DSP侧单独调试功能,验证动态申请没有问题,
% I0 m& ^3 ?6 t* T7 V' V- @0 l& C( I6 r
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
& \! C" Y! r! y
3 [' p; q9 G8 @3 H* @1 w3 T, z

/ Q$ {0 @6 U( D2 A- j" Z& K
% i* F$ `) D: c7 d' d% q: U: y" \+ |! q9 H% Z8 [: s
# L3 J9 i8 e6 u# T/ Z
/ t, m, o3 q4 F4 y9 f1 s
8 [; t+ L: x- G5 h6 M0 K

9 J% y5 x! Q# o6 p9 J5 ~: Z. m
: l. z: w: m8 I# s/ ]- R9 o1 g0 Y+ E2 z. ?" Q
分享到:  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 */3 c+ R$ B2 O6 C! `% D: U
Program.heap = 0;6 `  u  a/ Z" l  Y0 H# s
Program.argSize = 100;  /* minimum size */
8 G2 `  C! P  N; R, z9 k: ~Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */8 d5 U) _6 F6 C9 n. J
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( M6 I4 h/ ~4 ?3 Svar heapMemParams = new HeapMem.Params();
3 }9 e' Z* F2 |8 |. M! N! uheapMemParams.size = 0x4000;
, [5 l7 u5 v$ @5 M" |; @' v0 N  M0 g2 L$ U" e2 g% m) V
var Memory = xdc.useModule('xdc.runtime.Memory');
  E- y1 _1 H1 oMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
: Z" x; ~: g, o  |9 Z/ n% e% W6 r" P0 v: Q5 _0 b4 u
我大约calloc  每次共计大小为5K*16bits,' a0 i  r" P7 t
而默认配置才0x4000、需要改大。
8 _' H! \! V& X& k: P/ @# {7 _3 i) D, m8 y% l
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
) v  @, e! X; V2 Z1 H+ ?6 W我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
9 [% }2 l% k( Y9 A% p) c(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
1 |. A* J" ]2 K& F% `  A5 E- n
0 A) A* C7 e6 W$ G" W! k" \
是不是需要在DSP.CFG中进行配置9 {+ ]) D$ D5 T7 Q+ C
我现在的配置为
9 A6 E# W2 ~- ?8 o( O6 v4 @7 i: ^% U4 ^
/*
) U3 U" a1 F) f9 w* k; O *  ======== Operating System Configuration ========
7 L! [5 V) R0 Y- G/ X4 I) A */" b5 \" H/ o. h. {$ I- a" L( {
) r4 i( ]' m' L( M
/* no rts heap */  J8 v5 _, H- Y! ^# E
Program.heap = 0;
  g; \% f, S3 P' i( O0 H' T  G4 h8 a9 xProgram.argSize = 100;  /* minimum size */$ h- I4 E1 v1 ?$ z
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
, l( _. Y% t4 w
& n  h, w' L! T* i* _# ?( B/* create a default heap */
$ o/ a8 D& R/ d& }2 Tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ u4 @& y2 P! |" e5 F+ I
var heapMemParams = new HeapMem.Params();9 T1 s; I; z. o; {$ X, a
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
' C; O. f2 P4 |. W4 |) q1 N' D3 v0 z7 P  j0 l; J0 l
var Memory = xdc.useModule('xdc.runtime.Memory');
. \4 ^0 _+ P# s+ x! ]# ?Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 C% h8 p/ d! E* Z
0 S7 `# t6 |: s6 _0 l/* configure System module */+ a6 ?- t; s# G' T% k' N
var SysMin = xdc.useModule('xdc.runtime.SysMin');
  d0 e( R- Y% u" ]5 ISysMin.bufSize = 0x1000;
6 E* T  z7 J2 u* d9 g7 H6 lSysMin.flushAtExit = false;
& ~) l+ i2 b4 p, G: b# f* E  a# V% U
var System = xdc.useModule('xdc.runtime.System');4 f# v" o8 K9 `5 g# {" }% Z- _
System.SupportProxy = SysMin;
& ~7 }8 N. ^: h  O4 u' f( F
& d6 }+ O, i) U6 E) X8 L% ?) x/* configure SysBios to use the lower half of Timer 1 */
- D) P+ c0 [9 z7 Lvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');! J) o, b  F, S, Z1 r4 k0 f
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
4 Z9 b! A2 u( @' LTimer.timerSettings[1].master = true;
; @7 n# Y3 G- G7 ~+ c5 YTimer.defaultHalf = Timer.Half_LOWER;# }: h2 k6 f) F% {" w: P
Clock.timerId = 1;% e6 u, h' R0 ~
& W" L/ S- ^: B' V

! R# D6 Q: W: y9 T/*( t1 y$ h6 r  F. i4 g# Q
*  ======== Miscellaneous Configuration ========
7 e* r% h& ^+ p' v5 T5 r */
* n8 c) D% K  `0 ]# P0 K$ K3 v- S% ^6 {5 v3 J5 Y
/* set default diags mask */# c' @; y  @  C" E) t
var Diags = xdc.useModule('xdc.runtime.Diags');7 V4 v' I& L% i5 O
var Defaults = xdc.useModule('xdc.runtime.Defaults');7 e2 I0 U1 r% V8 U3 d
3 \9 ?. x* e* F3 a# z' N! R) B3 A! A
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
; O3 v' e: c/ @8 y+ W2 Z8 iDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;9 N4 l( {5 U5 l0 s: Y9 a8 }, z+ o
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;8 R; n4 i2 H, N7 L! E
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
; f8 \4 T$ ^) ]4 GDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
, y. M; F  {" y( aDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
* E0 G8 T6 E* O* h& LDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;& }/ p, e% e& }# Q& C3 i% \
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
4 Z: T5 ]) _7 f) GDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;+ R1 V& y' J  y' I
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
1 j$ O/ n2 n+ j# W% a7 a: {Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;, i& a7 ]8 ~: X$ Z
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
8 ~% [! }( G' c; j( _9 g% t& WDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;' p) P  }- ~, A' I5 t3 P) D5 z
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
1 e; q* |& s( x: V( \; L
+ u2 N9 n9 _8 s: u/* override diags mask for selected modules */& [7 r& }! a) f& \& U
xdc.useModule('xdc.runtime.Main');
/ A1 @+ K( w7 T) N" R4 yDiags.setMaskMeta($ S; I7 W+ V3 m, |% ?, \. F% N9 B# i" K
    "xdc.runtime.Main",
5 Y( C9 j( M0 v( D  R5 w" v    Diags.ENTRY | Diags.EXIT | Diags.INFO,$ C0 O/ O3 O6 R) L0 ~& {, \
    Diags.RUNTIME_ON
( c' _4 f7 f1 ]3 }1 [9 M);' Y$ c6 G$ n& U( L
# n$ ?, G' j0 ]& l
var Registry = xdc.useModule('xdc.runtime.Registry');( X8 p8 g! `* ~% Y+ D1 u. D
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
" r! P( q4 a; I5 i  T. JRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;; A+ I+ Z: N9 h+ E. I3 [
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;# M; D" `- \  p1 g
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;. U4 u) ]/ A% x9 \1 {' Z( W: u
9 }  g* G( w( g% O
/* create a logger instance */
9 ^# h8 r& ^- J/ y" d; d' q5 _var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');, K$ |! ?% T9 U$ \, @8 T1 {
var loggerBufP = new LoggerBuf.Params();; A; ~0 I6 H. B5 s1 L
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */3 C, f+ I9 k% f
loggerBufP.bufType = LoggerBuf.BufType_FIXED;  h. g( ]  T) T
( U4 K5 h: S4 h. u9 j( M* e3 k1 w! u
var appLogger = LoggerBuf.create(loggerBufP);" T1 l1 [& O) L
appLogger.instance.name = "AppLog_Core1";. b5 D5 x8 T/ {& T0 U5 a3 O
Defaults.common$.logger = appLogger;( Y+ D7 Z( Z' ~, g) [3 n: a0 N
Memory.defaultHeapSize = 0x8192;    ! G) E  ?; X4 Z& L0 L! e5 y( l
Idle.idleFxns[0] = "&LEDStatus";
$ i2 ]1 I7 s2 s% U9 R- q) C* eCache.initSize.l2Size = Cache.L2Size_32K;# \1 V# \% r( c. n* l

6 v- B7 A! n* F8 F  ?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-7 15:33 , Processed in 0.043103 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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