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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 R6 A% P3 p) I9 ^3 p+ p6 [/ e3 v" g% }$ f- H
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
) G( @% x, |6 O4 y- r( h
/ ^7 m9 h9 Z8 A5 u8 U$ {9 {) I" q其他程序段。。。。。8 q, |# m- t  b9 \

5 I" A* n* ^% z2 l7 T   free(x_d);3 ~% Z, A. w, W# H& Y2 j

- i2 G& H' I8 l* ]使用DSP侧单独调试功能,验证动态申请没有问题,; O! M. ^" m! x

# r3 A/ ]7 r( r, {但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。6 k$ q. f3 e& v! S- \& Y4 C

# [+ {! ?0 M3 t; ]6 z! Y7 I
  i5 \$ i# U3 C8 p6 |. Y! |( }
1 B4 h6 \" I, [) {9 p5 u+ i0 x0 E' s
/ p+ _0 _4 S) [  ]6 W5 Y

' O6 z" R/ n$ v5 {: [1 S1 ^: Z' R* e' S9 Q9 R# N
/ h9 {- {* I, i9 ~

  u* ]3 N5 H: A  Z: G: J+ R- Y$ W$ h9 t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
9 M, C+ y% Y% X8 D* O" Q  p+ U我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下( l0 l" q' }) t/ g
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
% U5 T+ l2 i- D9 }& ^- _  }) S$ {6 U% w

( _/ D& ^; I# ^$ V0 q# I是不是需要在DSP.CFG中进行配置
4 K4 P/ h; x: E7 R. U我现在的配置为8 W: e+ `" p5 `- M
. Z( F. p( @, @/ w% j8 N
/*
$ ~6 t1 m+ f, V *  ======== Operating System Configuration ========. y* h* B' |; d) U7 V! B
*/  A+ n3 L+ q0 C7 O

* w; B7 _" k& f3 k9 M6 e* U. r4 S3 U/* no rts heap */
2 |9 E6 ], R, O- A$ L% QProgram.heap = 0;1 I  x: {. ]5 Y9 E$ B
Program.argSize = 100;  /* minimum size */% a2 k6 Z1 D+ U  l
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
5 G) T* |: j, h# h2 [1 ?# q, W/ U( i5 c$ F8 p
/* create a default heap */
/ \% l! M& b4 U& ^! fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 f  }1 ~+ i5 ?5 B1 W8 x
var heapMemParams = new HeapMem.Params();% h9 F- c0 [0 l( l& @& W! f
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大/ T' X7 r. b+ c2 Y) Q
8 ?3 D3 H9 k$ u" q
var Memory = xdc.useModule('xdc.runtime.Memory');
; I1 d$ }4 j) R* iMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 u  e( \1 K- I
; a, h' H& Y; K( x+ a4 S: z, f# v/* configure System module */
& h+ d* y  C9 Q0 N% T3 r2 Ovar SysMin = xdc.useModule('xdc.runtime.SysMin');; o/ }0 J5 g+ I1 w2 F- H8 f
SysMin.bufSize = 0x1000;
, M% ]  x' O# oSysMin.flushAtExit = false;! a( j6 x- c3 s
- x0 k3 V* s: k. K. u" }( k& s
var System = xdc.useModule('xdc.runtime.System');% K7 F# _1 h0 j1 B" [5 `
System.SupportProxy = SysMin;
. H' O! A) ^0 ^, s+ g9 [& r2 C2 A8 v% m4 B' g8 I% P$ Q7 X
/* configure SysBios to use the lower half of Timer 1 */4 S4 @2 L" N3 `; o: H
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');6 M3 p/ i  d) q: w* _" p) Z
var Clock = xdc.useModule('ti.sysbios.knl.Clock');# V5 s1 @! N8 v; M* `) C; g
Timer.timerSettings[1].master = true;% {4 O0 Y% q9 K+ G/ x
Timer.defaultHalf = Timer.Half_LOWER;& }+ D- U/ Q2 o( ~/ J4 }$ t
Clock.timerId = 1;
; p+ M% Q1 q- C+ k2 r) C" a
3 z& Q( K; G' }) n  g, A7 c4 f0 l9 d
/** z$ Q4 g& V3 ^5 r' F
*  ======== Miscellaneous Configuration ========2 g! l1 _2 _) _/ ^% G
*/6 K5 n/ y8 D0 z: i: Q5 P
7 _" u8 \1 t8 p
/* set default diags mask */
3 n& o% C& Y: e' @var Diags = xdc.useModule('xdc.runtime.Diags');6 S( u4 p2 c, e; G# h( v9 ]" ]
var Defaults = xdc.useModule('xdc.runtime.Defaults');
2 ~0 K. c8 `- R. j% L4 a1 `- L- E! e0 P1 i, d
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;" M( j: R$ j* c  f1 R% P
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;' C  k4 @& j, x1 g: C0 i
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
6 e2 x" }" M7 `/ v/ _Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */$ W# D! ~' Q8 G3 j
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   *// z9 O. F4 q3 d5 T' J: i
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
  r- T& i  e0 ^1 A4 sDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;7 |1 M9 B3 M; ^* v
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
8 l4 W6 a9 V/ i7 HDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;. j' g+ H$ F- E- T7 n
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;) q0 k4 _. Y0 `" \1 Y% t
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
" x; j, Q0 D+ f$ W9 J) yDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
1 z! n  d7 n& E- D0 VDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;. l1 o7 B0 e8 f* k
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
. c7 f) L2 r! Q# P* P, e- @. M9 O. @  a  F4 f
/* override diags mask for selected modules */  A& J  N8 B( X& b: d9 ?$ m
xdc.useModule('xdc.runtime.Main');
7 O+ B% F# e  j& N" t+ }! HDiags.setMaskMeta(' |; x  |7 o2 e# u& J8 D
    "xdc.runtime.Main",& T# h" M3 e* N* z' z, R' [7 k
    Diags.ENTRY | Diags.EXIT | Diags.INFO,2 O0 X8 @0 Y: S5 R1 t4 Q
    Diags.RUNTIME_ON
6 U1 G7 |3 q$ }# O. T9 p);
$ n- D' @& K/ L% c/ E9 s6 r( h( v
+ X# t' Y) Q) Bvar Registry = xdc.useModule('xdc.runtime.Registry');" ~; u  D6 U# B
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;/ q2 S3 k4 P0 w7 B/ ]: t$ r) @
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;" k; V- ~$ `9 q6 u4 P; p" Y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
) P! c# {+ ?0 t. eRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;6 a+ I6 G$ {9 l3 Z% G2 T5 Q9 o6 V
# Y0 {5 u8 V" l1 r, t+ [' O  s
/* create a logger instance */1 R1 ^" A- ?# P4 g! V. T8 W1 v8 ~
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 h. u6 r7 N0 x" Avar loggerBufP = new LoggerBuf.Params();
/ D( A  ^* ?& V, d- R; p  ~loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
' X% q2 [1 X, D2 ]loggerBufP.bufType = LoggerBuf.BufType_FIXED;; F! A5 v, V8 r- r% s

! C" i" d! X* C6 m1 Q7 O% S' ivar appLogger = LoggerBuf.create(loggerBufP);
/ b- H0 I3 v( R' k6 R) l. D- D$ H" pappLogger.instance.name = "AppLog_Core1";, T) j- y/ o- d! w7 R
Defaults.common$.logger = appLogger;
8 F; E* \) H& g+ r- XMemory.defaultHeapSize = 0x8192;   
* H* O8 c+ B! [Idle.idleFxns[0] = "&LEDStatus";
$ Y6 D% U$ o8 D. D. ~Cache.initSize.l2Size = Cache.L2Size_32K;$ ~$ M4 z* v( Z6 ?5 l: ?; p$ R" U6 \8 ]/ A

1 C  t; S& R) l: h8 u, m  B! `
回复 支持 反对

使用道具 举报

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 */4 ?: H4 Y+ J$ N& i* C
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  C! [9 v- ~; x1 ~' ~var heapMemParams = new HeapMem.Params();0 Z% I, [6 p& q# ]7 C
heapMemParams.size = 0x4000;
: ?+ X1 C  l, |# v7 A. {. e& F" M- q5 v, ~- |. P3 w
var Memory = xdc.useModule('xdc.runtime.Memory');, g% W: B: y( h" B
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);7 T1 @: A- j$ k9 g- Q
( ^" e' I( P+ ~( |2 p, i. o
我大约calloc  每次共计大小为5K*16bits,
4 [0 D% T( b6 u! ~0 ?$ L而默认配置才0x4000、需要改大。
3 s) R* T' s, X# L
' ]! H& x) h0 A7 w
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */% c$ M' m# u9 K  M( P$ {
Program.heap = 0;8 T) a1 W! G! ^0 @3 `/ E
Program.argSize = 100;  /* minimum size */! m' R) ^# [0 n2 k5 o+ 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-3-1 12:59 , Processed in 0.039459 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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