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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构6 D# ^* |. w8 q) R+ w& H& M" b0 O9 i
* }! m' A  ?' l. ~, {8 _
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256( m/ E8 r5 T9 J- ^0 c

6 ?* r/ W% t% z) _4 s" G8 h其他程序段。。。。。
/ P+ m- d  f$ h( x! U# `& E 8 J5 o2 d9 E) ?
   free(x_d);- K0 C7 a1 r8 x1 l4 B& O
& q- V/ y) j2 \* f  c
使用DSP侧单独调试功能,验证动态申请没有问题,
, h* e- k* V( [6 Q/ ~" Q
9 Z4 `6 Q  @2 [但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。' B* ^: ?$ s$ C% V) e7 B: G
& a  S0 j5 j5 [

2 X7 K' V0 w0 B- a6 Y, t/ e
9 \+ e2 D8 J, f' e$ ~8 ?% y' |) h+ Z: g6 N3 m# x; a6 Q

0 \. O# d7 o- B& S# e( s- W9 p7 P+ U* |( i/ D' W( `
7 C- j7 `  h8 h$ e( ~3 ]  Z) v6 O' N3 t

1 a" x/ a) V! d- n2 N1 ]$ i: S
, \( z7 N5 b; J9 \
3 s5 T$ a  p: W  ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
  ^* i3 X  R5 k% |, f/ B9 k/ n" M我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下9 b1 c, j: d" S* w9 d% Q
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
* s& j) v0 E0 }6 o
! U3 i- {) s$ k6 c1 T# s) Z  B% E
是不是需要在DSP.CFG中进行配置
: i* {1 o6 m, g+ N% [) R$ ]我现在的配置为
+ O# b% j, d9 v# {7 k! w* Z" D; a  e4 t
/*$ Q. i% r* G7 l  }- r
*  ======== Operating System Configuration ========
5 b9 }+ U  _$ c( M/ \  S" R1 r */
- ~0 O: n; }1 S" y5 A, d
+ M3 w: e! L8 Z& D/* no rts heap */
% y5 C* S' ~" T6 ]7 ?) fProgram.heap = 0;& U0 j( B+ E# {5 T1 s
Program.argSize = 100;  /* minimum size */) a1 ~3 u0 M8 x, r% C* `
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大% o8 ~( U0 g  D

+ r) J9 M7 S( ~/* create a default heap */
9 T- _5 i7 |( b8 ?0 I9 hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) K4 ?6 |1 Q: c
var heapMemParams = new HeapMem.Params();
, y7 U8 G5 j' i* `: Q( @' xheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大9 i, \' Y8 p8 x
& |9 C, i" M- i2 Y9 L2 U
var Memory = xdc.useModule('xdc.runtime.Memory');
- D6 G; I5 G$ u9 k, yMemory.defaultHeapInstance = HeapMem.create(heapMemParams);( D9 W( a, U7 E$ W
& w3 i/ x& b$ r4 S1 w) [* j7 V
/* configure System module */
4 A+ O* |& s# M7 O$ vvar SysMin = xdc.useModule('xdc.runtime.SysMin');# W2 Z, Q0 @: y6 ~
SysMin.bufSize = 0x1000;
( C; @& i/ U, SSysMin.flushAtExit = false;
& D1 m  w& }" T' C  G! h3 m4 J3 _4 @
var System = xdc.useModule('xdc.runtime.System');, Z+ i) b+ U$ ^
System.SupportProxy = SysMin;' j" [: P- m' L) Y$ F" _
( g. n; [! U/ b% u
/* configure SysBios to use the lower half of Timer 1 */) q4 z. n, \" e4 f+ K2 p4 _6 P
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
' \8 d- p6 F; w$ l  [0 mvar Clock = xdc.useModule('ti.sysbios.knl.Clock');* ^3 l6 E3 [; S6 G# l. t
Timer.timerSettings[1].master = true;
5 d, a% G: W! S7 _, {Timer.defaultHalf = Timer.Half_LOWER;$ J* d) H' t) N; E, J. o1 c
Clock.timerId = 1;
' P, d4 _  J! {  e& O9 \1 m2 ]: l( T1 Q
( f+ {+ X7 g$ F2 Y7 G; w
/*  i# b4 @% b# l) a* w1 i
*  ======== Miscellaneous Configuration ========' B! k: C& d/ W, v0 S& W% l% o6 ~
*/& N/ A+ t6 w$ z9 @

% T7 O2 n  q) ?4 a% i/* set default diags mask */
: |) o4 k0 t' L2 fvar Diags = xdc.useModule('xdc.runtime.Diags');
" g( E* L. \  a! k) |3 g' R, J' avar Defaults = xdc.useModule('xdc.runtime.Defaults');
, U4 z% g5 i4 L  S) n9 G5 G
- v  U) N, a+ _Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;' M5 N6 v# k5 D! ^
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;/ K7 ]4 D. c3 @$ S; N" q- {: k" ^4 q3 V
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;! T! U4 i6 m7 ]; i! A7 K) A& C9 k
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
- n% E' n) Q6 m7 _* R( }7 bDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
) ]! H! u/ [) cDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
5 \" ?) n% l: G- R3 KDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;8 K+ ~0 P* e& q9 u3 q# T0 I  ~/ q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
; w; r2 m8 b: E6 T1 y8 mDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;. A4 \$ M7 \4 y: `2 B, {% r6 N" M
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;2 m6 Z! s+ ]0 K* b* V) x; \
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;" Z) f: ~) v  L% x
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
1 X  l) X4 l- j0 C3 i) UDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
; N3 Z" |2 b4 h  d* X( [. B5 zDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
( J& o: n: n& l- f4 o9 A  n) E' x2 d  _# l* [; A8 o7 ]( ^
/* override diags mask for selected modules */
% z$ I2 d5 ]3 L) G2 y3 [) r1 [8 {$ ?; |xdc.useModule('xdc.runtime.Main');8 E) R, q0 s3 J% C& A5 n, L; w/ y
Diags.setMaskMeta(
, r( j9 k6 ~" e7 s" [    "xdc.runtime.Main",
  u/ u, k+ |8 m, w    Diags.ENTRY | Diags.EXIT | Diags.INFO,) I, J, P8 q1 o; A
    Diags.RUNTIME_ON% a. W! [  s' t- I& F2 _2 |5 C
);
& [/ N. Z$ V# H8 @# d* D9 x, |: ]$ F* C% }  v$ ?7 u
var Registry = xdc.useModule('xdc.runtime.Registry');
( g' }/ ~" }/ @! H; ZRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
+ v: ?4 d$ H4 q+ f, q- X5 HRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;$ i# A/ J. n5 X: U: o9 K# _
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
( _) n7 E; g! `4 ]; U/ jRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
; v$ E* {( j* A, @
) x" r2 B' V5 ~2 @: R1 k/* create a logger instance */5 U  h2 @( P5 o
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');, Q" Z# {' A; e5 q) R
var loggerBufP = new LoggerBuf.Params();
; A& b5 u4 x6 b8 Q$ KloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */5 p# v/ W4 Q2 x, ^
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
+ {, U+ _$ U4 z, Y( K
( U3 [9 W3 D* `4 n0 Tvar appLogger = LoggerBuf.create(loggerBufP);2 Z: V0 H) Y6 Z% g/ H( ^7 H
appLogger.instance.name = "AppLog_Core1";
: ?/ P. F. B2 a6 ~% rDefaults.common$.logger = appLogger;7 C2 h$ d; E; I6 B" J6 e
Memory.defaultHeapSize = 0x8192;    7 B9 U' d  \7 |! I* G
Idle.idleFxns[0] = "&LEDStatus";
( Y2 Z- S4 b9 j2 g0 ]Cache.initSize.l2Size = Cache.L2Size_32K;
! y( Z2 q: u8 f) E. R1 H
* `! j5 Y% D& n) l* h
回复 支持 反对

使用道具 举报

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 */
0 S7 Y$ ^% L* w7 o  _& hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 A4 M# F) p, e/ ]
var heapMemParams = new HeapMem.Params();
5 S& o/ ?5 G3 D- c+ R8 b- a# Y2 zheapMemParams.size = 0x4000;
: K% y9 F7 G) v5 T$ Q
! D! v1 c0 @& M/ ^* u* T6 J' O$ ]var Memory = xdc.useModule('xdc.runtime.Memory');& X) E+ }- j& \8 r0 s
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& Y1 |$ z" D" O4 M
( a, x* Z$ a) m% ~# Z4 N: T
我大约calloc  每次共计大小为5K*16bits,
* O* D& W% z2 Z" F3 x& S) h' A/ t而默认配置才0x4000、需要改大。
6 J- @( ?" }9 r( [4 t9 r% \' J( S7 b  @* S' z2 S
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
  V8 e* a: H( M3 bProgram.heap = 0;
" {* @( _* q* |: K: ~4 r& N! aProgram.argSize = 100;  /* minimum size */3 \) S* E! Z7 f/ e2 U, `& I- U+ j
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-18 03:17 , Processed in 0.042311 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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