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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

  ^  g( e3 ?+ d- c    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256$ A( O" x" E( \$ r3 w3 `/ ?( S2 d
, ]$ d; R3 K5 A: q
其他程序段。。。。。, ^6 b1 V' k' N: E* |" Q
1 ]' a7 |4 ?7 c; S1 W
   free(x_d);$ Q' u% ~  ]4 q$ x
, A' W8 e- j" B, ^7 d: R) ]# J
使用DSP侧单独调试功能,验证动态申请没有问题,
: W$ Z0 q3 u. p( j1 L& I
* W4 P2 s  @$ h) o但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
+ }4 P4 S# v1 |1 q

1 C+ s  k1 u9 e; U+ p" y/ ?' W2 c  y7 F6 f, Q+ t" @

/ y  `. M1 A/ L
$ l% b: g3 L0 w. j
. i/ u% v: h; j& J: p! M  D0 }# Z; M, P: v( E/ q8 I7 p; B: N
. t! g) F) q, e- d# G8 C( N1 y
* P. ]3 _2 {/ T3 Z

, k! k. q# [. a0 f, A
1 K$ ~! A; n9 C& S, ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明* ]& E, N. s' @# H" V2 ]
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下5 ~1 G' [# E2 r
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
2 o* U& R, U! z
6 K7 I- H- N1 J" W8 Z( z
是不是需要在DSP.CFG中进行配置% O& R/ g' ^5 u2 r# W
我现在的配置为
/ ]; Q- v( X! E5 }- c9 v" l
+ Z  [% l- U2 H6 V0 D& {. i; O/*$ d! [! h, B& s5 k
*  ======== Operating System Configuration ========+ O$ R4 b, V5 _% a/ O3 w8 K
*/3 L4 ?9 r, u; w; @3 l% C- z; Z

9 A! r7 x; K4 E# {/* no rts heap */
- H5 `* G9 J; j6 yProgram.heap = 0;' z; C: B6 R9 b8 v3 v, n+ E
Program.argSize = 100;  /* minimum size */
" h, S: u3 j6 V; s, z6 Q. uProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大+ j0 G9 |+ {  i  b5 D# ^# `

2 C) y' _4 m0 ^' l4 k6 w5 d/* create a default heap */
: P9 O; z8 i  u" Q/ m  jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 ~2 z1 ]* y- d+ C7 O6 Mvar heapMemParams = new HeapMem.Params();6 ]5 I9 H" n8 Y* F& i$ i4 v- c
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
6 ?& F" H- t' j# P' F/ i" ?9 }0 V* Y0 K. w: b& X( v8 w8 Q
var Memory = xdc.useModule('xdc.runtime.Memory');: o1 W: Y, I- q) H8 f  Q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);! Q0 K) H+ m) @, S" d8 l$ Z

