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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

  o5 k9 [4 j3 M5 F% o" k# i4 ?6 ^    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
) j5 C* |- V! o2 |
' _" N4 L: e1 \其他程序段。。。。。
, V5 Z1 X2 h, Z8 E6 e- e
$ v  T$ h( q8 i8 M# Q3 V   free(x_d);) E8 i7 O& N' _) z2 L- {
; f9 a+ i' D2 Y- s5 |% O
使用DSP侧单独调试功能,验证动态申请没有问题,
) w  N; |5 W5 U$ V0 }3 u0 V2 H& p
2 v# o" r+ p) l1 b9 r2 D, a  q% ^但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
6 D6 h3 l4 K7 T) P; [8 y
' H( X/ y3 H- N& s6 e

% N# k# J5 v3 `9 F: r7 F2 R+ H% q5 F% ^- U5 w2 m
% N, w: h: R* u" n4 T' V

+ }& }+ Z- T7 i, h% n9 U7 a; q
$ q) R& u. H3 ]" ?! y; R
4 D, O. Z! `% o6 R/ [' r+ n9 |1 d4 p2 J9 G( b/ _
4 D' R7 o: N9 B8 l. Q. Q
; F$ g6 c5 J4 E. p  \! C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明2 t) Y1 W1 a1 I4 y" q8 ^
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
& L1 b4 o3 U- q& t(不过疑惑的是,为何单独DSP仿真就没有问题呢?)% [. v. J& H: [/ `* ~

3 R% {7 C6 ^3 a- d$ {. V/ [* W. @是不是需要在DSP.CFG中进行配置8 `( c* o3 r8 J' A* G/ [4 k" Y
我现在的配置为
) K1 Z% V- H" }) S, u& B' u( U% w3 {% b3 b5 B; R
/*
: a, T  D+ X# p, Q: N# j! P; F2 O *  ======== Operating System Configuration ========0 f. s+ E" P- `' b
*/
0 x3 e- a" D  K4 _9 L5 Q$ E9 T( f8 J" o7 m: ~8 I- o
/* no rts heap */
- e$ _9 P* }! G, P/ Z3 ^Program.heap = 0;, y7 l9 r$ o/ E! n1 r
Program.argSize = 100;  /* minimum size */
1 X7 T5 K) w' x- Z# M4 v; WProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大) L9 M5 T1 I. a2 y) d
  V! E& ^* E, I$ n
/* create a default heap *// C9 `$ r) n3 W4 B
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' p  u; S/ l. f9 k
var heapMemParams = new HeapMem.Params();1 Q7 |0 |" R/ |  L# e" D$ _2 h
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
' G8 R9 q& ?1 p" N4 B/ T7 R9 ~8 g3 A& C' ?
var Memory = xdc.useModule('xdc.runtime.Memory');# F6 s9 j, k6 ~
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);8 ?* l7 k1 ?) C

9 o" z; w+ @0 S! A( c/* configure System module */
1 V: x3 I! a5 b$ Uvar SysMin = xdc.useModule('xdc.runtime.SysMin');
; F* {, `8 L4 G9 Y' S* u- ~SysMin.bufSize = 0x1000;: B, ]: M+ ~2 t  }6 n# Y
SysMin.flushAtExit = false;. O" v- H$ n( A9 c: j1 U% D' A' ^
: ^/ |" ~1 ^% u" f; p
var System = xdc.useModule('xdc.runtime.System');
" t6 X' K3 ], o0 N! l" x- zSystem.SupportProxy = SysMin;
# n' }- g- c4 K3 k9 d) D! D7 ^$ p
$ C" O0 y# _9 D7 L0 G+ i/* configure SysBios to use the lower half of Timer 1 */4 Q" A6 V! g/ i5 f* {* K
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
& V" e/ T/ Y. p8 W) U0 Y- C% bvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
- [" n* {* o! S- U3 v' {Timer.timerSettings[1].master = true;1 B: c9 Q0 P/ K! L( d5 o
Timer.defaultHalf = Timer.Half_LOWER;# I/ E/ s9 `& |/ O; \
Clock.timerId = 1;3 ?( ]' y3 \# `) [: Q! u

! _( A7 W* ^) E
2 x6 o7 L7 U+ ?2 u- [: E2 z$ |) G/*
: O1 h0 n  D' Q- M; n6 e *  ======== Miscellaneous Configuration ========
0 I' M' H+ Z' Y( s; K2 d8 g */! x5 q1 }0 r( N6 T

+ e2 ^/ g3 y- U. f: a9 {: ^/* set default diags mask */
1 A, h) n& |5 Pvar Diags = xdc.useModule('xdc.runtime.Diags');& k9 U7 p; p) J% s2 Z% q, Y
var Defaults = xdc.useModule('xdc.runtime.Defaults');
$ W  W2 g" W* e2 p
  i% I: P2 v) o3 t5 IDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
2 T. `6 {# S3 ~7 a' A  XDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
. I/ j$ d; l* a1 IDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 p6 z) h7 n; J! t9 D
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */6 ]6 p( K" M$ }4 M' R
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
1 D/ a6 Q: F: Q& PDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;2 i4 P6 @. V% b
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
2 P! s* Y  O2 O6 E  A! y% BDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
) U8 b* k: c9 s7 ?$ d, Q# yDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
4 n# {" j# B; \# U! EDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
2 J8 @0 B9 Z4 R, Y* c  h' _+ {Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
8 z- r  c: D9 x( GDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
" O5 r5 d" |% A4 UDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
* A& t; Y/ ]8 \, C9 h- M% ZDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
7 _9 {, I: H0 o5 u: _2 O& b, C9 [' [
* }3 \& w/ [. F9 D/* override diags mask for selected modules */
* V. H. f; x! d5 @/ Sxdc.useModule('xdc.runtime.Main');" W+ _% r5 }9 L' J3 }+ L
Diags.setMaskMeta(- w3 t, U! f0 t/ W" z: U( W0 E
    "xdc.runtime.Main",* e4 U6 g  C5 j7 `; H
    Diags.ENTRY | Diags.EXIT | Diags.INFO,6 p) \7 j% G: b# H4 I* K
    Diags.RUNTIME_ON
