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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
. b3 B1 s3 B1 v" W" m' I8 e3 k! }
, G$ t3 T$ U& n$ p8 W! Z    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2563 K" {' d6 [3 i) ?% L
7 {- S- ^! `. O3 U& p
其他程序段。。。。。: G7 q: i) W8 s. a9 \( t
. z/ b" D5 [: P0 g; ?
   free(x_d);
3 s/ q6 v$ n( b% ]6 P3 U4 \2 {& n  B- y# J/ Q% Q+ V/ T2 W
使用DSP侧单独调试功能,验证动态申请没有问题,
8 c9 K4 O2 [4 E( p4 T! P( o0 f/ |% ?
9 _* W3 g' _, }5 {- Q但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
% _$ F% x# I& a; _! s( a0 s
1 d8 [! B) B$ y

4 C2 K. H( R; O
9 H: [1 F2 j/ w# c1 ?1 B0 g: _3 ^% g9 J7 @/ o/ @0 N$ D2 \

  G; o* K* G# g8 P- V3 z- r  d* z. P
+ D' M) j2 M9 M6 X% @0 y

/ o% F8 V3 C4 q9 t9 J# w$ y) `
6 e( b; s2 A! T5 c8 h: H  s1 M& m1 _7 Y0 B2 E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
/ l8 q6 n) O. @+ \$ S* j+ jProgram.heap = 0;
3 P. {6 J1 K, I# l  RProgram.argSize = 100;  /* minimum size */
7 n/ F" Y: P% j- e3 HProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */$ r4 G  W* Y& @! u& t& Q& j
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# }# c* i% s- G. |* K, avar heapMemParams = new HeapMem.Params();
  j* v: b/ I# l1 n; q* Q  M5 ^heapMemParams.size = 0x4000;
- b9 W- G/ y# V3 ~! h7 D0 G" x, J
" S+ |/ |3 j' q5 V  W0 t6 jvar Memory = xdc.useModule('xdc.runtime.Memory');
$ i0 }+ c3 s/ V* C! o+ X6 a5 YMemory.defaultHeapInstance = HeapMem.create(heapMemParams);1 l- T. K: I. d. H: }& V5 ~

8 B4 H9 V) }6 Y  F" Q6 R我大约calloc  每次共计大小为5K*16bits,
: {  w! ^: |- U$ v* t, J: D6 G而默认配置才0x4000、需要改大。  a! J6 U7 Y' j

6 d. M- R( Q" q+ q
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明9 W1 q% ?, G  t2 X2 T/ i/ D
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下+ }% i! L* }# J" R( e: n# x/ ?
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)5 @, h1 s) _! z* d2 b- _% h1 a" I

