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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

- f9 _' ?) O* L" [    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256% P! Q3 J4 d, H% ^& e" C5 O/ ]

$ o8 j# t9 M$ A  {0 D1 \) y其他程序段。。。。。
! g: u" Y) _' f9 X7 n& w . S; \7 h9 I' C/ K& _5 V( b6 n( x' Z
   free(x_d);
: X- Q4 Y' ]% d+ [, k' g% y" @( E$ ?1 Q$ Y! W+ S8 N# f1 ?
使用DSP侧单独调试功能,验证动态申请没有问题,
$ J. b+ |* m+ N  F1 R
/ P! @2 i2 P9 [- m( T! x, E( }. L$ a但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
+ ~' C; N) W  ]$ S: }3 H: `: D
# E+ r, ?3 y1 `, l: ?
  }) u- `) }  w5 L( T# x7 c2 j% a

9 R: s8 k0 }* ?7 {+ H6 ]1 ?/ p$ p5 C0 j/ I- {

$ ~! C. {/ H4 F0 Y: Q7 y
0 E( ^: X" G2 B0 I- a0 {: a8 C3 s# ?

! d% [( T3 P5 T+ r5 `& _7 t" a" z

) k2 G) Y) n$ b4 ]+ \
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
6 U: o7 X- f1 \. j1 g我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
# }  h1 I6 R( {" C0 ~5 M(不过疑惑的是,为何单独DSP仿真就没有问题呢?)3 O1 W9 D, C% u; Z- \% S( i
* h, F& E+ ~8 B9 {
是不是需要在DSP.CFG中进行配置
2 _1 B& t* G0 l' ^8 E8 v我现在的配置为0 U% u. c! y2 m7 u

1 Y/ x4 v& n5 W9 c/*
, C4 G* N" C! a  @( ? *  ======== Operating System Configuration ========8 l9 g' S! q3 s# `8 y2 |
*/
* x* j' r0 ?- h) C8 T) g& \8 u5 Z" d1 ]; u( p9 r
/* no rts heap */8 I$ M; ~( e! Q6 _" C1 S# x& Q
Program.heap = 0;
! \% I" ?( V! a. `( aProgram.argSize = 100;  /* minimum size */7 o7 `/ @0 s, A9 @6 ^' m
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
5 V$ U  @1 m2 r" C6 z
. q9 {- ]1 D8 Q- B9 q- ^/* create a default heap */
6 J# Q6 T& U& \, V9 Ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 n3 o/ S4 }& }var heapMemParams = new HeapMem.Params();
! y: g1 A" s  `- _/ k& r6 G. UheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
$ a/ O: R/ L# F% {& U: m. n8 t3 s6 _; c3 W6 |- s
var Memory = xdc.useModule('xdc.runtime.Memory');
  F3 a; r. S* Y6 e+ [* C( _Memory.defaultHeapInstance = HeapMem.create(heapMemParams);9 t0 t- A8 H( c( r

' M: h6 d7 e8 M" w/* configure System module */
  Y: q% t  a/ ^. d* hvar SysMin = xdc.useModule('xdc.runtime.SysMin');5 f2 n, g& t8 F' G4 ]
SysMin.bufSize = 0x1000;2 N7 X8 n: }" i# W$ }; C  `
SysMin.flushAtExit = false;  m! k4 m4 Q, F

( j8 C) {8 A1 r* M' M: `var System = xdc.useModule('xdc.runtime.System');
, B) N& W) Q0 J- }System.SupportProxy = SysMin;
$ J/ o. ^" x2 Y; z: O/ d! M" m: |/ w( |2 b3 d' O8 Z2 D4 a
/* configure SysBios to use the lower half of Timer 1 */1 D$ ]6 i2 U6 c
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');7 d+ X6 D3 F3 F5 q
var Clock = xdc.useModule('ti.sysbios.knl.Clock');4 c  R8 l' {1 {$ N& a
Timer.timerSettings[1].master = true;3 [* [8 q9 _* J$ F4 Y; M! N8 S
Timer.defaultHalf = Timer.Half_LOWER;
, |7 Q3 ]# H0 hClock.timerId = 1;" c" C* N# _8 i8 _
& ?2 ]' k; ?  x

5 p8 a( K  n0 e9 C8 C" l7 ?/*
! z1 l) ^9 i+ X: ` *  ======== Miscellaneous Configuration ========5 N% _3 d8 s+ @/ a4 B1 L
*/6 |( s5 v" l' E' f* n0 V

! M  z! q. X0 N( C% o/* set default diags mask */, T! Z' V. o+ ~0 V3 v; t) L0 o# P
var Diags = xdc.useModule('xdc.runtime.Diags');
. I( I' z! g- m/ \var Defaults = xdc.useModule('xdc.runtime.Defaults');$ v( \( o+ G7 M& H) r1 B
* Y8 d7 i. ?1 T2 N) f
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
% O. U/ p) s# O. i# Q+ T! ~: CDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
, q6 l! W& N$ e5 bDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;9 G, s6 s8 F2 p: d, U1 J' x! }
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */% I  k* z' X6 t" Q! m
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */: r7 c" d5 l- d! m
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;2 }8 q; P  \' J# ]# H- O3 {" C2 p
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;( U/ Y$ S+ y. k, n5 E# K
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;( I2 W/ E* q. t' ]- t4 s% n/ _# e- k
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
  ]* `1 ?9 O3 ODefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
4 C& q1 @6 R! Y2 V1 A2 K# Z% HDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
4 H. x. y+ r4 B9 y, zDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
3 ]& o! C. Z9 M! t' q. ^$ W' gDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
6 J! W& @1 r6 L9 {0 R7 hDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
2 T( {& g: v# G2 i# R
6 q9 W+ d& D7 R' H- X; U/* override diags mask for selected modules */
8 V7 L3 p5 G& _, y2 J  l+ l; uxdc.useModule('xdc.runtime.Main');2 u/ g# P2 G+ `+ C; X$ i" s) [6 `: ^1 v
Diags.setMaskMeta(5 j8 Z$ ^3 ?0 l: R1 m
    "xdc.runtime.Main",
8 J) f( Y* W; I: R4 E4 ~2 x9 }. R8 v    Diags.ENTRY | Diags.EXIT | Diags.INFO,
: E( d+ i' V! J* |    Diags.RUNTIME_ON5 B8 `7 R6 D$ n
);
) `0 I9 {6 T5 n2 N1 ^
. L9 I' w' Y5 v0 yvar Registry = xdc.useModule('xdc.runtime.Registry');+ R7 b* `$ \( m: N2 \! h. y
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;' C" u( {8 j8 B6 }7 ^& u" e( x3 v
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;- x& ~4 K$ Z9 n
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
# E  J4 x% _0 E9 ERegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
* I. F3 O1 r: ?7 T2 @3 H+ e2 V6 d7 V/ H0 M) A: V& g& D+ Q! S
/* create a logger instance */
3 G1 H' m) b& j4 P5 u, wvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');( l: l( r+ k/ w4 {" L2 v" j# p. ?
var loggerBufP = new LoggerBuf.Params();
/ U. ?& s0 s; H8 H0 h0 c* V. J4 nloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */. ]8 [% g  ^. y& g& ^
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
; A5 }$ V/ n, t- @- {7 `
8 Y3 v' p( g5 _# L$ _var appLogger = LoggerBuf.create(loggerBufP);- g' s$ {+ ~3 \$ Z1 ?; z9 Z4 {4 `
appLogger.instance.name = "AppLog_Core1";' }; H% L0 p6 O8 E% s
Defaults.common$.logger = appLogger;8 v6 M9 J. @" b+ [$ q' C4 o
Memory.defaultHeapSize = 0x8192;   
: I, f, l; {) C& b* \* HIdle.idleFxns[0] = "&LEDStatus";8 _' y& l5 P4 y( W% u
Cache.initSize.l2Size = Cache.L2Size_32K;7 {8 H1 U( y" S0 D) |

" z2 z* V7 G6 j, P
回复 支持 反对

使用道具 举报

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 */3 l! j$ o+ `$ e/ |+ ~$ f2 }+ o% e
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& J5 Q% A+ X. ]& ~" N- xvar heapMemParams = new HeapMem.Params();
  Y4 F" v+ {1 [+ }% N, HheapMemParams.size = 0x4000;
- F4 J' g' Z1 ?$ V& g$ D4 F
' W  ^3 h( f* d1 I: nvar Memory = xdc.useModule('xdc.runtime.Memory');
9 r( @: h3 @/ }" LMemory.defaultHeapInstance = HeapMem.create(heapMemParams);! n+ L% R4 L/ ?; r8 n
( `: I% v) O% k
我大约calloc  每次共计大小为5K*16bits,
) `# p" U; ^; p# O9 ~- x" W8 y' E: B7 N而默认配置才0x4000、需要改大。
( t! J7 u$ W# Z1 d3 H' y, r# u" E4 @
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
+ w% M" g, a  g6 k6 PProgram.heap = 0;' g7 x2 o1 d4 S! g# I' m9 |# G
Program.argSize = 100;  /* minimum size */; g+ M) B3 u5 u1 t% G+ }; e5 z
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-11 14:35 , Processed in 0.042192 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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