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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
2 n0 K: Y2 B/ {0 A2 j5 ^, ~
# S& _4 X/ q0 \5 z2 j! M8 @    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256+ I* W" Q' Y3 m+ Z
6 ^) e) z& y1 H/ r( W
其他程序段。。。。。
: s% F# H- @, A- I6 ~
* Y/ k& @  @8 ?0 s4 ?( P' s* [   free(x_d);
' ^; t, O; U0 X; z+ N$ v2 _' y# g1 j7 t% ?( `
使用DSP侧单独调试功能,验证动态申请没有问题,
. L; l: o& O! O3 Z
  C+ }4 `# |* \! l: X& l0 K但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
0 w& `! G2 w3 B0 r
  ?8 `  d+ m! {7 t! |( ^$ g9 g) w

+ A% x) S( i+ O6 [! `( r- f7 O+ U; H
8 ~) b* G) b1 n& Y" X9 A/ k! L0 p
1 K0 K. ~+ G2 i
1 F3 W* S. q3 z% P' t2 g
3 r( J; @: K. O1 y8 ~& }% @

7 X. @  {, r0 ]: z' O9 [+ g6 Z0 X+ Y0 F4 i* q/ x3 a8 d

5 k7 O. W( K! Y# _' z- l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
! D" [, P( q' ?& X  i我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
0 S5 K, E# K+ M) v, m' A7 d( H  a9 Y* e(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 R/ g/ ?- c4 B9 J  j. s
. F. c, j+ s( @1 w8 A5 ?, {  ~
是不是需要在DSP.CFG中进行配置" O' f/ K0 o. P3 \# I
我现在的配置为
3 {7 q5 G$ Y) T+ g# @
+ ^. O$ y: `' T6 U" u+ t1 U" }/*
& J9 o3 A7 F4 S9 I* v *  ======== Operating System Configuration ========
/ ?% o* D$ {" @ */1 O! S  y* c3 f$ `) I9 ]1 A
+ }0 K2 `7 R/ ~( K5 F
/* no rts heap */  `; X  b. K, Y( W& y" V. i7 O
Program.heap = 0;
  F- J6 W4 E; a' Q% u! P( ?Program.argSize = 100;  /* minimum size */
" x5 d; @' z" D$ o8 a  |. B$ |; V4 E9 E) NProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
) K3 U- Q  ?$ N/ u, @8 M8 D/ V
  r- G6 x: R% Y3 @$ I7 `/ X/* create a default heap */
0 }) [" S' S; [, [6 D5 ?+ v* |var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ f0 o# _' Q7 W* _0 x- @/ Q3 Rvar heapMemParams = new HeapMem.Params();5 I1 g% {% m% S8 m5 }- ]& I
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大1 R; c7 s6 ?" M, x& l
$ r7 q7 P5 k" j" F2 h6 Q8 W
var Memory = xdc.useModule('xdc.runtime.Memory');% W0 J) D& s. N- n* v& ^
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& c2 P! p% K3 f5 [; q$ y
4 t" S9 c! ~$ p3 @
/* configure System module */: Q1 U+ x8 e+ {1 d
var SysMin = xdc.useModule('xdc.runtime.SysMin');. `( m" U+ \* T- W
SysMin.bufSize = 0x1000;% A" I# f# `" j' y/ r2 n3 t
SysMin.flushAtExit = false;
- j! N( n$ h; E5 ~6 m0 p! I; N$ r9 g) t, m& s, |/ `( e+ U% D) z$ t
var System = xdc.useModule('xdc.runtime.System');
* ?. W3 e" W) y( pSystem.SupportProxy = SysMin;
+ {% k; M# W" ]* Q+ P5 X
5 I& c' D0 y, B4 S/ W) ]6 e/* configure SysBios to use the lower half of Timer 1 */
# h: ?8 t' g3 y; n7 f8 \6 Ovar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');* b3 J7 b4 I, h0 Y& y
var Clock = xdc.useModule('ti.sysbios.knl.Clock');6 R5 _9 t- N" v3 O3 L
Timer.timerSettings[1].master = true;6 u9 Q4 M* N  ]1 v
Timer.defaultHalf = Timer.Half_LOWER;& q  n2 e7 b+ L- G) b
Clock.timerId = 1;" J- ^" i9 }) t+ x7 K( f

$ \, l# T6 V+ L; v' v3 ^5 h
' t& w/ O# O1 s$ a  ?  k/*( w7 h+ h6 \6 q. E" i
*  ======== Miscellaneous Configuration ========
8 [! b. W( e; L  R */
5 k3 p9 I5 h  H5 ^: Y
. f' h! K0 t1 a0 A; l, |* {/ a/* set default diags mask */. Y& \) G" M* W( q4 ?- ]2 }5 K
var Diags = xdc.useModule('xdc.runtime.Diags');0 o6 q1 S( O5 B* y
var Defaults = xdc.useModule('xdc.runtime.Defaults');5 j6 S' _; r- W4 M/ d% X+ V  K

! C: b8 t6 z  @  p2 B& h7 s; {4 a0 eDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
8 r- z8 b- i) ~Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;, J. T0 }6 ]7 A5 t
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;; y- @2 `6 z) k9 T# S/ K
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
: b' I  I( Z, m9 g, |Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
/ b! s# u& _- eDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;9 @; _  A* _& Y
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
1 w% Z4 d6 U; S* c+ ZDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
% ~& W7 t0 q* T4 {$ \: YDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
' a9 N! n2 }3 l; `  t; wDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
% E7 r9 v* R9 b9 l3 QDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
6 P2 O9 Y' \( q* ^Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
$ {/ v4 F1 r5 b; v" K/ h# F/ vDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;) c) c' @0 v6 _5 l- {2 e
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;( [: o/ B% h& w' p8 e: h

0 N0 k" y& i. K/ ^1 d0 I. d+ z/* override diags mask for selected modules */
! D5 {8 m* e' o7 O/ ?/ zxdc.useModule('xdc.runtime.Main');
  e$ V, ]! C$ dDiags.setMaskMeta(
# m% x, P) Z5 L: V    "xdc.runtime.Main",3 z* F' _; S  V/ i4 m- h9 T# y( D
    Diags.ENTRY | Diags.EXIT | Diags.INFO,. C2 G% o: H1 b
    Diags.RUNTIME_ON
, a/ v+ I7 [- o);; a( b3 j+ U9 I% ?, t7 F" ~
5 T) M9 V7 X, z8 i1 K0 U2 |
var Registry = xdc.useModule('xdc.runtime.Registry');$ Z5 m- ], G5 w' T: G3 L
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
6 K" I1 ^2 ]# v6 LRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
1 }3 n8 a0 p' {0 \: e! d% JRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
6 n3 O# V( ]. `; b) n8 tRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;, W7 K) L0 J1 b( E) t" k

: P5 V- B3 q8 P" P1 M) |/* create a logger instance */
. B6 [# e  ]# yvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
0 F7 E) ~$ |8 \9 k. P  `1 Kvar loggerBufP = new LoggerBuf.Params();) {: x/ r  {1 r9 R& I6 _' t) m
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
) h; W5 D7 ^& {) T+ q; r$ B8 sloggerBufP.bufType = LoggerBuf.BufType_FIXED;( ^  W9 e1 u8 i: l4 B$ T

2 p. a, |# m: Z: o, R; e, Fvar appLogger = LoggerBuf.create(loggerBufP);
2 k/ ]- ?, @- X" g2 c- ?4 d, mappLogger.instance.name = "AppLog_Core1";2 G6 q( q8 z# K+ U9 n. ?( n
Defaults.common$.logger = appLogger;
$ v/ {0 D# o3 z, PMemory.defaultHeapSize = 0x8192;    ) D( H3 x# F- @; M1 M
Idle.idleFxns[0] = "&LEDStatus";# `3 M2 \4 Z5 ]8 _
Cache.initSize.l2Size = Cache.L2Size_32K;
: R" F9 B) C8 z6 ~0 |! ]( X4 e) e, N; Z+ Q  y7 S' Y
回复 支持 反对

使用道具 举报

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 */2 T' P6 v6 O( ]! a: w
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* ?' L' t. b" w. l% ?
var heapMemParams = new HeapMem.Params();- k3 D, \9 T& }: e  |  I  I
heapMemParams.size = 0x4000;
: y- [! Y; n( s& V0 P! i! r, E+ i: ~- j; h7 l
var Memory = xdc.useModule('xdc.runtime.Memory');+ r- O. j9 {; P) L! o% Q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" h2 k6 R+ J) ^7 {% s, ?
5 {; n9 t9 }0 Z# u
我大约calloc  每次共计大小为5K*16bits,
, o# ~" G) c3 k3 u* j0 ~! G而默认配置才0x4000、需要改大。7 R+ X0 q* i' S- E  K9 q

9 o  w& z8 J  P5 b! ]3 H
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */. N1 {3 w2 I2 P% [* T; {" R
Program.heap = 0;- ?  r$ K9 C3 S" P# W
Program.argSize = 100;  /* minimum size */
. |, ~9 z- F2 g- j1 tProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-2 01:28 , Processed in 0.041275 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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