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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构7 L( V$ p5 b* O' o" y

2 {3 O, V: X0 J) V' F    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2560 @1 A. F9 S2 D) q

- T' W" E: g9 h9 b5 X- k! v0 C其他程序段。。。。。
# ]% m( W9 w8 W7 C: T$ T: N ( z3 k( L4 t, P3 Y! t( g1 V
   free(x_d);
. L/ J+ Y* X8 i0 ^" K/ u
) f. U7 H0 D5 G3 G% C& l5 p& J& p0 p使用DSP侧单独调试功能,验证动态申请没有问题,
  Z2 b9 }. T, `) \  C* r
6 o9 F* x  T% v. |0 m* P3 x但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ C. S& @1 h3 e. R

8 C% o. d: |1 X) l8 X) e) x' B4 O5 O8 O- _
4 G4 X! p0 C* A" |1 P: V; g7 \+ s# a7 o( h" X. r8 J" f

& ?+ o$ {: x7 K* Y9 k4 n0 f, o% F
' b+ z+ B# Q7 N) L7 n8 l, r+ `1 G8 G* O
  ^# M7 C1 q  g) o- L
% i* c2 r) G, b, B. r5 V

% C1 b! G$ ?1 f% P3 ^
% N6 K  n+ v- v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明3 m. G1 g! F2 ]
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
5 Y1 L$ U) P; k: z! i(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 @- Q2 e2 h" o) i

5 T4 z* d& t: _% Q" F0 `是不是需要在DSP.CFG中进行配置! A  V  X+ {, S, ]2 g/ p: b
我现在的配置为
1 g5 X0 u3 Y  g$ o3 A. m( Q' ~; l. P: u
/*
( `) `! x0 O0 {7 D) B+ }9 m *  ======== Operating System Configuration ========! X; X+ n; ^4 O( R
*/
/ Q3 b' ]1 ]! ^1 S5 a/ {0 J+ k, C7 E& R5 N" _
/* no rts heap */) D, O, i1 Q# j6 k; N. ?: k; `
Program.heap = 0;
0 X# x8 y4 `3 a% J* q% U# K  zProgram.argSize = 100;  /* minimum size */
1 L0 f, s: p$ PProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大$ x) ]7 f; ?" X5 ]! g! [$ X7 \/ M

