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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

0 G; r* p- O6 t/ z    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
& ]# w& e0 ~& w1 T) K( P9 i6 p- w. a
其他程序段。。。。。, i6 A2 n( m9 c/ T5 q' B' i
* c9 K9 [* K  i  Z) m! B
   free(x_d);2 l6 x+ X: o! S1 S: |2 ~
; H1 E8 P+ [2 j+ r
使用DSP侧单独调试功能,验证动态申请没有问题,
% m+ W, q4 A' z  v7 w5 F0 i9 K: w9 F
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。3 u. M* s+ z# }$ G) A

# U) p$ B4 O# m( T& ^* d. U& ]) q7 C7 [
- g1 P$ ^. f1 r: A( C# H
* B& a! c! Z! J/ b
, B1 j. n, A4 X: R
) D7 T/ G% |" g  ?1 d( U% U

6 k9 d7 R, a8 ^! \+ o$ q4 E
' ?0 B, ]+ }2 v" t$ E" G
5 t6 X$ g0 p' b- D/ H8 ^5 N- H  Q/ M+ |  z' Q8 _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明3 N9 O. h/ m' M1 Q
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: V) X4 R' g) A6 A$ j+ m4 A: j) d(不过疑惑的是,为何单独DSP仿真就没有问题呢?)2 }. g& x6 |" m2 [
$ G! V9 f; J/ w$ Z6 P2 ?
是不是需要在DSP.CFG中进行配置" L- D1 v; P9 ?9 t4 k+ X! ~' ]
我现在的配置为
8 X9 n8 \1 o) `. l; u9 J2 R( }2 }. ]  n0 I- ]
/*
. y0 i* W7 {- v! n9 m* i *  ======== Operating System Configuration ========" ]- T6 j3 h) y
*/
; o2 {* t- U+ k, P. m
# M# _# E( w4 D: \, e/ D/* no rts heap */. h5 n- v! n/ Z$ A- Z1 z9 @# Q
Program.heap = 0;; H/ f! L2 G0 Q) m8 L
Program.argSize = 100;  /* minimum size */
+ t& _; W4 |+ b2 ZProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
% E: `% M! i0 Q6 T3 X/ F: R; K+ F0 \% H, h0 s
/* create a default heap */
/ h1 t" F; o4 I( Ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 H4 Q/ K" o8 N$ [$ c
var heapMemParams = new HeapMem.Params();5 w. N7 [1 x* d3 ?) x
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大9 q! y: R5 d! v4 n4 ^1 Z4 _

2 n  E! k  i: q2 l& G- F; P
var Memory = xdc.useModule('xdc.runtime.Memory');
% s0 j3 r# y2 W& w9 H' V: pMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
- e9 l2 u: _# Z* [2 F- l" C4 B' W! @0 @1 Y. F- ^7 C2 O- H
/* configure System module */. m) w# y( y, q$ h* y
var SysMin = xdc.useModule('xdc.runtime.SysMin');  P2 L$ |, A6 O! D+ V2 y! h7 b
SysMin.bufSize = 0x1000;! ?1 M1 F3 s% D6 }: z" n/ a7 E" M
SysMin.flushAtExit = false;4 ]! J# M" e$ f! H8 M1 y) p, G
3 L- {6 c0 [, I
var System = xdc.useModule('xdc.runtime.System');
8 g+ w( U- @# xSystem.SupportProxy = SysMin;
# h$ C& q9 q6 Z+ d& }* ^9 W2 H! u# X  \0 U: t7 b# {, N$ L. q
/* configure SysBios to use the lower half of Timer 1 */1 ^9 j6 N: Z( H3 K+ N. V
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');9 f$ T; S1 ?# Q4 c- _3 _0 w5 x
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
0 T6 x* k' b! U/ @Timer.timerSettings[1].master = true;6 U) s8 U5 n' |. E+ U- b
Timer.defaultHalf = Timer.Half_LOWER;
: ~$ }$ ?. p* \$ AClock.timerId = 1;
  h" H% ~! x' b  `+ X  e2 k8 y, G' T! _1 ~' [' Z

) r- E, Q6 V+ W: D6 \/*
) O* W4 X1 Q! C& W: g0 J$ U; }; M *  ======== Miscellaneous Configuration ========
* D4 ?5 |3 G% N6 F1 I& d8 H2 t */
& `. m6 A3 b2 _: Q6 c: Y& m, ?, \, A4 L1 X! p
/* set default diags mask */
& n; W$ }% b1 T/ F! Gvar Diags = xdc.useModule('xdc.runtime.Diags');
( |; o! n4 \6 L* B& {) p$ wvar Defaults = xdc.useModule('xdc.runtime.Defaults');9 |0 U+ z, x- w7 U: v: O+ t

$ z' S* O5 p; j7 V0 L& W6 T4 r# BDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;: U) j: ?6 o! p- ^/ p6 ~9 z
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
1 ?, o7 p4 I1 O' IDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
, m; B; }1 J* |+ l* O, zDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
9 E( ?$ _; Q" [$ fDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */: j; u& D/ \9 D1 L
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;/ o3 t: I% ^5 X7 ], Q
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;5 S- B, }6 b: p9 r8 G! i
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;# l, x9 n! T# _
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;- [; H5 h/ I2 [. a) r0 w9 s
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;7 t1 }$ T/ I' {! [: B
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* u. A# e- h1 L8 @$ rDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; _# w) d- j) \2 G& ]0 Q+ D# ~9 C
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
; I7 U" y8 D6 {' ]2 A; TDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
8 I% y& P( `5 A0 t6 N$ i3 F5 L. L/ d7 S1 U
/* override diags mask for selected modules */
# D4 l' `9 L2 P' |/ {: Oxdc.useModule('xdc.runtime.Main');
! H% p1 ~7 t7 _3 D$ e# WDiags.setMaskMeta(
) U1 m! F. j0 m    "xdc.runtime.Main",
6 d1 ~; P3 c/ a3 h6 c, m4 G    Diags.ENTRY | Diags.EXIT | Diags.INFO,
% @3 |) l* t+ O/ b& E3 O- ]# B5 S    Diags.RUNTIME_ON
( Q; t7 r' @& `- w! A2 P);
- x/ `1 x3 }* t# ~' A7 R( s3 D
8 j( j7 p3 K. w+ Z* x: Q4 S& A- a5 Pvar Registry = xdc.useModule('xdc.runtime.Registry');7 j$ r3 Z: T1 B1 |: c
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;* p( p  Q: K) c/ m& U) n# m+ n
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
% i0 y3 |7 R$ p- P9 SRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;: Z" s. F2 P: R" k4 i- Z( u
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;9 b6 C/ f* |; B/ G2 p; l  ]

: o% L2 d! z: z+ E4 g/* create a logger instance */% ^8 \* [9 f+ L: y# T) z5 ?" j1 Y
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');$ \/ f2 K$ F9 B$ k4 L( i1 _1 {
var loggerBufP = new LoggerBuf.Params();' u% m1 _  c# {5 Z: T& W
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
5 B* g# z! Z: UloggerBufP.bufType = LoggerBuf.BufType_FIXED;+ I, A# \+ q" A9 V
7 t6 T: b6 L; d
var appLogger = LoggerBuf.create(loggerBufP);% N( A: ~  {4 Y* N
appLogger.instance.name = "AppLog_Core1";1 w& w1 l5 J4 N  @( G) I3 F
Defaults.common$.logger = appLogger;+ H% ^$ p; E# ^4 E& ?' k/ Z" a
Memory.defaultHeapSize = 0x8192;    & ~8 g8 }$ d8 {3 G9 ?
Idle.idleFxns[0] = "&LEDStatus";1 u2 G2 b; g. e2 ], `, l7 d) Y
Cache.initSize.l2Size = Cache.L2Size_32K;. \1 N, V/ r- [4 h0 P
5 @( X0 A8 x3 h% B& d8 U9 q% t
回复 支持 反对

使用道具 举报

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 z7 S3 j( w# E4 x% \. s
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 h1 K1 U& g% D/ [+ qvar heapMemParams = new HeapMem.Params();* ~4 S* W* V* |3 ^& _
heapMemParams.size = 0x4000;
; L$ m( [5 t. \6 Y+ p; H  [
; i6 R2 g" n8 D7 zvar Memory = xdc.useModule('xdc.runtime.Memory');
+ X! |$ |2 f3 H7 y: D* `# r- a, dMemory.defaultHeapInstance = HeapMem.create(heapMemParams);* H4 Y7 q# a+ a  U" q; O

# X6 e  Z( s- @+ ]. ~) L- S2 m我大约calloc  每次共计大小为5K*16bits,
* I' m1 y) I- i- B而默认配置才0x4000、需要改大。
9 w6 O1 n$ a/ k
" L7 }- F* d+ k5 @
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
8 e% ^, k, l/ x" m) M& p0 FProgram.heap = 0;
" B- H" u. A+ B. P* |2 B# t, GProgram.argSize = 100;  /* minimum size */- i6 Q9 d! W+ k" ?7 A3 P6 |; X
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-9 01:51 , Processed in 0.043683 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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