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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构, f1 J0 U2 s, j! T7 b
$ F/ D2 h2 r3 D! K3 B
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
4 r7 N, D) ?1 @2 w
5 a9 d: \" Z4 N) s" F% b9 r其他程序段。。。。。
& r. T: t  x0 G" E1 n" F$ x+ X. [" y/ i
0 y% p3 y+ h7 K% R3 _   free(x_d);0 b! m  [2 H, r9 q" `# E

. k* `: f  K* t使用DSP侧单独调试功能,验证动态申请没有问题,; d0 [6 z8 {, j4 x
) m1 @" ^+ e& P. F1 D2 f
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 z" X' F0 v0 Y( P+ s3 [

' G" o3 n0 h. C* e/ f) S$ ^$ q
6 q0 P2 I# H; b! R8 g& `: `8 T
: R. d& d6 Y; w
+ O3 \- Q# C  h# [1 N5 R3 k  h
4 D1 D$ g* ?. \. l! F' H
. |, x$ H$ C: |- y. B- K. H: G
+ I( ]1 l) D2 [8 |
0 u. R9 F! f' [# F4 J: Q) B' z
  T) f6 t0 \0 _2 {0 e; ~2 N  k, z1 @3 c" Z% i- d4 T. l7 l0 o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明! Q$ @7 Q) z; p, V4 x$ X$ q5 a# Q: E
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下3 N6 H1 ~: t. K
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
% _! W, \3 B- S0 e; q0 @

) ~4 X$ M- Z9 ~/ B6 \& p1 s) J是不是需要在DSP.CFG中进行配置( g5 P& d/ z4 k* n  S3 ?% Z8 P* P+ E
我现在的配置为
+ c9 f4 B7 j. K" d& W9 l: h- B2 w2 \5 q2 y+ X. e" V: S* r
/*- {+ k" j# V# M  Y
*  ======== Operating System Configuration ========( `, h: ~" W. P4 r" P
*/. p. K  J) T7 n" y/ c
8 K1 E) `" g) Z; \
/* no rts heap */, d( d) t, c. ]  }
Program.heap = 0;
5 B) t, w/ `* ]& [Program.argSize = 100;  /* minimum size */  d  e3 p) Q8 Z6 J5 e# V
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大  E. X. k5 J( D% N1 j

+ ^+ j, I/ W/ s  i5 n& r/* create a default heap */+ ^0 f; M& N3 ^; J) Z+ ^( U  V
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ E- T# ~7 i  }: w: Z, T) P* q
var heapMemParams = new HeapMem.Params();
0 u8 o2 J* `4 O8 @* NheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大3 ?) K2 o! r1 U; W- a8 J
: l, I7 h5 ]3 V5 k* Y
var Memory = xdc.useModule('xdc.runtime.Memory');
& u4 k" W; X$ r# \' RMemory.defaultHeapInstance = HeapMem.create(heapMemParams);$ p( S& Z+ ^. H& d0 a
. `( k2 O; M5 W# u: U6 q+ C
/* configure System module */
; y* W5 O! g4 l8 X3 Svar SysMin = xdc.useModule('xdc.runtime.SysMin');  g" m# H& C, g* ]# G3 P
SysMin.bufSize = 0x1000;
6 [. B# N8 A1 x  aSysMin.flushAtExit = false;9 S5 E- t. k- Y& t
+ h, x1 L2 Y+ H8 R% \
var System = xdc.useModule('xdc.runtime.System');
7 A+ b  ^9 n/ M; b& ?1 f3 VSystem.SupportProxy = SysMin;
7 O! l- w( v5 N1 `$ o8 T! Q( L5 {
/* configure SysBios to use the lower half of Timer 1 */( J" p, j5 b6 T
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
* m% }: C  Y# Rvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
* @9 d$ G5 b+ r9 eTimer.timerSettings[1].master = true;+ M3 e, |3 w7 A5 @' e8 |* b2 e
Timer.defaultHalf = Timer.Half_LOWER;$ f: Y/ y8 l: }& B  [3 ^$ E: ~8 O
Clock.timerId = 1;, u8 W& H! t; F+ D3 D2 e

, f9 T0 _1 f4 ]; b- W9 o0 @; |6 i3 p, R( @& h. p
/*$ \9 @! d8 @. |6 I0 @5 Y8 b
*  ======== Miscellaneous Configuration ========
9 _9 Z9 d3 T" z8 D+ h */7 i" J# e% t9 R% X* T! `

' F8 _3 o7 s0 i) \0 ^) i7 o/* set default diags mask */7 y( S. ^% h2 N3 u! v
var Diags = xdc.useModule('xdc.runtime.Diags');
' J  I- U" r! r  ]+ U: {var Defaults = xdc.useModule('xdc.runtime.Defaults');8 P1 X/ y0 n$ |; K3 e

/ V6 I+ b5 P! Y8 _+ `" ]Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;% a. B, x+ [8 \  C# G. s
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;' O; b7 v- ~; n( _& k
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;$ z# b2 i9 J/ V( L
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */7 ]' N3 }+ O2 Y" }  I/ V' `; X
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
! W  f5 F9 i& s8 ?/ k  _2 kDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;' x5 K9 K- B; c) O1 r
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;& i' U( |: ?5 O' K3 L
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;3 m! X9 s6 b+ _2 W4 F, z8 ?
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( A; R: `; W  J; H4 y
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;) K0 a; R. J4 \* U9 G7 J/ L3 N  l, H
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;. \$ g4 Y9 t/ @" {1 F, Y! O
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 K$ Q4 G7 U) j$ H; KDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
5 \5 L$ ?+ r  ]$ }, H' FDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;! ^$ _9 ]: Z( L
! s9 ~! v0 f8 b" c
/* override diags mask for selected modules */
0 @* Z( a$ ]1 V% T' k1 b+ p/ ~xdc.useModule('xdc.runtime.Main');2 W* |3 L. W1 ?" r+ k  t- _" W: @
Diags.setMaskMeta(
5 {% z- N* r3 g- l& V    "xdc.runtime.Main",4 E+ H, y1 |( ~% M9 A8 q/ `
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
, D1 A) y2 X# l# x; {" b+ k    Diags.RUNTIME_ON
0 @8 Z$ d7 _: s);
8 c9 r$ K+ e5 b% E7 ?+ D  r- e8 S: D5 e9 A; `4 I
var Registry = xdc.useModule('xdc.runtime.Registry');
5 o! ^8 i2 z. }; T0 y, t+ `Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
  g5 s* {+ ]( o) G6 MRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;  k8 f& u$ ^2 }0 `
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
# t! R2 l3 ]0 ~8 P2 DRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;6 a' A4 ]' r- b0 T
* A. r& t4 w9 o: A6 ?+ A- Z4 J9 e
/* create a logger instance */
1 A) V0 c7 v) L" M& u9 r6 Cvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
! P4 R9 |8 k# Y- ^' ~. o! xvar loggerBufP = new LoggerBuf.Params();  u- r0 P+ M* A1 n" e
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
9 Z! [0 P1 r9 F, B& floggerBufP.bufType = LoggerBuf.BufType_FIXED;
/ Q6 S% r; D+ v1 E3 U: d( o: f- e
9 n6 p+ S( s$ x7 y3 s8 x; g. Avar appLogger = LoggerBuf.create(loggerBufP);# x" K  a& U# s1 O
appLogger.instance.name = "AppLog_Core1";, X# B2 ^# _6 \- H9 b: K+ W
Defaults.common$.logger = appLogger;: O; X7 t/ s, m: @
Memory.defaultHeapSize = 0x8192;    - t. p4 ^) [  ]$ ?7 y) [
Idle.idleFxns[0] = "&LEDStatus";4 O" L$ W- j  o0 ~
Cache.initSize.l2Size = Cache.L2Size_32K;8 ?% S  B! G6 n" |+ n4 ~" k
0 t. m* g3 C) p$ f& U
回复 支持 反对

使用道具 举报

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 */, F4 P7 s. q9 u! n
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 z" b* z2 g! V3 r
var heapMemParams = new HeapMem.Params();* j; k4 m: b% d( Q8 l: P3 N
heapMemParams.size = 0x4000;8 `- t# p  L, _
" m) j7 B- r% y: ~
var Memory = xdc.useModule('xdc.runtime.Memory');
/ }7 T& O  Q6 N3 V5 }4 q8 J' o/ f8 ]0 iMemory.defaultHeapInstance = HeapMem.create(heapMemParams);) t6 X9 l; g( f: b" ~0 l
# o. I, v' \5 }; ^* B3 ^
我大约calloc  每次共计大小为5K*16bits,
2 p8 Q3 |. H8 a6 f( r) ]而默认配置才0x4000、需要改大。
- P, [2 D. S* X: P! ^/ E+ Z! Z( Z5 d: ^; }
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */1 T+ h+ z+ i$ S0 Q, K3 Y
Program.heap = 0;
% _1 r2 l" n) N& qProgram.argSize = 100;  /* minimum size */; s) n8 V9 M, U* n% q
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-30 01:56 , Processed in 0.045506 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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