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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构6 u1 h5 _+ j. K, T$ B
8 ]7 K* y6 X0 _. [/ x9 R
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2564 p  B  [2 D. R" A1 E6 v. L' l$ ]

5 p) T. U8 ]1 {$ t0 A' q+ A其他程序段。。。。。
' X  G( O: o2 F
0 v# z/ Y8 J. x   free(x_d);
( ^; W0 Z# f! ]  O! B5 a
( r7 [' G, O/ i# A) e8 L) h$ L$ v& B使用DSP侧单独调试功能,验证动态申请没有问题,
$ [& a$ k! U3 d! e) p( K
# y0 z9 b0 K- x1 T/ A但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
1 J4 x- M" f1 L
+ a- J+ Z* n$ ~8 J, j# p2 h0 @
: Q" x* L% B/ v- @% b( S5 G; E

( Q( }* B1 u- f+ }% f5 [% j. {  a  ~$ Y7 O8 r1 B: D( Y) ?

, X5 ?# X# E5 V/ [7 g% I2 s7 W, ~, ^1 o. S- D/ q

" u; w. U, T' {% |$ o7 y1 ?9 W( p

) x8 [/ |* Q: D8 s  X( b! i7 J$ @3 j, N9 M0 f+ r3 \6 c1 _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
& Y, _& S& q0 b' E我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下3 r% K. T3 z; f3 o6 F
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)3 g1 w3 w  V- D  b' Y# a

5 L! ]; w/ @& t# p9 Z* h. Q9 g' q是不是需要在DSP.CFG中进行配置
  M. V% g+ ^6 r! j- R, M我现在的配置为9 d& j$ m0 U0 q. P/ t4 g

+ j, H4 Y7 s& z- N' K$ D6 N/*
; F# e. i" e: @# y/ V% t *  ======== Operating System Configuration ========
. g) _5 V/ t) U */# {' |" I, Z- Y6 Z
9 ~1 U. D8 Q; v
/* no rts heap */2 K  ?* P1 T0 v& t
Program.heap = 0;# ]/ v9 _. B( d8 i2 ^" n6 s: c
Program.argSize = 100;  /* minimum size */2 i4 @, F5 j/ s4 |2 I5 B, k* s
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
; c2 U( ^- N" X4 r3 [$ A& ~# Q4 L8 L
/* create a default heap */
/ e9 Z1 K# j% C% b# rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 j  A- k' B% a/ }, ^/ ]' xvar heapMemParams = new HeapMem.Params();
2 k1 |0 r4 l1 x% Z0 NheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
7 o) c- b) y! n9 W
& q8 z: f, C6 R" \; @" G% R
var Memory = xdc.useModule('xdc.runtime.Memory');7 C3 J  D: j9 ?+ }5 I; v; B
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  [' `) v' c' v7 P' R! B, U
& z' x. ^( x' i) X% ]: h) Z
/* configure System module */
. A; M+ c; f; d  }, `9 ^var SysMin = xdc.useModule('xdc.runtime.SysMin');
7 q& ]2 r. D5 m: K$ b+ x  c: tSysMin.bufSize = 0x1000;
" H% C! g8 m2 [! CSysMin.flushAtExit = false;& C1 P+ d$ s. y, ?4 }$ g
  h. B3 k( }1 c( B! E5 P' L
var System = xdc.useModule('xdc.runtime.System');7 |) A7 E) X" f! y* \
System.SupportProxy = SysMin;" ^% B# w$ I8 [  g

8 e/ `- T# J9 w& i; T, u4 |/* configure SysBios to use the lower half of Timer 1 */" v/ ~5 R4 t* Z* q/ n/ M% i
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');5 p. S+ G+ N8 Q3 v9 _/ C
var Clock = xdc.useModule('ti.sysbios.knl.Clock');; f) L4 T# M8 b; C$ {. j. s
Timer.timerSettings[1].master = true;, F! {' \, C! ?) Q! W5 y  R) V
Timer.defaultHalf = Timer.Half_LOWER;9 L! P- j0 H, i( `9 `
Clock.timerId = 1;# E& r! M* i8 e7 y5 q
6 O+ e# n- S3 q0 x4 G

9 H% [$ t+ P! _9 U/*2 _5 f/ l0 u/ H/ R
*  ======== Miscellaneous Configuration ========
9 h; L1 P) Y) d& ^! T */
6 C6 _! `' }( o$ I) N0 j" W: p" S. p- z. Q$ }" N- Z- S
/* set default diags mask */
! e4 l3 H) s9 t/ Evar Diags = xdc.useModule('xdc.runtime.Diags');3 N) p  P; H0 d: T4 C
var Defaults = xdc.useModule('xdc.runtime.Defaults');
  E8 |7 W# ?& b' J8 G# i, W( ?5 T% c1 k& m  L, m8 r5 M
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;  R! }# f) s1 q0 J6 n( g8 }( H
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 |' L7 P' v) E' l2 x- {8 ~Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  j- r1 ?6 t) p: i+ w7 a4 s$ MDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
7 z9 H- t; \7 X3 W; RDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
" P- u4 G/ Q; q, ^7 yDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
+ ]) a% }) f5 C7 `1 a- {Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;9 o4 u5 o2 Y9 i7 I/ e
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;3 ]; e) P. ?7 J  E( R9 d: P& U/ ~
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
0 L- \* M5 p9 SDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
( a6 Q5 [9 S2 b5 ~, D; O2 V7 yDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;2 a0 F& r3 z7 D
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;0 ^& A$ n/ O8 H, X/ \
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;2 x: h8 ?& T8 f0 q. e
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
) @. B: |% {' h" S: q
% ^6 L! l8 J" o7 S# O/* override diags mask for selected modules */
. q2 _! A/ M6 pxdc.useModule('xdc.runtime.Main');
4 Y. _1 \" U7 ?3 @! L1 TDiags.setMaskMeta(. x8 }6 x: T) ^) z% W2 ^
    "xdc.runtime.Main",
" a. c8 d/ N: A8 W1 [! ^# S    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" E' R5 `* I1 Z' p4 }0 @0 o! q    Diags.RUNTIME_ON1 G& y  D* N1 d+ o) {8 W2 i2 A2 N
);& t, u/ w0 y/ o% c4 r

) `4 `8 N& M9 ^7 P7 l6 ivar Registry = xdc.useModule('xdc.runtime.Registry');
: t+ J0 Z6 F4 s3 ]" a" MRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;2 I& R/ D" L4 {8 Y& V
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;1 I1 f# ^. l$ t" @2 O5 |+ R
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;" k: n$ ?( ~4 z5 U# P
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;; w, O/ g% i9 W/ N# i

" u4 `- B5 h; o: h/* create a logger instance */0 |7 L$ D0 `/ _- C
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');- Y: O: v6 F. P' t
var loggerBufP = new LoggerBuf.Params();+ e6 b# ^/ ?' g0 D0 j" m; u( I
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
# o2 w$ [5 U0 L1 F, T  X- NloggerBufP.bufType = LoggerBuf.BufType_FIXED;
  r8 C; P: q7 u- k
) l" F1 s. T2 Y' Ivar appLogger = LoggerBuf.create(loggerBufP);
: i! T8 F4 e' ]- OappLogger.instance.name = "AppLog_Core1";" a  ^4 R+ x3 h" _& _: h
Defaults.common$.logger = appLogger;
: t# @6 q; m2 S1 g# @* Z$ iMemory.defaultHeapSize = 0x8192;    - P' f% B1 ?7 p: C2 }9 ]! G. c! l
Idle.idleFxns[0] = "&LEDStatus";" D4 _( k: H5 C9 e2 h; x9 ?
Cache.initSize.l2Size = Cache.L2Size_32K;
# l, a3 s0 C2 g( X7 v  B% U. q" O4 Y6 Z  J" [
回复 支持 反对

使用道具 举报

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 U9 D+ B" m4 l- [! b5 Y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) w- w; Q% S4 c3 D$ S% @0 @( L: u
var heapMemParams = new HeapMem.Params();
+ }! w) ~0 N+ rheapMemParams.size = 0x4000;
6 [  f* U0 A% m' C3 k; S& l, `' m- e. `' \7 h6 p9 V
var Memory = xdc.useModule('xdc.runtime.Memory');7 g9 w. n) }- ?5 v$ Z! m0 k
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' {+ @  P* n0 z: b0 }! K( H, _

( f2 i- h8 C% j) n8 H, [2 C% F4 e我大约calloc  每次共计大小为5K*16bits,
3 N# ?# x# j. Y6 o0 x  \7 U# s而默认配置才0x4000、需要改大。9 P1 z1 G/ Z( Z: I6 y" @

% c& G" ?* A4 l7 H& y
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */8 m; k, m2 i) y0 P4 m% }) l3 x
Program.heap = 0;- `0 b2 I* F* K3 e
Program.argSize = 100;  /* minimum size */5 ^& \' E, T6 f4 f; G
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-10 14:55 , Processed in 0.040487 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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