+ O  h; h$ W6 z( i* r/* create a default heap */1 L# U1 k# A' Z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( L0 A! U# y. h1 dvar heapMemParams = new HeapMem.Params();
1 u1 |' R7 i; @5 G4 |heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大& w0 M  A5 s$ x# H

( |/ ~" a! U$ D( b: q# F
var Memory = xdc.useModule('xdc.runtime.Memory');
5 k/ S& t2 k4 N/ ~9 Z& T  z! {Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 q2 K; V$ O, ^* c% t! ~1 Y) B- X3 G0 X; ?. L9 M' Q
/* configure System module */
# S; A! [% ]( T0 dvar SysMin = xdc.useModule('xdc.runtime.SysMin');
$ t5 o0 _% m- v: eSysMin.bufSize = 0x1000;
) T% }# d3 F6 R9 d6 y/ t- {SysMin.flushAtExit = false;
. b0 x& y# }) E" P1 U5 {
6 D# I3 u, r8 T5 lvar System = xdc.useModule('xdc.runtime.System');
# u1 I% }. x- x! B1 K. BSystem.SupportProxy = SysMin;
+ C5 h  x5 L9 g  i' l* s! c( ?$ G3 C, D0 ?! p4 d' t
/* configure SysBios to use the lower half of Timer 1 */
+ v7 q8 j% k; qvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');! V' v/ O! `% P' H
var Clock = xdc.useModule('ti.sysbios.knl.Clock');$ ^/ n1 ^' u0 [+ O
Timer.timerSettings[1].master = true;
% m0 V, X% m/ z" m& W% fTimer.defaultHalf = Timer.Half_LOWER;# M: E5 I5 u& U: [! Y0 z; ]
Clock.timerId = 1;$ F- F( ]8 D; c% r
% T0 ~' E5 h2 H; d1 g& }8 ]

+ {5 Y6 g7 i$ x: W' Y/*
3 F2 s( s: a5 {7 C8 a) L6 t4 Y6 n *  ======== Miscellaneous Configuration ========- a- A# ^! u; [* v, h3 m6 Y
*/. D8 T' K7 |, p6 G

7 O% j+ G9 d% ^4 @/* set default diags mask */
: w) x3 q* @% A2 `2 k$ v1 zvar Diags = xdc.useModule('xdc.runtime.Diags');
- c2 l7 q  ?) Z( [var Defaults = xdc.useModule('xdc.runtime.Defaults');7 Z  F9 N/ h0 x2 O6 ]
1 x5 d4 i! ]  X7 y- e" Z. u& s
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;$ p& u5 i/ j: [' m8 a* B
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  I0 [( I0 f: k% B0 |  `
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
# ?) ?! a# m. n: f# PDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */7 y8 l& N! @* R8 g: X+ e
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */' n. x1 E. a* n0 W) l& O8 i8 H  w
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;0 G! ?& K. s% B# L6 o1 h' ]; _5 ]
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
8 n" T* a( i; X. Y7 t$ Q9 W3 g2 CDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
1 ?7 c5 |: r- T6 SDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;- R& i. r# V9 S
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
$ Y/ T9 I4 g1 M% QDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
6 w$ t- d- _3 i( ~Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;3 l4 E$ k2 Y; F6 K' [! {
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
  w! S$ ~% v( `0 {* ~; ~3 A1 s5 iDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
7 n' g5 i! @0 |0 A6 ~. C/ \' V5 Z7 e& N+ K% D$ G, f- m
/* override diags mask for selected modules */
+ G" O9 k/ g9 k$ w: Wxdc.useModule('xdc.runtime.Main');% I% m, m- a# p/ @
Diags.setMaskMeta(
$ ^$ f0 |/ Y$ u$ e8 q    "xdc.runtime.Main",( u4 J9 {# j0 o  y2 C3 T3 q8 z
    Diags.ENTRY | Diags.EXIT | Diags.INFO,* k5 o+ c9 c3 z# G
    Diags.RUNTIME_ON7 L3 X5 F$ e/ c; o$ M7 q$ r
);
# O3 u4 l0 v7 K6 K- u1 U
$ I6 Q; D& J8 a1 c2 a1 Jvar Registry = xdc.useModule('xdc.runtime.Registry');) V" I5 y* O/ _5 y( d6 A
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  Q9 w: p0 {0 O& ~7 @
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;& @7 j3 }  ?& W& t; Q
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;4 ^( g. W) [& |) \; a
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;6 M4 ]6 z) j* W$ q1 i1 x7 T7 @

6 G1 b2 a7 a+ N5 Q; V" N' i/* create a logger instance */
- S+ k7 J3 O3 Y1 |' _8 ]: p& pvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
/ r! c' R% q( x& j# K! Gvar loggerBufP = new LoggerBuf.Params();
7 _# N- T$ W7 m: |loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */- W' h& N  S& V; G" t
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
9 [) W2 K3 o% N# i  \' H7 G& E
var appLogger = LoggerBuf.create(loggerBufP);
9 X( f; ?0 e6 ^' X, s2 j4 f7 yappLogger.instance.name = "AppLog_Core1";
# O; D2 L# k* j8 T1 F: f4 FDefaults.common$.logger = appLogger;
4 m+ d0 j$ y5 l( rMemory.defaultHeapSize = 0x8192;    2 a1 H  ]0 a' _- ?+ i* N
Idle.idleFxns[0] = "&LEDStatus";
4 N6 P! `. c, C  o6 D0 bCache.initSize.l2Size = Cache.L2Size_32K;! p: [- X; N6 W9 g8 g" A5 E

; T# h! V2 g/ R' a" S/ K: b. s
回复 支持 反对

使用道具 举报

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 */
# J& N/ R$ j% x  Evar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- Q9 Q* l. t; A$ ~! m  Kvar heapMemParams = new HeapMem.Params();# ^$ z) b/ k" U
heapMemParams.size = 0x4000;
. W7 O# a+ {/ T+ E0 `8 S
4 {. d9 d# Y* B# H2 Y& y5 Gvar Memory = xdc.useModule('xdc.runtime.Memory');
# ~7 e1 N  u# v1 w. z$ X; s! L3 BMemory.defaultHeapInstance = HeapMem.create(heapMemParams);' v2 n: ]& X. S8 M& F9 c

3 d5 Z1 ]8 V% w! b, z; J3 x我大约calloc  每次共计大小为5K*16bits,
5 y0 C* ?" }, E5 E6 U, ]# O而默认配置才0x4000、需要改大。4 F' l7 W0 q# W- |4 m; ~8 ~
% C# f0 B4 a% N0 F( G
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
0 Q4 l3 l( [5 C$ h/ VProgram.heap = 0;) g% |* {3 m# ]5 u- A0 g) Z
Program.argSize = 100;  /* minimum size */
! J1 X0 K) x2 E* |' }+ ]$ XProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-16 02:13 , Processed in 0.042443 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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