& u& a5 V9 {+ u);( Z+ L2 c" F+ G/ F

- J* _. `" h. ^; Qvar Registry = xdc.useModule('xdc.runtime.Registry');  D, `7 A! N# u# B; C3 ~7 _4 t# O) T
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;6 @$ Q) z* A) @* X! J; G1 C
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;* v6 P8 N3 u2 h# [( \6 b+ L( t
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;( q2 D7 G  L4 y
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 i5 D* L9 v, P/ T- Z- p

4 D9 e1 A3 \+ V; z0 F# D# v; |/* create a logger instance */& X5 o( n' b9 [
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');. Z. c" R+ \/ s3 i8 l+ d
var loggerBufP = new LoggerBuf.Params();* {9 E2 @" }, n& m5 |" X
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */" M, \4 H1 l, n" k
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
5 Q+ F* j0 C. z! {* t
; c" S" }* f9 rvar appLogger = LoggerBuf.create(loggerBufP);
* B/ |5 G' ]2 [7 z% aappLogger.instance.name = "AppLog_Core1";
3 p7 @' U1 c6 X/ a  |Defaults.common$.logger = appLogger;6 X6 A: E% X5 Q+ [
Memory.defaultHeapSize = 0x8192;   
' Q" M( M8 f9 I" \% X" X# ?5 y  oIdle.idleFxns[0] = "&LEDStatus";
+ s, A# \; R2 i& G8 QCache.initSize.l2Size = Cache.L2Size_32K;
2 C( y; {) H; T: R6 V( |5 |! e) c' Y
回复 支持 反对

使用道具 举报

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 */
  U" W) M$ K" \2 W6 a" @+ R& h. Xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' o/ Z0 `; d* a, u3 C  v8 ~# T
var heapMemParams = new HeapMem.Params();
! v' G; f1 Q+ F5 IheapMemParams.size = 0x4000;5 N" T& h% D5 f! a; ~

" C; i1 ]7 ]; _8 Yvar Memory = xdc.useModule('xdc.runtime.Memory');
6 g& J7 X' \& D' gMemory.defaultHeapInstance = HeapMem.create(heapMemParams);/ ^* N4 H0 F2 L  |, Z1 J
6 e4 T& a9 `. d5 b1 v
我大约calloc  每次共计大小为5K*16bits,0 B& M. u9 A6 D" L6 I- {- H
而默认配置才0x4000、需要改大。* N, d7 p0 X) e7 a; ^% I; N; T

( c, M# M0 Y' e; X6 d8 z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */8 l# t1 F# @4 E' U. |
Program.heap = 0;/ U6 @; X( U8 O# J2 `
Program.argSize = 100;  /* minimum size */' o; S  c: B4 U
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-22 09:21 , Processed in 0.043744 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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