+ P  Q% A) a) ~/ ^- J是不是需要在DSP.CFG中进行配置
! P+ E( s7 o: n( a7 W2 Q0 D' J我现在的配置为1 S/ {- r  M5 X$ S. U
+ m" N) i6 b& @2 t6 k
/*$ y4 @* L$ u# y& `- }+ C4 h3 `2 R) A: `
*  ======== Operating System Configuration ========
0 Y1 K; {% I$ j( P: d$ Z) B4 ?* H" ? */
! A: r) i( ^) d( d, v) \4 x3 \! m% {  G1 N) ~, _
/* no rts heap */
. h4 s; ^) i% D. hProgram.heap = 0;! L: y" U1 j5 g1 G  w( P
Program.argSize = 100;  /* minimum size */$ C1 |& p+ _- }1 |- A" U
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大2 P! z; [& y; _. e# l) V+ b

% [' @: f, @3 T' {  K& K4 a4 v/* create a default heap */
% R  L( l4 i7 i7 jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ u: L) Z4 U9 S4 qvar heapMemParams = new HeapMem.Params();9 Y: \% v" H  w- T  k+ O
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大# _" }' O2 n, A; ~
( [- V$ i$ c( `+ x# K+ N
var Memory = xdc.useModule('xdc.runtime.Memory');
" v, t4 y8 K' }  hMemory.defaultHeapInstance = HeapMem.create(heapMemParams);/ J# ~3 P6 a: M

, A4 R* H- b2 M) d8 W/ p/* configure System module */" c, z7 D+ @! o8 r
var SysMin = xdc.useModule('xdc.runtime.SysMin');6 J( h( v* ~! h( G4 c/ q9 B6 p
SysMin.bufSize = 0x1000;
3 p5 x! N+ P) |; o5 h8 D) D3 ]SysMin.flushAtExit = false;
' F' N6 q* U2 \  ?2 s* |- h# ]  q; }% g0 u7 N
var System = xdc.useModule('xdc.runtime.System');
2 ?! c8 T3 H) n8 v' @3 l. BSystem.SupportProxy = SysMin;
- {8 i, S* g9 r# P1 N( U
6 O+ H6 f9 ?5 U0 i$ x/* configure SysBios to use the lower half of Timer 1 */
+ b( m) Y, ^& p7 wvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
2 |4 C) x6 I4 I2 w- X: Kvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
( l; `3 B1 K! c2 r+ QTimer.timerSettings[1].master = true;
; ^: w( C$ |+ x) D! [Timer.defaultHalf = Timer.Half_LOWER;
2 ]4 E8 b8 H0 s4 A) |3 b- F0 h. LClock.timerId = 1;% w+ Z8 z3 O, L" {
, [" H+ M* U! A$ g6 y, \  a, t

4 k) Q1 p& d# S' H7 ~' e/** `0 B+ y! `0 A' B4 k2 [! {8 a; F; R1 W
*  ======== Miscellaneous Configuration ========
3 P: {6 {6 x& `2 U( l0 ], a */, z, M( b! a5 ?
2 o/ e; L% P' w6 J
/* set default diags mask */
6 i  u7 B2 I+ j+ z3 |. r( L7 z: K3 @var Diags = xdc.useModule('xdc.runtime.Diags');5 S! \0 ~* f. X& p1 y. G( M
var Defaults = xdc.useModule('xdc.runtime.Defaults');
3 O; E9 L  ^: U3 I% h+ c
, e, g$ |3 N9 h" B! A7 y) kDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;1 c; f# @8 `* A4 e& f
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
9 T" U6 ]9 U: j2 [Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;8 N9 ~" P' Q+ a
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
% }: o* l: S# b) H$ o" XDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
5 A. T, Y6 }" _7 b  fDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
" S! b0 Q! |% d3 N" K* |2 uDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;, A; l6 _) \$ w( d/ z, Z
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
9 ~0 F3 T" K- D1 _$ q% [: ]; _Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;6 N9 r* T& }/ [( @# j- h3 n
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;4 _4 ]3 ]% Y8 o
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;! f# z5 m! q6 i; S! d
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;" e4 V. Z- j8 V* D0 }* k
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;" S* C. l! B* V+ @
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
% U! }" y  U1 [7 x( q+ a
0 V$ R1 `+ j0 b7 j7 O9 K& d/* override diags mask for selected modules */& d' \4 Y" K5 V  J( f8 W- j
xdc.useModule('xdc.runtime.Main');
7 R8 W( O# E4 A! j4 p5 ^' B  s+ oDiags.setMaskMeta(
2 f# H1 k) @$ c8 U: p    "xdc.runtime.Main",1 |4 h' S3 U- ^7 C0 v, W
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
% _$ g1 |# d4 A( m+ b9 c4 L    Diags.RUNTIME_ON
* o1 Q7 S- J9 v);
3 [: }% u: N# m8 m# f5 H5 c  B% b& b% a% z9 [7 @
var Registry = xdc.useModule('xdc.runtime.Registry');2 ]+ q' w6 Z) L& s
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
$ P8 N8 y; ~4 }# a( \Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
$ g. S9 j) I1 t( V% PRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;* H. X" E9 L2 T% e
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
7 a' X# c. Y7 c9 Y9 O( c4 D/ ^" G! Y# }, ~' l, X7 f0 J
/* create a logger instance */; g2 a, k$ y/ ]- W
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
' z6 o* o5 g: E, K8 G$ t/ }var loggerBufP = new LoggerBuf.Params();: `8 K2 p7 ~) T) N. w$ T
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */& p1 E1 g8 K" [! r2 X- l+ b& \
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
/ H% a0 w( k. C; \' `" V; }- ?5 K7 `( N
* }, A% H- H4 x; J# k/ uvar appLogger = LoggerBuf.create(loggerBufP);, L- ~8 J+ U4 |0 m# ~) d
appLogger.instance.name = "AppLog_Core1";
) ^& w! d2 v  N( K- }/ u2 n" a, W; Y/ XDefaults.common$.logger = appLogger;; \4 ]' H. z+ j; \$ P
Memory.defaultHeapSize = 0x8192;   
% F4 B' S% K5 L4 W7 @Idle.idleFxns[0] = "&LEDStatus";" ~# m3 \/ L9 o* j. T# E
Cache.initSize.l2Size = Cache.L2Size_32K;
) {; H" }6 ~& c; K8 y$ D* Z& M
7 Z( u- ~8 w$ `
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-24 06:00 , Processed in 0.041544 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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