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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构" d1 [. o) {1 _) c8 G
% p- j5 j: Q# L2 x1 q# H
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2565 ~& _; F# [7 |  `

9 w1 v" f9 ^' k8 z6 C/ X( L5 l其他程序段。。。。。
+ Y5 w1 k  B: d& Q( g  a: j. w7 H + f5 b/ _' E+ k& d0 t
   free(x_d);
7 B) C, M3 b4 ?! r; H: x
7 b% r1 n. p* ^! g2 g  j9 L  R8 f, S使用DSP侧单独调试功能,验证动态申请没有问题,
6 E' a3 s/ @2 g, d4 N+ P
) s3 q* I' {# z* |( Z但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ h# t6 R7 t- c: f
" A: K. n) V( `7 G

9 C: V/ v+ ?4 n. Z
! @8 F1 g- ^1 `9 Y* [. b6 n6 c7 A: _) R
# n+ ]0 x% b" H0 Q& ~6 a7 W7 h" z

$ g. |2 P9 m9 L9 p) [
/ N& u- s3 S4 N& p$ Z! D
1 m1 I/ A4 t' A! g7 ]0 o
: N7 w. Y4 d! v7 @& K* W7 {! K' L, b- L! _4 i  c
分享到:  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 */
0 k7 T8 q+ i/ q  sProgram.heap = 0;, O3 D3 A, g6 X; F0 U
Program.argSize = 100;  /* minimum size */
; \" ?+ V) Q0 ~! S3 NProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */" D+ Q2 f2 A( h# w
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 b% {: X" A/ yvar heapMemParams = new HeapMem.Params();
; M. _0 ]9 e- F: i7 u) dheapMemParams.size = 0x4000;
# T# t  g# u9 v& H
, R+ _" t) B, q! zvar Memory = xdc.useModule('xdc.runtime.Memory');
" Q: l; q6 q( JMemory.defaultHeapInstance = HeapMem.create(heapMemParams);) p  A7 k5 q% N, a
1 i! h. [/ e/ h7 h4 i
我大约calloc  每次共计大小为5K*16bits,% C5 k9 q! g* t
而默认配置才0x4000、需要改大。
  R& }0 t; r8 Q! x; N& |" U' \9 `$ l8 H
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明' B! X* u: F, C+ x* W. K/ E
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: N" C2 Q: I% t* d/ v0 A(不过疑惑的是,为何单独DSP仿真就没有问题呢?)9 m( k& q" J( T5 b2 [
7 T8 p# J) g0 o. O+ F6 A
是不是需要在DSP.CFG中进行配置
: X3 z+ j# d2 v7 I3 K* H我现在的配置为
: [- G! b8 d1 z% m* c' \  C. O1 |5 p: W* C) c. i# i
/*- D  t, f7 W) I& R# V
*  ======== Operating System Configuration ========. ]. b5 k. x" h
*/
- t6 A, v; m; K- I: x) W& q7 i0 i, H, R2 l: P) ~8 J
/* no rts heap */
# j; E# e0 X# g( F1 \- P- T3 W( nProgram.heap = 0;) c5 w' v( |3 p8 Y
Program.argSize = 100;  /* minimum size */
/ L  y. |, @+ g+ k" k/ _/ X* n7 ~, G- vProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大0 }( f9 p3 U! J' G
) w$ f- Z  b6 @* w" E
/* create a default heap */
4 {/ |& w% K* `; n0 Tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 b% e5 i% o7 p% V  c  Bvar heapMemParams = new HeapMem.Params();/ w( y' U8 R6 k& d4 m
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
8 w) W( U( U* Q! j/ ^* _$ C- V! T/ V8 R& s9 H6 w6 S
var Memory = xdc.useModule('xdc.runtime.Memory');4 l8 I" x" `5 \, M
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' K. z. |6 H9 z
4 `5 D0 g+ d! U3 y8 c0 K
/* configure System module */
# x+ V. b# Q1 C" [5 U/ `& j" pvar SysMin = xdc.useModule('xdc.runtime.SysMin');, E3 j/ N3 \" y
SysMin.bufSize = 0x1000;; t0 ]# K9 s1 M* O  K: K4 X
SysMin.flushAtExit = false;5 J, N+ n% E+ R0 r$ u
8 `; d; A4 `1 I* t; G
var System = xdc.useModule('xdc.runtime.System');$ M& i# R  j" w( D) c
System.SupportProxy = SysMin;
- `% F, U2 |% e/ `. x9 ]( L
# e& H9 G) |. {" V3 ?/* configure SysBios to use the lower half of Timer 1 */
! V( u" e- S+ f- y& @& v/ [/ Yvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
0 Z% f3 M0 ~8 E. E" _) ]. f# Svar Clock = xdc.useModule('ti.sysbios.knl.Clock');
: d1 f& K  \, }- P$ {2 {  J* y" A$ fTimer.timerSettings[1].master = true;4 ~! E1 ~% C1 ?' m# Q& \7 l
Timer.defaultHalf = Timer.Half_LOWER;, K4 F7 V) [: q# B; s* n4 A
Clock.timerId = 1;
" L7 p$ p7 T0 V* i; u  F- ?. G& ?0 b" D: ^* k, g5 H* X
$ l0 V' J6 |! h7 y
/*6 t1 }1 Q  G6 V4 K, L" k0 w
*  ======== Miscellaneous Configuration ========
6 _1 ~7 d" I- u2 a. R3 E. P* p */* f0 h* B  ^* m7 P4 ]6 \

2 U# u$ I9 }3 a3 W/* set default diags mask */
, I7 l- r) }$ s% X  Gvar Diags = xdc.useModule('xdc.runtime.Diags');
! M8 f' x, H5 }( pvar Defaults = xdc.useModule('xdc.runtime.Defaults');# r+ [, e8 T5 @  L7 I$ U
$ p5 E$ t6 G& u# x
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;- m/ J2 q* e& E; u/ r
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
2 D2 g3 C  \/ p0 e1 V  P8 a& DDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;: W4 `* C6 Z/ C% F, f/ R6 y
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* `" m- f% f  O1 X# z9 g/ t
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 S, Y" Z5 n3 R4 R
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
/ U. e% a- z; c5 ~7 ODefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
1 F! Y8 D4 @  X* JDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
+ i, G, I# @  G, gDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;! k( b9 i! e# m! Q; R" r
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
; N3 T1 P& b# T7 F! d" ~8 k* PDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
1 p+ w- F( j8 [Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;. v$ V5 k$ S) H* [; f
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
' K) n; `8 W* @+ \* fDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;6 Y# ^% |& T+ `# J* P

# p& g  I+ G# j! e( p( \, q/* override diags mask for selected modules */
& x. B4 S5 L: \" [" ~- j5 E) A/ Q+ rxdc.useModule('xdc.runtime.Main');
2 s$ c" e- N3 X& x4 @Diags.setMaskMeta(, i$ U/ I' I8 I$ _, u1 M8 l
    "xdc.runtime.Main",0 L2 h3 [5 g% u# T" f9 t' ^5 Y
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
  K% Z, o- M8 Z4 ^! ]    Diags.RUNTIME_ON
1 E1 N- }! V) U# Z);) y" `  b# W* P/ @7 ?: j7 p

