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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

/ n: u6 e1 H8 c; G( |    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
! t* L8 T4 M" l3 I2 R. X
) i5 }, }8 J# t/ a* A! G* y其他程序段。。。。。
4 p2 x* T: Q8 f6 ~" W 1 R+ i1 K& {1 c) g
   free(x_d);
5 m; ]/ k/ ~0 {1 s& B  n! ]# V! j8 h3 m% `6 ]1 s# }3 Q3 A6 n
使用DSP侧单独调试功能,验证动态申请没有问题,  B% A! i# O2 {. q+ |) y/ O5 G
5 q0 ^6 |+ z  ~6 Z
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。3 l7 G" l- i9 _) F- g  C
# H2 I4 k$ e& ^
0 M! G" F: f' Y
3 v& w% l4 B' R

4 ]& s/ K4 `# i( J/ `1 F. `  h6 z, D
6 `! t# @4 J- Q' h2 n
7 M* I+ x. q8 X& {# d& I- s2 C
' `! [- S8 i+ ?! Y9 Z9 i$ S3 u9 e' \! F+ ]
9 R( o2 q* R+ R

5 R0 t5 m$ a6 |" ]( E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
/ ~  ]! M6 g& f+ @* `8 M; y" K9 W我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
7 T5 I# l2 O' z; a& l$ P1 S(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
  ]! [" t8 q* [& b- |6 t. J
; Y; k: g+ _; u6 l1 d' D6 M
是不是需要在DSP.CFG中进行配置
1 {$ n8 @% ^' c8 X我现在的配置为
! E7 d4 R. B' h( O0 O6 z
! [- _9 p6 `0 {& b/*
6 c& k8 g) {: \$ U *  ======== Operating System Configuration ========. n- _0 Z' g4 G: h9 I- B7 N
*/0 M) b, s+ ^( _

$ [' r6 J2 P' m  {/* no rts heap */
. Z7 g1 |) z# [  V/ h, mProgram.heap = 0;
7 g9 F, Q2 R6 u4 qProgram.argSize = 100;  /* minimum size */
1 |/ Z# g0 w7 x  L7 WProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
' ?; P/ C" J, s3 G3 g9 k& D
2 O% I" A6 z. R7 }0 T/* create a default heap */+ g" ?$ q+ Z6 H5 d) U& f9 n
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' z0 j& J" @' \7 w  h. r# B
var heapMemParams = new HeapMem.Params();
% {4 J! J- Z. l3 V: g9 F# ?heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
6 @* V+ G% G& q' ?  D$ M  b" H9 T/ f7 Z, ?7 C2 U
var Memory = xdc.useModule('xdc.runtime.Memory');; e1 ~0 Z+ c# j1 o
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 z  i% A7 n! ]. @& D' w
8 x9 y5 ^1 O' c5 X- `& ?% B/* configure System module */0 |# q, W* u7 x" r/ R; ^& l
var SysMin = xdc.useModule('xdc.runtime.SysMin');
) d5 q4 l- T1 \  O4 y. n5 A3 mSysMin.bufSize = 0x1000;
1 D1 f' `6 ^  z4 kSysMin.flushAtExit = false;
! Q4 V8 ]5 w9 g. E  ^8 ^' a* R5 i
var System = xdc.useModule('xdc.runtime.System');5 O) V4 F/ s; y1 o
System.SupportProxy = SysMin;4 x) w! B7 {! k" W

" ^' g2 ]( P3 f4 G) w/* configure SysBios to use the lower half of Timer 1 */4 l( U  c1 D9 ^% j# F) C) t; t
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');' v  w3 R! Y) x1 e
var Clock = xdc.useModule('ti.sysbios.knl.Clock');0 p% a9 k, X# y; r
Timer.timerSettings[1].master = true;
1 c9 L  f6 }+ m3 W# ?+ r0 z6 \Timer.defaultHalf = Timer.Half_LOWER;1 m( G7 e" v( n: Q8 t" n
Clock.timerId = 1;' C5 h+ D, |- |

