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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
" y; r9 l# N# U/ a+ w! q' j5 X- w" |1 t/ h3 @
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
# @# I( l( f  J$ X4 Q2 u% A1 y. k, b: z$ G( s5 u. T
其他程序段。。。。。
/ N# P5 f7 F& J+ v% T * V, Z' y$ u/ f+ N$ b
   free(x_d);
) l+ |+ z, y9 B8 J7 L5 W4 ]+ `3 S3 q+ n2 w8 }" ?8 P  }
使用DSP侧单独调试功能,验证动态申请没有问题,/ b8 A# E4 o. W

8 X1 ~; R5 t+ i. H* K  _( ]但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
+ m2 A! \. {7 W

! h+ K6 K" M' N* G2 `
! y' k5 i" {& r% R, D5 V
, P8 F* ?5 k  G( v, n, a' ?) g9 G. d
" P( |0 i3 v- P: A" d9 m, H

9 J" f( x& l9 L( z' I8 ~$ l
# U# V9 e, R5 k, P
  `  q# F- f( N! G! ]) m
' `6 v: `/ Z( F/ Q
% Q. S. D  M$ }" b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
0 J, W6 [6 w( ]我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下' m4 ]1 V. O% Z/ [% F
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)0 C7 J+ u, r  q- z
; ~; Z* _5 M* S
是不是需要在DSP.CFG中进行配置- n' ~4 X8 N' B/ c9 g2 o4 R, L/ [
我现在的配置为, B  p7 K+ u8 X( X  n( @  m
" |& R1 K0 V1 E7 L' S/ p; J- C
/*3 D. F# j# H/ L9 C$ S& v) y4 V
*  ======== Operating System Configuration ========$ N. U& i( }5 b" G+ a- k" l$ Y
*/) f2 u5 w2 Y$ C0 `1 x* w$ V" v

+ ]7 {5 v: Q' ^. V, }/* no rts heap */
1 r  F# T+ {3 g( SProgram.heap = 0;
0 c/ N, T: U4 b# F# ]& RProgram.argSize = 100;  /* minimum size */
/ b, Q: J+ ~$ PProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大4 L; |; B& e' v6 L- K' n) n
2 X6 V6 T' V* z, V7 d% B6 j
/* create a default heap */5 L4 w: C9 _9 [! ?8 A7 h. Q' i: \. X
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, K. [$ r% Q/ v
var heapMemParams = new HeapMem.Params();
, u8 \8 A2 n* {" m" g( DheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大# w+ u& @% @  K/ U$ E0 Z
7 b. h7 ^3 I) C; @- K
var Memory = xdc.useModule('xdc.runtime.Memory');
9 v: A; t9 Y2 W' r8 k% h9 IMemory.defaultHeapInstance = HeapMem.create(heapMemParams);0 h; k; b  [$ K2 _% t2 Y  H
. ^3 d$ O8 `: D- n4 d1 }
/* configure System module */
% P# B: |3 V1 L. S! S- N/ jvar SysMin = xdc.useModule('xdc.runtime.SysMin');1 z! v5 Q6 F! Z" N, z! ~2 [; r
SysMin.bufSize = 0x1000;
1 U" h) X- L9 X6 D1 GSysMin.flushAtExit = false;7 O1 B( O) P5 b7 A& I# K9 U5 n, B

( B3 b! @8 l6 V5 A0 dvar System = xdc.useModule('xdc.runtime.System');
7 R* ^4 x; Y0 Y0 GSystem.SupportProxy = SysMin;
* M8 B8 ~& @+ c% r* ], i# J
" P1 M0 l' T, f5 s# v/* configure SysBios to use the lower half of Timer 1 */9 ]4 Y0 W: ]0 P1 B" i. t& J
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
9 }: R) c+ @" w  ?- A! Zvar Clock = xdc.useModule('ti.sysbios.knl.Clock');0 ?2 F! @& _' B5 m  h' Z4 o
Timer.timerSettings[1].master = true;6 H: @7 u5 t4 ?
Timer.defaultHalf = Timer.Half_LOWER;
8 _6 N" C/ G. v" |Clock.timerId = 1;
0 s, P# d* A" n$ c; I$ P) {
( U9 C& q9 X% V& K) N
6 [) i# ^& D( g! K$ D/** z& |3 o$ l$ a+ {+ M/ ^$ F
*  ======== Miscellaneous Configuration ========6 G8 S- c3 C' Y+ U  y
*/
& S7 }, W1 h5 ?. U5 Y1 H4 j1 F0 I8 {
/* set default diags mask */# P, l# c5 ?1 b# q  t
var Diags = xdc.useModule('xdc.runtime.Diags');$ N5 O. [, Y- W; B: i
var Defaults = xdc.useModule('xdc.runtime.Defaults');
4 V6 S9 c$ w6 K: D  P; s; _, s
4 Q7 Z' i6 d) ADefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;; A3 L" |' U6 W& Q, g- P% `8 m/ C. t  ?
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
9 O' N9 P$ L, e* d9 M$ C- f( H# JDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;1 F- X& e1 b1 @- `: {. J
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */: {$ ]$ ?( N/ `: [: F% v2 W# L- `
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
3 g- s3 e2 M' C3 _& d& TDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;% ~7 ^( ?$ |1 n( _. [& {* C: E) k2 ^, N
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;4 u# x2 l9 s5 Z/ v5 a# o- C) I
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
1 u( s& I- d5 F# J! A0 |2 r6 bDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
4 q$ A3 f: y  v, c" N& Z+ B0 E6 MDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;6 q6 ^( ^2 G1 C+ U1 x$ G; Q% q
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
. Q0 ]; \7 Z8 B* QDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 T5 _$ H2 d3 ~0 W1 z7 d$ s" y% HDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
% D" L' r6 H- P& _& L9 pDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;6 A* l' s) F" m2 z! ]. {
( F; X  F8 ?1 s
/* override diags mask for selected modules */: S( X2 \, b" ~# j6 ^' w
xdc.useModule('xdc.runtime.Main');
5 g) d9 b; [' e* KDiags.setMaskMeta(
( w. u8 B9 l2 f0 L# x, w& Z4 C! v" l- \    "xdc.runtime.Main",
- r5 f( J* d; Q; t4 J4 E    Diags.ENTRY | Diags.EXIT | Diags.INFO,
8 }0 T# Y; K+ [2 p" @    Diags.RUNTIME_ON
% K  {& ]4 r$ K  ]  `- ]4 ?);
, k& y' L$ Y1 C0 @$ K7 Z% q
- E* }# f/ C$ k8 t: ?var Registry = xdc.useModule('xdc.runtime.Registry');
1 e! ^# t1 x- I) ^% m4 wRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
3 f8 ^2 c4 W5 K1 o8 l2 U* h6 WRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;( j% r$ p- @7 C# C
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;2 h5 [' _! h4 t- X: W+ F# P
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
- `, t0 V, o! `0 Q
9 J, B7 e' \, D- H/* create a logger instance *// _0 y$ c  {; c: v  T4 \. l
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');0 ~! T9 ?  H+ n
var loggerBufP = new LoggerBuf.Params();
( v% C8 ?! [1 D# FloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
( V3 i( D7 I$ {2 v# L8 NloggerBufP.bufType = LoggerBuf.BufType_FIXED;
. y3 _+ u$ ?$ x; l2 J% }4 h7 V/ A  z* w3 _
var appLogger = LoggerBuf.create(loggerBufP);
$ k$ b# _  `' g2 `7 x* v4 DappLogger.instance.name = "AppLog_Core1";0 j7 I# e$ i$ d! E3 g+ c
Defaults.common$.logger = appLogger;
9 }5 Z' M" a' ?: [0 IMemory.defaultHeapSize = 0x8192;   
5 u- ^$ U+ l4 [8 A& x' j8 w9 m6 ~Idle.idleFxns[0] = "&LEDStatus";
. Z6 c# X0 _, t# O# ~3 i. d7 gCache.initSize.l2Size = Cache.L2Size_32K;+ k7 E/ w. U: w; \

9 x8 O6 ?6 d' P: X% A* g
回复 支持 反对

使用道具 举报

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 */
9 s; }: J  i4 R) D; r7 C  M# wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 E+ o2 \7 A$ |  h5 p6 \1 svar heapMemParams = new HeapMem.Params();2 I: F4 L2 |$ Q& h0 c
heapMemParams.size = 0x4000;, O, N- `, T  Q9 F9 S! [. q  E

5 |4 B) P: e' F0 x7 kvar Memory = xdc.useModule('xdc.runtime.Memory');* l1 ^. _. q$ z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);$ N/ j* ^' f9 g' V  |: ?

/ X. E( C1 ]6 H/ I9 x8 V7 [我大约calloc  每次共计大小为5K*16bits,
, L0 a# |' b' \2 R而默认配置才0x4000、需要改大。7 B' m  {) X4 t& ~0 H$ P
3 u, o3 T! R$ e1 r3 \/ `: b
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap *// M+ U; f% m- y7 X  m" g
Program.heap = 0;
& T1 W' K, P& cProgram.argSize = 100;  /* minimum size */
) l; `. a2 R% W* N6 C+ D7 N3 Y3 z* w# ^1 {5 rProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-2 08:54 , Processed in 0.041228 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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