2 I3 W% k( F  |% F3 d; cvar Registry = xdc.useModule('xdc.runtime.Registry');
, I+ {0 Y# _, o6 F$ URegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;* Z& u$ h$ k' H# s/ ^* l* p
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
: U% Z/ x/ f: y& yRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
" W( i$ G9 |9 p% A5 D+ XRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;) A$ V6 N9 ?) e# I2 N
. R5 W6 n: ?7 b  s4 p$ u' m4 t
/* create a logger instance */! ~4 u/ h9 k* g; `
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
, s& H/ D( x: A6 pvar loggerBufP = new LoggerBuf.Params();1 `# j5 l0 f, ?2 \. u- d$ n* J, b
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
6 }. x' u2 m/ Y  l8 Q. O- HloggerBufP.bufType = LoggerBuf.BufType_FIXED;1 j0 E- ]+ q& ^9 Z% i" j
& V7 w6 b# P6 w$ Y" z: [7 w5 T/ I
var appLogger = LoggerBuf.create(loggerBufP);) [+ T0 U  J4 V% [" D$ |
appLogger.instance.name = "AppLog_Core1";1 b  a2 n# S# y' {
Defaults.common$.logger = appLogger;
* U0 B0 X  I! T" ^# n9 HMemory.defaultHeapSize = 0x8192;   
$ E7 }- u" i" j4 PIdle.idleFxns[0] = "&LEDStatus";( h, F  x7 h8 h4 \' ?$ N
Cache.initSize.l2Size = Cache.L2Size_32K;: ?3 l. D+ X- z6 f
, b- l7 L7 z; w2 z( K" J# S
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-29 16:25 , Processed in 0.043351 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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