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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ y1 ^9 d/ T: H3 U, H; q
/ }; m& o/ }3 L2 G& T# T" M    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2562 h- {. g. H7 o, n5 x
) i, d; f. l7 C; f, k+ b: b* [" M0 c* G
其他程序段。。。。。) c5 r6 c& W% Q  j7 W8 Q+ d/ G
& P* `6 X$ D4 I( x, p$ F# [7 ]5 e: i
   free(x_d);* Q/ d5 e5 ]; k/ S' r% w* k

- l, b; \. x( I) P7 A3 S# m使用DSP侧单独调试功能,验证动态申请没有问题,5 G- d) {5 @6 |/ ^; n# g
6 W( M# {$ K  c6 n7 j4 b
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。, P# W+ D& r3 |7 z/ x
  n. t# }5 V$ X7 M7 x! l" k

# F. }% X2 n3 y1 R( Q
- S) L- ^, R1 I, }) n. ^  R( x% t/ r

7 c# }+ B2 Q5 {
7 p/ U" e% Q$ Z4 _6 v- o* ?5 r

6 M6 ]$ \6 V& Z- u/ N: W0 m" F- k( E/ x; i  p( ^; e4 K

) a. E8 u! X& P& c! T# b: @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
# p" S9 l% f3 B: {( Y; aProgram.heap = 0;! H5 h4 R% @; i) M9 s3 @2 x
Program.argSize = 100;  /* minimum size */
, S; W3 s9 G5 ]Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
) m& v6 }9 `" T! Ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 t% C( v( @4 ~
var heapMemParams = new HeapMem.Params();
1 \  ?5 X2 ]4 D2 ?% R0 YheapMemParams.size = 0x4000;
; C( u- h0 }' _. k. Z1 h* O" z/ N( @6 G* b! e# L
var Memory = xdc.useModule('xdc.runtime.Memory');. f0 X7 w$ Y% Z7 g* o$ }0 T+ g( \
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
; p1 E5 d# _4 k  K* u* d1 n# ]' Y
9 |6 ]" m. n% w( W我大约calloc  每次共计大小为5K*16bits,
+ {1 Q7 [! {3 _) n( E而默认配置才0x4000、需要改大。. ^0 M2 p3 J* X9 w, X4 B! R

7 Q6 u$ W" n" @" |) b1 j- P3 z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
! ~: [# Z2 o# o. w7 l3 g我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
, _) u5 p- N8 F, ?( l; S(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
' |, }) }* i) r! q! E+ Q
7 n' X+ R. ~% S$ A8 V# i3 X+ V. H5 n
是不是需要在DSP.CFG中进行配置
! h' ]9 u$ d$ n9 E% l9 H3 v9 W我现在的配置为
& G" \3 {. z0 q% x5 i4 S6 J+ G/ V( ]7 X, u" t' `
/*0 |; G5 i3 r* Y) `+ _
*  ======== Operating System Configuration ========
1 G% h' M3 a3 x- @' h) | */
3 I3 x+ C. {9 v% R1 _* H6 n* J8 r8 s* ~! d4 m  f) b! ~
/* no rts heap */
* }! N9 w8 O" T3 R" PProgram.heap = 0;
3 ?  r. |# q4 mProgram.argSize = 100;  /* minimum size */2 g9 G7 [2 t; m* I
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
! Y2 o4 M7 X/ A# m# z" |6 @' O
$ L) W/ }1 r5 `/* create a default heap */
3 v6 }" d/ e7 G* I1 O* S9 cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  `+ O7 i1 k- \! c, Y3 h+ A
var heapMemParams = new HeapMem.Params();
7 x, o# j, J( sheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大3 P3 z, D' l2 b3 t- n# y6 T

$ K7 G5 q/ }1 g4 s) s+ I& Y( V6 [7 E
var Memory = xdc.useModule('xdc.runtime.Memory');) p: N# ^7 v7 z6 [; |4 E7 @
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 [! p  L8 {( {
! Z; A7 k( e9 H6 C9 h4 e$ a' y/* configure System module */, B+ [* C* S* q
var SysMin = xdc.useModule('xdc.runtime.SysMin');
3 p9 v/ x7 G  j1 w, gSysMin.bufSize = 0x1000;
) m( K+ D6 F3 ?5 Y! \  {6 Z: pSysMin.flushAtExit = false;0 I! A& E: V/ W7 k6 m- ]0 w4 Y3 S8 v

+ I5 e. q: Y# s# E# R  K* W7 rvar System = xdc.useModule('xdc.runtime.System');
% L1 r/ V7 g, L3 M' zSystem.SupportProxy = SysMin;
* r  B- u, |: A  k6 h4 D. }
4 f. a7 g  r. ^/* configure SysBios to use the lower half of Timer 1 */4 T1 t& b8 u2 Y5 L6 |
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
* O4 ^# n5 g  a9 g& ]var Clock = xdc.useModule('ti.sysbios.knl.Clock');3 k* v& X5 t" t+ e! c
Timer.timerSettings[1].master = true;- M* t, c2 {8 v1 ]. ~+ @
Timer.defaultHalf = Timer.Half_LOWER;
( ]" r# w3 a  T) R/ VClock.timerId = 1;
2 u' n, ]/ j' _! b+ O) q8 I' H( \/ A# f( k4 D8 c

( ?/ J, N8 m3 f) L2 k! s/ U/*. @/ c$ V4 ]! H: K: Q  n
*  ======== Miscellaneous Configuration ========4 f6 F& S. u1 z/ u7 N$ w
*/" E1 v  T# m: U; W$ d5 z6 ^$ D2 c& V  w

1 k* W9 P" V, L3 R3 |/* set default diags mask */
% F* L6 Z1 `% C4 ?% ]1 z1 zvar Diags = xdc.useModule('xdc.runtime.Diags');" K: n$ K% _: Q
var Defaults = xdc.useModule('xdc.runtime.Defaults');
% D. C5 c& v7 B9 z. N' g
  V# i" q3 ?( o% o9 L: z6 ?Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
$ D( n! r' z& [2 J$ c1 n/ I) CDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;/ Z  |% ]* ^2 P4 s; H. Z
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
1 R9 U# P' Q  u7 L  m5 {- ^Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */# Q3 n$ q3 @; ~( B* j
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */$ h& z0 y! ?5 ^
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;( y. p; Q- K6 A  u% X; ^& \* O
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
6 A! C! \9 [. n/ U; C/ p: B! rDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;) M( ]+ l; l3 }  A) {# g  Z% \5 X3 a
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;2 T" U4 z/ z% o9 J& ]3 d2 p+ U: M
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;9 x7 M! k9 l7 m. i
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
; c6 `8 h8 T6 o- _; \" [0 U0 B& F9 cDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
. y" [& @7 z# X2 ~1 W! D7 rDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
6 {, J  l+ o+ T( b3 x3 z9 FDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
" Z# J# M+ {, f2 Z& p9 o
( G% \; L+ ]) l8 y" o% d7 J( I9 s/* override diags mask for selected modules */. C5 o9 o! p, g+ E- l3 K) B' X9 I; q) l
xdc.useModule('xdc.runtime.Main');
" u9 E  d7 |5 e( S4 b5 w$ o" UDiags.setMaskMeta(' \& R* t+ e8 `/ z+ F* n' h5 V
    "xdc.runtime.Main",
$ j7 h. ^) h" C0 N. t  l    Diags.ENTRY | Diags.EXIT | Diags.INFO,
5 H6 U) _1 @* j" O' J* E! c. J7 w+ n    Diags.RUNTIME_ON
1 q/ R! k2 Y8 k7 v);
( Q; i  K' \' c/ g$ ^
+ H7 H5 r' u) r8 |9 lvar Registry = xdc.useModule('xdc.runtime.Registry');5 x& U  r* h( c8 i" [/ \
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;/ Q# V- ^: o' p* L
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;) [/ ?6 i9 T, x2 x6 E8 o( y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;6 z: Y% ?- Z1 c
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
* c8 E5 X: ^" c9 T3 y, V  N' m9 D# Y. T' w* v2 t5 Y8 g& w, o+ n% R
/* create a logger instance */
, d' {( _  j9 X1 V; Mvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
1 [( S1 d8 M: u0 E/ Jvar loggerBufP = new LoggerBuf.Params();
: p% D3 `1 x4 x% u$ [. t' S) ~loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
- e  h9 y( ~+ L: _5 floggerBufP.bufType = LoggerBuf.BufType_FIXED;1 P* O8 j/ m9 ]" R* f; w

' q+ C" M9 W  e5 {8 {% @var appLogger = LoggerBuf.create(loggerBufP);
0 |( {* b/ `/ d& KappLogger.instance.name = "AppLog_Core1";
5 B' f9 p+ e) I5 u( \Defaults.common$.logger = appLogger;5 ^" z- {+ a' V* g% Y# O5 U. `" e& @
Memory.defaultHeapSize = 0x8192;    , v- @* Y) {+ F% M$ C! n
Idle.idleFxns[0] = "&LEDStatus";
; Z: C5 P; \) D* V, j9 o3 v( t9 qCache.initSize.l2Size = Cache.L2Size_32K;8 s/ ~: t7 d/ g2 L  R
* K- j/ o0 j, Z" c
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-24 22:22 , Processed in 0.041940 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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