1 e4 w( _! ^1 W& R, R, U! H& G) a6 R. B9 {
/*
! ~5 y. w) J( ?( g6 {$ o *  ======== Miscellaneous Configuration ========$ w0 L+ i! u& K+ F
*/4 ^" w) `9 _6 Z3 |/ v

! A; o4 }+ o; `/* set default diags mask */! U! m3 V1 n8 Q* k( s
var Diags = xdc.useModule('xdc.runtime.Diags');4 d6 y/ Z# }5 K3 Q" n$ I% T( ~
var Defaults = xdc.useModule('xdc.runtime.Defaults');- v( e8 v  Z, ^8 T. O( ~2 o7 l
1 n2 k2 L: u' X2 {4 _7 l9 N9 `
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
! F  E8 u+ k# m, C+ o7 nDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
$ A5 R( B/ u) T5 p1 q' vDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;  w# n" A+ A  o1 Z
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* h  r3 c- @2 V0 S5 m
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
3 u" N0 l8 a5 [% r9 l8 G; hDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;1 y# d9 h5 @0 k2 }# p) y
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
# H$ M+ G+ Q2 x0 L# L# ?Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;2 @/ b# ^# C) J4 M( G6 R1 q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
, E  _# Z" `" a! p0 y# c" s2 p- F: dDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
1 I2 M, R- D1 DDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
& S! m  [7 f) F0 a2 U% }" wDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
% R5 r, L3 y6 H/ o0 @Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;' x7 w# ]% z5 i4 }5 W" D2 ]+ H, Z
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
( Z6 _6 y- _0 L$ F+ q
! d' p6 }% s7 i# S7 a! x/* override diags mask for selected modules */
# V$ W1 Q( W$ [3 b% d2 Wxdc.useModule('xdc.runtime.Main');
* F, }( U: i4 h/ RDiags.setMaskMeta(
$ _' ]2 y) \) m: L7 R    "xdc.runtime.Main",+ I9 X/ @  w; R3 q' b# V. q1 @
    Diags.ENTRY | Diags.EXIT | Diags.INFO,4 A* d0 `! D, U: h0 O
    Diags.RUNTIME_ON8 O* V& W$ _. h! ^& F
);* [9 C$ z! O7 W, g

+ q! T1 h! r+ [! avar Registry = xdc.useModule('xdc.runtime.Registry');
: J" |4 B. T' p5 Z9 }Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
) K0 y9 u# N# M6 L& Q! z: ~6 HRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;! g) l: E" }- a+ U3 j
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;# Z3 s- ~9 o$ t/ S
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;( [3 P5 h/ m7 E, u

! N( u+ W. F2 V7 r, \* r/ i/* create a logger instance */) y: }/ V  _" X9 u
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');5 N7 v( v5 {1 d
var loggerBufP = new LoggerBuf.Params();8 K, `9 k" G/ z# G% N
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */8 S  S" B# D: _9 q) J) O" b# t8 D
loggerBufP.bufType = LoggerBuf.BufType_FIXED;6 N2 J' N8 b) B: E; @5 V8 o+ W

7 z, B9 C. u; X) p9 O" |! Z( `, dvar appLogger = LoggerBuf.create(loggerBufP);
1 O- d' w# Q8 J; k. eappLogger.instance.name = "AppLog_Core1";5 U- F0 V, L( ]' b& m/ u
Defaults.common$.logger = appLogger;4 J; u( ^& v: a* a/ p/ W1 u
Memory.defaultHeapSize = 0x8192;   
* ^1 i% ]0 a4 eIdle.idleFxns[0] = "&LEDStatus";
. }7 J* \1 ~0 n8 u8 ^5 PCache.initSize.l2Size = Cache.L2Size_32K;- r; u* q2 s1 ?/ c
* [: [% N$ M) ^+ _# E! U; H
回复 支持 反对

使用道具 举报

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 */
, w2 i, v  {/ a! lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! S8 Q; M+ n+ [0 H& J2 }0 }/ Qvar heapMemParams = new HeapMem.Params();
7 s# Y+ Y1 G0 s' N, G7 l8 S3 A, M1 h) uheapMemParams.size = 0x4000;
. p1 n9 S$ ~+ L8 }1 {0 M! D, B* O5 ~  G1 A) z& F0 n( X
var Memory = xdc.useModule('xdc.runtime.Memory');, w( X6 F; J! d! x) L' }; R
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);1 `2 Q) |' p9 d$ ]8 h

. Z1 j5 P4 J. ?我大约calloc  每次共计大小为5K*16bits,
# W5 v: h. J& m而默认配置才0x4000、需要改大。
& V1 U+ g% A! w! e2 T( W
4 v) n( N" \# J. `
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap *// j; M( U' Z$ @. t
Program.heap = 0;) C6 `) H* C( |9 l
Program.argSize = 100;  /* minimum size */
+ |. x! k' n5 E8 lProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-7 12:02 , Processed in 0.042277 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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