5 A( y7 {! \* l/ N* t/* configure System module */
" S2 F, }$ h: a2 o- u- nvar SysMin = xdc.useModule('xdc.runtime.SysMin');; F, Y+ f7 X, H+ t7 l
SysMin.bufSize = 0x1000;% }) k" {* S1 T3 B/ t
SysMin.flushAtExit = false;( P6 ~0 B7 A: }2 l
1 k6 X3 E( _: W: r" `( E" w
var System = xdc.useModule('xdc.runtime.System');% W3 o' E; ~6 M( o6 y
System.SupportProxy = SysMin;
) F$ v! w+ z. l. Y% `" t! I% J* S
8 b+ i, Y- _1 y( H1 h/* configure SysBios to use the lower half of Timer 1 */$ I2 ]/ d& l: |8 z
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
. t4 d2 ^6 Y% o: k  ^8 Qvar Clock = xdc.useModule('ti.sysbios.knl.Clock');$ j; `8 Z! v! i4 e8 P
Timer.timerSettings[1].master = true;
7 e$ C$ D* s4 Y, q4 S( KTimer.defaultHalf = Timer.Half_LOWER;
% c8 J$ p1 R: ~; R& G- Q) A  _( PClock.timerId = 1;
9 f: J2 j5 I( j4 W; u5 n; b0 a* M" Q9 b! \

% A4 Z! z! z0 h* M" Y/*
+ M& x7 i- q- o4 c! I' q7 ^8 H *  ======== Miscellaneous Configuration ========
# O+ e& w* Z/ Y7 X  e, W7 I */
2 C5 a9 Y$ {2 t5 y4 d, K  b5 ~- {' P% ]  l' c. a3 y; u
/* set default diags mask */6 m- C+ h+ c8 \6 B& o0 K
var Diags = xdc.useModule('xdc.runtime.Diags');
! [5 u% p" _, `var Defaults = xdc.useModule('xdc.runtime.Defaults');* j; [/ P/ g; a! W
( J' D% o, E* z( G2 `1 H' L5 W! `
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
* @  J0 C# M* z$ p1 d7 r  NDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
1 ?$ O6 @9 C( y, D( w& i7 JDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;0 o- T) ^3 b8 H  z
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
# X7 r: G3 a& D7 v/ }2 M+ jDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
# m  e( H; X5 |+ m! T( [: {Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;+ D8 S$ }8 U; y
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;, |4 g- i, Z5 a. l8 q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
8 n( X' y# g9 q* ~6 T  MDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;7 B" B$ x* c' B7 ^1 y
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;/ b! ]4 b5 K* q+ l  V
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;( h8 L3 C2 r( E8 V* B" h  {
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; j0 h- a1 \" H% D& x; B  E, ^
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
  n; J) a+ g9 N! h5 c6 J" y$ r$ cDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
" t' P: {) ^& I  g: ]6 p- v$ i( Z7 W2 D! R& a+ a
/* override diags mask for selected modules */, n. |+ x# }, C9 B1 }
xdc.useModule('xdc.runtime.Main');7 I8 h7 i5 T9 x
Diags.setMaskMeta(. f0 p; u9 x0 G
    "xdc.runtime.Main",! a* N# C4 I# q' f
    Diags.ENTRY | Diags.EXIT | Diags.INFO,, ?! D5 _& P2 G% n& H3 [- R
    Diags.RUNTIME_ON
- H6 e. ^* g6 L0 B+ v);
0 c) g- `0 G. H, u* C5 c# a7 |5 g; V1 ?& s7 ?
var Registry = xdc.useModule('xdc.runtime.Registry');
, b+ E7 c/ `1 C, }1 ]$ CRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
3 s% A' A) U9 K( ^  O2 `9 TRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;$ b- N' l/ A5 i7 s- o6 w
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
& L& R4 X- e, _- E' HRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
3 ~7 D  b' ^4 j' o: w1 P4 o. o9 @' |% R# B2 @$ d
/* create a logger instance */8 F6 g' M: z6 I6 @; Y
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');) d% g6 Y& r: `4 R4 X. e/ S
var loggerBufP = new LoggerBuf.Params();
2 G6 Z4 }4 z0 `( k' a; b: |+ UloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
% T; J2 r# U4 b, \# q  I. {9 }9 p% F6 \loggerBufP.bufType = LoggerBuf.BufType_FIXED;. i* |& t9 G3 F; z5 B: Y* s/ V$ v7 `

( q+ _) n4 o# Evar appLogger = LoggerBuf.create(loggerBufP);9 k) H- `5 P3 m2 |3 d, M
appLogger.instance.name = "AppLog_Core1";0 J7 u/ f% |; I4 X4 A4 m  z
Defaults.common$.logger = appLogger;. @- _5 F+ B0 X$ v
Memory.defaultHeapSize = 0x8192;    7 x. J* a- I8 F) ~! |- X
Idle.idleFxns[0] = "&LEDStatus";5 k. F) }7 Q' x# G
Cache.initSize.l2Size = Cache.L2Size_32K;& N7 ?9 b) K$ e# a7 h% y- S
6 E* B0 s1 i# U+ P& p
回复 支持 反对

使用道具 举报

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 j* ], V) U  ]) a- X" Z, H& e* bvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 V& x% b5 x. u2 g- p, a
var heapMemParams = new HeapMem.Params();
  C; ?% J6 ^6 N! t6 cheapMemParams.size = 0x4000;
1 B1 @0 J9 {* G7 W* P8 E( b+ K4 x% j/ E2 e) h+ ]6 {: x9 b7 ?
var Memory = xdc.useModule('xdc.runtime.Memory');
5 \& C! `; S; [% b" u' GMemory.defaultHeapInstance = HeapMem.create(heapMemParams);! s& Z2 u- X) [

! \4 l7 x7 B% O2 x3 }! Y我大约calloc  每次共计大小为5K*16bits,
8 ], O, t  i1 T7 ~" |3 v5 t0 O而默认配置才0x4000、需要改大。- m% v0 B0 ]% d5 }6 }1 {* n$ B
* K1 R& r: P" u# C. n
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
4 ^0 {4 n0 P& o, M- iProgram.heap = 0;
; M! o* f) g# W" u4 z, ]$ c4 `5 aProgram.argSize = 100;  /* minimum size */4 _% D7 p% ^+ B9 {2 q  s% J* }7 D
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-8 07:51 , Processed in 0.041356 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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