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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构! q6 o2 N9 G# k8 V* ~5 X, G% G
7 Q# ^* {" ^- f
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
' W  T8 P: G+ g  H3 G1 h
0 K7 y4 L3 }! a/ C, i2 b9 N其他程序段。。。。。
/ N0 N' ]5 g+ h3 z4 M9 X
# u  ^* |9 I7 I4 a- G4 v   free(x_d);; B% s' v. R/ X, |1 c
5 X+ h2 O& m: T0 a: V" o
使用DSP侧单独调试功能,验证动态申请没有问题,
0 Q$ s0 j; s! z7 c0 `, p/ p! {
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
: r$ @: |- E' d/ t  A( T8 [

- m0 F2 j- G1 F7 z, {3 {7 }2 m/ g6 l8 _# u! u/ \' N/ z: U
1 p, I' E9 _7 a, l3 ^
: ^% |( B* s+ M" G
! @& z. b7 f5 |& ~6 N; t
  _0 N/ e$ T5 Y  a4 K, i7 r

+ U+ f- Q3 F# j' l1 S$ J8 Q
4 P) Q( M& C4 X$ x( u: j- J
" a3 J2 [+ O, l4 t! \; K& r5 M+ X8 g/ e1 x/ T/ w3 t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明! W! c6 k: M+ Q2 ?
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下& \! A3 h9 Y3 _! c( Y
(不过疑惑的是,为何单独DSP仿真就没有问题呢?). ~: o6 H# E: e0 l
0 v' s- \3 u  x# x% t) h8 j
是不是需要在DSP.CFG中进行配置
3 O; [" p; N5 M/ O我现在的配置为
. E6 y2 B% ~9 w$ l% X9 L, a  v0 L1 A' i/ }: _% M) _8 r" O8 i
/*
9 j7 z1 I1 }2 A+ H' {& l4 @$ B *  ======== Operating System Configuration ========6 `  F+ g6 P$ Z& O8 T& }8 S/ k* V  V, D
*/
8 |" I+ R1 t8 W7 y# I8 ~0 o
3 S: d9 \" D, |7 c4 I6 w/* no rts heap */
* j. g2 A; B( }: b9 ^7 V# K* [Program.heap = 0;
7 O; y" D) ~+ C7 U& @; tProgram.argSize = 100;  /* minimum size */, K1 m/ G3 j- ^6 n; j
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大! O( h8 ~& a1 }8 L9 w2 P

