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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

/ \9 j) ~* y, v6 G* d! _    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
8 C4 [% c2 B: a0 z$ a* o
" i* I2 A  J0 m0 t其他程序段。。。。。
! J, g+ _& H6 ~
# R# z/ {4 [' h( I+ c   free(x_d);2 ^3 M+ R$ T/ W

& u; r  m$ r5 ~使用DSP侧单独调试功能,验证动态申请没有问题,3 U) W5 I: L/ U' d6 U2 g- {

; e5 \& a! {5 P+ P' D0 V* ?! ?但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
* |3 z& O1 N( y$ [( w) _

9 l+ k; o2 T0 x6 q& L8 T6 W4 p. J
) {6 h  u) E3 M
+ i) X% N+ `+ r; t
, p- o# i  _9 R; D4 R% ?- k6 f# A: r1 a7 H  V
6 f2 ]9 i+ [6 o: Z3 U& h
; C% C8 C4 f# ~# }8 h- A2 l+ z
. o' f( S* H# Z; f, s- W% \

  N# l  P9 |# T) \
- T: g1 q7 d) g' p5 U7 |; A- g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明. U0 s9 ~# f2 [  o$ K
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
. j& I# z1 B0 p(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 R2 e0 H1 R+ C! P) y+ @! f
5 D/ v/ f, d9 w. t/ n
是不是需要在DSP.CFG中进行配置7 I' _9 u9 t! z- B6 P+ }  u; Y7 K
我现在的配置为: N; C3 a9 _+ w
- w% E3 K# h# O! Q1 u' Y5 A
/*
3 p+ {+ k' H7 T" U *  ======== Operating System Configuration ========7 e/ G$ ?5 y: U3 s
*/
6 O5 a1 G1 C# U: @' D+ M, k( ^% k; r( N' j" Y" X% F7 n4 X
/* no rts heap */
4 S  g+ F% ^8 LProgram.heap = 0;
6 I# o# g6 S7 p) N6 [Program.argSize = 100;  /* minimum size */
) K6 e$ p/ F1 [% hProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大( }7 ~5 s, c& j1 U7 w- T  ~

( y2 U( @0 i; ^/* create a default heap */0 C( f9 g' X# c4 V5 ^! W7 q$ |# w
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ d* o% u; P& Q+ w5 y* U0 x/ L/ |8 {5 xvar heapMemParams = new HeapMem.Params();) ?7 A; ]* Z* B4 t7 Y2 t
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大/ g- n+ R: c. @1 s' i

2 ~7 c5 Q& `) V: n+ {
var Memory = xdc.useModule('xdc.runtime.Memory');( J$ o. z0 @& V, _
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* V" y  z# |' ~
& ]. [& H* V2 O/ B* Q, y* q/* configure System module */
8 g; y* |, E: Y- M# fvar SysMin = xdc.useModule('xdc.runtime.SysMin');: q3 C6 W" u, ]1 x( l; O
SysMin.bufSize = 0x1000;+ |+ k# I& I( u& V: C7 A& a
SysMin.flushAtExit = false;
" m' v4 v8 _& `8 q2 C
8 P* K8 r. c9 F' V# rvar System = xdc.useModule('xdc.runtime.System');1 |$ W# ]' n( _0 |" Y" E
System.SupportProxy = SysMin;
' }8 _6 B, ]& k! n1 |, u5 B: m# I) C. a1 B2 _9 J! E) [+ A
/* configure SysBios to use the lower half of Timer 1 */' ?2 O  n; z1 G1 z0 {$ i' r; D
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
0 k5 s2 [0 `0 t0 T, v/ }4 k4 E; Y& D0 hvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
8 A& G1 J6 |: P- ?$ h) p6 `. mTimer.timerSettings[1].master = true;
4 i/ J/ B+ ^. c, Q' }+ N1 QTimer.defaultHalf = Timer.Half_LOWER;( u7 k2 x: i% Z0 H; W% c" w2 j1 q$ R5 v
Clock.timerId = 1;
0 J: g' S/ R" H5 b: {! K- ^" V, G$ ~7 o* Y! z) h

* T* s5 _, \2 l9 q$ {0 W( Y  F/*
% m# w$ F5 _' r  W *  ======== Miscellaneous Configuration ========2 Z3 {3 V9 A8 f
*/
* g5 p, ]1 }" j( ]3 d$ \5 a, J. X' w. ]3 U2 b' Q# u
/* set default diags mask */
& f& m3 j9 z% e/ {: B4 cvar Diags = xdc.useModule('xdc.runtime.Diags');
# h% Q6 ]# J( n! Kvar Defaults = xdc.useModule('xdc.runtime.Defaults');! u/ o7 l$ T$ R0 q

- t% w# W/ Q# {; h' U/ u8 s7 ADefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;; `) ~9 ?% _/ }9 l
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;0 S5 o5 F) @8 ~6 ^% i
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
$ e4 |& i4 f: TDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */9 Q" N, R% d* _7 V, l- Z- `; b7 E8 I
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */2 u2 m' ?( n. ~, ^1 H' y  m+ b
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;# _% s  _) R( S# E
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;% X$ m+ F- {% ]2 o  W+ H! P
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- W: b- l& l2 _
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
- y) Q( d: A) \4 \4 qDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;* D) x; x, w6 X% @
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;" J9 k/ K7 L. \1 m
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;: W2 E% D- N2 n6 R# R
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
/ w( y- X5 P* X7 ~$ }: D* XDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
5 p( C: H' J- q  v7 R5 r; N" ?) Q' e8 o# B, A7 g6 }
/* override diags mask for selected modules */) i6 O8 Q2 T% P  m
xdc.useModule('xdc.runtime.Main');! ^. U8 k; C& y* L0 z4 l
Diags.setMaskMeta(
- I  e% |6 [, d- u0 a0 s5 g    "xdc.runtime.Main",* ^  B! r: ]8 X( Z. w% M6 Q0 l
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
- J7 J. c+ z8 w+ Z% g! {# {  J    Diags.RUNTIME_ON
! S# W0 [5 C; B6 h+ r3 F% a+ y);2 q( w  K! G( _- ~

+ |- C9 }: d0 V. y8 rvar Registry = xdc.useModule('xdc.runtime.Registry');
6 ~/ _4 C% i* j- C( JRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;7 x' B; F8 e8 z# y
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
9 E2 p4 k0 h  C( W- S# t7 [! zRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;% h& C* _3 k6 g: i$ t6 E) g
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;' V3 N4 r, r- z5 F: J' t& H" \
8 H% S1 v- P' ]7 W
/* create a logger instance */. u7 E% \' z8 F' r. f% _
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
$ P- [6 K9 t( n8 b3 B' y9 [& `var loggerBufP = new LoggerBuf.Params();
# c- H! o+ |; h* VloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */4 q% O: ^/ ~" O& J, l" G$ A
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
( Z5 v4 g! k% R: L/ v5 [- F
' S; o' H* G- z0 T( avar appLogger = LoggerBuf.create(loggerBufP);/ d0 v; e: R; o  x& ?$ ^+ `
appLogger.instance.name = "AppLog_Core1";
) P7 d$ j  C1 i  F, e* ^6 q& v- T$ X/ xDefaults.common$.logger = appLogger;
. B" u* Z- A; P! P# vMemory.defaultHeapSize = 0x8192;    : |0 v: N" {. C6 d4 i
Idle.idleFxns[0] = "&LEDStatus";/ w* a; Y. j0 g3 S
Cache.initSize.l2Size = Cache.L2Size_32K;0 m* c5 K9 w# w. _5 E9 r0 n# M

7 x, O9 {% R5 M4 l  k5 k9 {
回复 支持 反对

使用道具 举报

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 */
1 _1 t7 v: R) c' V& ]1 ?var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. d& {. ?* a$ W4 W- S
var heapMemParams = new HeapMem.Params();
/ ~9 Y  Y! |7 k5 C/ v: D1 oheapMemParams.size = 0x4000;$ q$ A$ f: \, v5 H

2 t/ H* \. b6 x7 ~7 }var Memory = xdc.useModule('xdc.runtime.Memory');
8 ?" h4 B' W; n. v( C7 FMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
* @% f" c8 P/ u5 \1 C3 l  _5 T
我大约calloc  每次共计大小为5K*16bits,' [, W- r% j& E* Z0 b( w2 h
而默认配置才0x4000、需要改大。
/ O9 }( m% `/ I( |+ V8 s$ l  [+ h5 s$ g& n2 ]
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */6 S* k1 n/ I$ ?" x7 h) _- ~
Program.heap = 0;2 }% v" \9 J" f7 K& y. q( \! b- ~
Program.argSize = 100;  /* minimum size */1 M) H7 H2 J! Y( T( l- Q
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-4 19:53 , Processed in 0.043145 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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