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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
# P8 v! P4 N4 m4 n. o3 m' I! r; k
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256" `7 P) G4 n# s( `3 k' E  R

  x" e2 T0 y/ q1 I- M6 C1 e' _& H" d其他程序段。。。。。9 }3 f) v1 i9 M$ O: m2 S* w  x
' a- V& ~) Q' S/ H* y/ u: e4 }
   free(x_d);; C1 c: E2 B9 w2 h# c' Q

5 k7 k! Y) ]  R1 {! u, e使用DSP侧单独调试功能,验证动态申请没有问题,. X& L9 [  g7 B

, R0 T7 K% b+ n8 W; S但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 a  D! h# h4 l9 R; y

  b( H6 J& ?4 z2 n) ], [0 F$ K& N, [1 \3 Y2 u8 j
& I+ s% S2 m  T

$ V( `: n) H  k5 Q0 ~, b8 M$ v/ h/ @* t/ u( g  z; p

5 W9 \+ |* g9 e/ i4 x
2 e/ }" \6 p* o4 t" \
. ?+ @! g; c" b6 j' D" |% K$ X9 l# g; q+ L' j8 f$ ^: e

; B# J$ Z- P5 D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
9 s2 s7 V' ]4 w9 S5 P我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
3 w' ~$ j1 @) c9 a( m(不过疑惑的是,为何单独DSP仿真就没有问题呢?)4 ~: k1 r; |( N# V. n' _4 u' v

- @& O9 p0 ~0 v  n6 B8 u; A8 a是不是需要在DSP.CFG中进行配置
. X+ g$ y% v* T6 M' M, D我现在的配置为
6 s9 e: L- S: a6 U3 t) J0 ~
8 G: Q: u$ Y% G8 H' ?1 O8 ]/*; o+ j- I/ O! R: }
*  ======== Operating System Configuration ========! b1 k) G( C, o( r
*/$ U6 X" G& y4 r( ~: H$ T( w
6 Z! Z6 F8 f' K) [$ W
/* no rts heap */, n# X* b8 Z: K4 k- I) \% L
Program.heap = 0;, a) Z. z4 Y: W% u
Program.argSize = 100;  /* minimum size */
* \" Z9 u& F4 zProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
. M& ^; n7 _. h8 Z
. E5 E1 q+ Q. B- Q/* create a default heap */
' b% D, m2 }" k5 Gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( ?; P, I+ e( j$ svar heapMemParams = new HeapMem.Params();' c& ^4 f& t; t0 U$ s
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
$ h; p" |) E! I' T: ]& p* j' y3 a4 H% P8 ]4 w6 D7 O: K
var Memory = xdc.useModule('xdc.runtime.Memory');
9 m  C3 m3 A$ h$ \) DMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
# ?( z" ?- G/ J; Z7 u. v, P& U+ [' Q, T1 Y' R5 r3 @- }8 H# g
/* configure System module */
; n) ^( _  G9 Jvar SysMin = xdc.useModule('xdc.runtime.SysMin');: r2 O+ T+ d  G' ~! D. _  P! W
SysMin.bufSize = 0x1000;
4 q- L; _: Q$ o/ `) |SysMin.flushAtExit = false;
, Z& e9 o5 z% l% x( C$ X6 t. d2 j' Q' S( o; K$ p( g
var System = xdc.useModule('xdc.runtime.System');
$ ?6 h, y% w9 B% L% \- [System.SupportProxy = SysMin;% U* i0 @, c6 ]8 C. O. [

  Z4 {" p0 m5 [/* configure SysBios to use the lower half of Timer 1 */7 I& U3 D" n+ y+ B% k0 w; j, n7 u
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');" N% m7 P$ z6 W8 \$ m2 x- B
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
. S- F0 x2 i& M6 yTimer.timerSettings[1].master = true;# `5 b6 G4 N  N, h# D3 i) p) b# f
Timer.defaultHalf = Timer.Half_LOWER;0 P8 }9 Q' ]2 ]) ^7 q3 V4 S2 n8 x
Clock.timerId = 1;
& x0 D. O  J8 x& O; U' s( X% G
! _% N0 f& ?- J" A
( [- S2 g+ v+ U9 |. e/*5 |9 s/ ~5 m4 Q
*  ======== Miscellaneous Configuration ========  [% x. }$ f! C6 j# c1 D/ [
*/
8 @5 u) A' c+ ?& Y+ I* M/ z6 j1 Z3 n9 L' {7 [) U, k1 b& D  a
/* set default diags mask */1 f* g- z/ a5 e) E
var Diags = xdc.useModule('xdc.runtime.Diags');+ Y& B, p3 f4 ]
var Defaults = xdc.useModule('xdc.runtime.Defaults');4 K  S/ n& {; @( K
1 o- t7 A7 N3 y) _7 P5 k/ S2 a
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
( `% R+ C: [- O5 @, o  PDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
' m5 |+ G1 F0 M" i8 f8 {Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;4 m8 p- h1 K2 i, r- D
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
# R" N. X& }) Q5 K! v. C6 nDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
; m0 _* Z  ~; }# v0 [6 n& WDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
% e$ r# N( n' N5 oDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;% s% D  a8 U$ _- g) O1 E- Z* ?6 m
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;+ t9 z+ @' I" s* b$ N; f! H
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( n- X- w' I, H- U, C% A( N
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: m1 U* m; ^  H5 {Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
% a! _  l, [6 ~% X' z; eDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;# m. q2 K2 F( |
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
6 m$ B% V; j8 [; s! M+ eDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;! k" z$ s, w& e+ x: [
2 A6 u" r; b- Y, R* O! X, Z6 C
/* override diags mask for selected modules */
) x# l, ?* ~! m1 m6 j+ Z) e' wxdc.useModule('xdc.runtime.Main');
  ?4 `) J; e7 z* ?Diags.setMaskMeta(4 r+ }; u, `+ a
    "xdc.runtime.Main",
. G! o6 M8 j. `  F5 \2 O    Diags.ENTRY | Diags.EXIT | Diags.INFO,
/ M, J3 E) r& J# ~/ Z2 B* W    Diags.RUNTIME_ON
! d; u, _% }  p7 M) ^: [);+ ]+ o/ f9 k; A$ _0 e
* T' ]1 y8 }4 O% i" ^
var Registry = xdc.useModule('xdc.runtime.Registry');* X% a9 e' |# U% {4 G/ H  J4 A! V& l1 Q
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
8 M9 G- H) X* t- pRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;" `6 j5 F9 n8 |- t& ]4 ]( e4 M2 v3 ^7 k
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;; ?  ]2 ^* f* W3 G+ n% }$ n
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
/ X% x4 z1 q2 ^( J& w4 G% I  J3 Q
/* create a logger instance */
; ]6 m; e( D3 J" Bvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
  c7 P+ ^; G% v; y% x1 K, @( svar loggerBufP = new LoggerBuf.Params();) Z* A4 ^) _! S1 X$ [& C+ i- \
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */) }' V# s" S9 J* M( [1 ~
loggerBufP.bufType = LoggerBuf.BufType_FIXED;- y+ b4 T8 A! K* }  T
* }9 I. i6 N" j- ?- Y5 a
var appLogger = LoggerBuf.create(loggerBufP);5 ?7 y" I' T+ L! m9 M
appLogger.instance.name = "AppLog_Core1";
2 A, s; e# `. j- F* pDefaults.common$.logger = appLogger;
$ `/ I7 S. b5 m. [) W; }Memory.defaultHeapSize = 0x8192;   
7 V; o9 b/ }7 m2 E1 E4 N4 SIdle.idleFxns[0] = "&LEDStatus";
6 g6 ^1 e2 N, E) |Cache.initSize.l2Size = Cache.L2Size_32K;
5 g) x5 W+ k* ~3 X7 M- l) ?0 d0 g& \1 a0 K8 l3 v/ y% [1 I% E0 ^
回复 支持 反对

使用道具 举报

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 */" b& c; c  Q' j! H  k
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% Y1 a& o5 I4 a' `% pvar heapMemParams = new HeapMem.Params();7 [! \! S( M9 O4 u3 Q4 K* S! b- o
heapMemParams.size = 0x4000;2 |# E9 d3 c5 T5 w0 E+ J0 ]8 e

! H! Y  n6 {  N; Ovar Memory = xdc.useModule('xdc.runtime.Memory');( h/ k0 ?' }+ A+ m" L7 w
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);, F* ~# q( _+ x# F* l
& d4 w' l$ _! Y2 u
我大约calloc  每次共计大小为5K*16bits,4 c' q; U! P: Y6 T# h& A
而默认配置才0x4000、需要改大。
' F/ m! R- A: p7 y" d6 b6 w& Q1 N
3 Q' K* V$ h: ]+ C: X3 M+ l
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */, S( O8 N) K0 W5 p7 ~5 r5 }
Program.heap = 0;
: U( e3 b7 a' E3 W% ^Program.argSize = 100;  /* minimum size */
+ t, S* |1 |( @2 A: n9 X* n6 J% vProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-13 00:37 , Processed in 0.042271 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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