( v' J5 V4 s4 q$ ]2 Q- L& K/* create a default heap */: k5 x* \: g( g
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 `, D, K9 b# @# A
var heapMemParams = new HeapMem.Params();
7 \, i8 |" }& u3 p) d9 sheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
+ F  Q+ a7 R# {
# S3 O- X9 r7 \- N& N7 A0 Z
var Memory = xdc.useModule('xdc.runtime.Memory');0 L. V" F  V" B3 P; S# {$ j- P: J
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);3 E0 v0 B5 s: `: ]! J9 B
" H6 X9 Y9 H/ f* u, ?- v' u1 {
/* configure System module */
: w' a! ~8 o/ U# g  ^& w6 Jvar SysMin = xdc.useModule('xdc.runtime.SysMin');8 _- h' J( I% C9 m% w
SysMin.bufSize = 0x1000;
# P/ I: r; e/ B/ fSysMin.flushAtExit = false;
% [4 x, H; d9 l1 k4 T: H1 E" _8 r9 P
var System = xdc.useModule('xdc.runtime.System');! a+ {% [8 \" w: s5 L7 N
System.SupportProxy = SysMin;5 p! |% _( |/ L+ ~" q

  x) w$ U& D& c6 N  g# U+ {& b/* configure SysBios to use the lower half of Timer 1 */1 u: d" e" m2 k! @8 F2 t2 Z
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');/ J6 ?7 N  }! U
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
" y! R. x' G& E) T9 s" a% i0 v3 fTimer.timerSettings[1].master = true;2 Y' z7 W8 H: X' q+ }/ G
Timer.defaultHalf = Timer.Half_LOWER;0 C" A7 r  g/ k6 k! R8 j/ f% T
Clock.timerId = 1;  n! i. @* u0 [5 z' n

# p3 o/ R2 V$ K! t& |7 j& d/ a, V$ \2 e" }! d
/*
  p, _- z4 F4 j* N( T" _+ d* ]# x *  ======== Miscellaneous Configuration ========
( L  @& G; f- ]1 i  L */
  M) K* Y$ m& B# J% Y; y% H2 v# B- L" b  d% ?3 `
/* set default diags mask */
$ w$ r* {1 O& ]var Diags = xdc.useModule('xdc.runtime.Diags');
  r1 U& ^9 o1 V) ]1 P+ l, m6 a2 Gvar Defaults = xdc.useModule('xdc.runtime.Defaults');
  c- G4 j! f! P  ^9 i: O: N/ R1 s2 A9 Z( i' N* l
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
% n4 w# n. E% H6 x# ?7 i' rDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;4 I- d9 ?' x- A' M' L
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
1 u  _6 M3 H3 b5 s# a" M9 q* xDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */  f/ t% \7 s% \' v6 |
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */: A3 S: D5 d& R3 v9 S# d
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
  |( b5 R  _4 R: G4 YDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
0 {, ~3 c8 U% f; G+ KDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
; T" ]3 k8 \2 C6 EDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
0 @5 D0 K: z" j8 k% P9 D$ eDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
& y0 h8 `. ?4 E- f. ]6 nDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;0 b, t$ l0 \+ ^- b3 L3 U8 r
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;! N* Z! z) `7 _' P4 ?
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;' s  H/ C5 r, v: `. y
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;" `7 D( F- K0 k) t  y

, j, N6 H! t7 P* R/* override diags mask for selected modules */+ Q2 D( e. Y6 x5 l; O8 g# B$ ^% ]
xdc.useModule('xdc.runtime.Main');0 A  w4 J) {# X+ O$ k3 w( ~3 T  P+ n
Diags.setMaskMeta(
* ]. e' p+ W6 C8 W    "xdc.runtime.Main",
' p( j1 \$ }4 s& A9 J9 B    Diags.ENTRY | Diags.EXIT | Diags.INFO,1 Q/ O$ H& ^. H" W, H' N; \
    Diags.RUNTIME_ON% }9 E: a+ H) B& k0 m# N, D
);0 w) l( J% C- m- m
- ?% u$ C: j1 V5 g  |* [
var Registry = xdc.useModule('xdc.runtime.Registry');1 o/ X# W" p/ ^, B$ D2 M9 H9 |
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;' y, h9 l6 N& O, t3 m: D
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;4 b0 t' M4 W! n
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
3 x7 o& B0 Y1 T/ s" }7 DRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
0 c% p" o# \2 U; p* f% g/ K% }; f
  \) a/ w# ?; H' i/* create a logger instance *// w( ]) g5 X- L3 b
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
/ ?; Y+ J4 r: Z/ a; }var loggerBufP = new LoggerBuf.Params();5 ~2 h3 B0 a+ b0 E2 H0 x
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */& X* {) _9 s+ |) ?. ~0 K! G* g- D
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
( I& ^4 H+ G7 U( @5 g4 n& l; [. z. C
var appLogger = LoggerBuf.create(loggerBufP);
* m( q0 \; `3 mappLogger.instance.name = "AppLog_Core1";
% ~" q/ h2 f/ J8 _0 P  pDefaults.common$.logger = appLogger;  Z6 u. M8 g3 D3 s4 I$ ~
Memory.defaultHeapSize = 0x8192;    ) i$ [, t  K4 P# d: C
Idle.idleFxns[0] = "&LEDStatus";+ Y) _1 x/ a) x$ Q
Cache.initSize.l2Size = Cache.L2Size_32K;, H# P$ F3 x$ r% z1 g/ J2 g( D
- ]6 g+ r# U; N; n0 W: S5 x" u
回复 支持 反对

使用道具 举报

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 */7 x3 J$ U: V/ S0 ]2 B
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( |: A+ C$ Q3 m+ P# J; L! Fvar heapMemParams = new HeapMem.Params();
+ T  P1 K* C: Z8 m* z! kheapMemParams.size = 0x4000;
& {) J* I; C7 E' V4 p9 d  h9 d, P
: v! G( Q! w7 h2 _! B+ `4 o4 a- gvar Memory = xdc.useModule('xdc.runtime.Memory');
2 }! l2 e) ~3 K! F9 }& w3 XMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, _. k" A( o  V4 |# i% s9 K3 f( Z6 M& O9 V5 p5 M4 ?5 W6 p" b
我大约calloc  每次共计大小为5K*16bits,
, @4 d' Z! w) }1 @: e7 X; f而默认配置才0x4000、需要改大。
0 p% t. p  W* C! o' v
$ U1 j* }. |3 q* T+ e
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */% P8 N: M; f' T, u* {6 a# `( z) f
Program.heap = 0;4 l; h+ W1 K# k, p3 `; ?# t1 ]
Program.argSize = 100;  /* minimum size */, j- ?$ M" E, |2 C( J! |1 U: s. s
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-16 07:12 , Processed in 0.041567 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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