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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

9 Q; o$ c$ `9 X* u. f8 Q& B# H1 X6 h0 P    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
8 M4 c2 U! {; N+ S  I: R9 Y% e- j7 K: ]
其他程序段。。。。。9 I$ D3 e+ `6 {: m9 m
4 H6 ]( {( ]& j, x" A/ `2 _
   free(x_d);
, ]. N9 U& Q$ v8 m6 W5 h0 B
' b; p: e+ K- c* P4 f) ^使用DSP侧单独调试功能,验证动态申请没有问题,
4 M6 P+ P$ u4 w3 K5 s1 u1 @2 L7 g
& N1 e9 T  x' z1 i+ g* c但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。) h% z* k0 x( F$ Y+ V: z
$ U# H4 c9 a7 Y5 k5 r. G; r3 Y

7 A1 T' V5 z; s3 @9 w, K- w6 S, w$ }: `8 f8 a; F
* T, Y2 ]( i# `! G
3 e  H  q, I) V# }. \0 s' A) c
% T) K$ b8 P  y( o/ j
/ u$ A. \: U$ N" e: [6 I( W

4 y6 J; c9 c1 G9 ]& `3 g) M# z
* u5 @/ M8 u0 f2 ^) E$ H' I! ~* |+ r9 G7 O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
7 |/ N  V8 X3 f" x! z" J我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
# v9 a/ l7 Q4 v) v(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
* B5 I! ^& d- G2 q- R( h7 g! ~

6 K  `3 ]3 S7 [是不是需要在DSP.CFG中进行配置* X% F( k$ A9 i" J+ M8 I
我现在的配置为
- {3 ?( N, k  U6 I- _; T5 N
6 {2 w4 l. I% X" k1 M! I& ]' ?4 g/*
+ m3 x; D- R" T6 I$ m *  ======== Operating System Configuration ========6 j2 ]2 Q! f% T0 s
*/
$ ^, a; \# l. r' G& p8 k6 a
4 z- o" f. S& y4 t0 \# k3 O/* no rts heap */$ a* w, D! s% o9 F2 z; f9 y( j
Program.heap = 0;* L: ]  }: \2 s7 a; G
Program.argSize = 100;  /* minimum size */
# s% Y- l" ?, [% g0 `7 uProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大; k" u4 }8 T( m8 ?. D! j
8 U) B/ k5 U# P$ w2 C! {9 ~& q
/* create a default heap */
1 @5 ~! G. n7 M( Y8 Gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 [' u5 ?% P+ N3 l: y
var heapMemParams = new HeapMem.Params();
+ B* F. P$ u( M+ [4 F+ X3 OheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大4 M" I3 p" T: q

" j; r* n: {4 c
var Memory = xdc.useModule('xdc.runtime.Memory');0 v( [. |2 H+ k2 K8 ?8 g
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
- Z' w$ a3 m' h0 K2 y  V3 a; V& T8 f! {+ _  t$ o
/* configure System module */
5 d: W, ?1 q0 M: e0 R  J% svar SysMin = xdc.useModule('xdc.runtime.SysMin');3 D! w" Z9 M) o% f1 p- L
SysMin.bufSize = 0x1000;$ Y; ^" C( d; |( p9 ?% F
SysMin.flushAtExit = false;
: X7 F/ f, n  H  H
) I! C8 ?( B2 U; K! Kvar System = xdc.useModule('xdc.runtime.System');
, T# _7 d' K/ L( e; nSystem.SupportProxy = SysMin;3 U# t/ g4 T/ P; f& C( h" T

0 W" \& |" @0 E- [7 i" M/* configure SysBios to use the lower half of Timer 1 */
# ?( S( H9 H; \! Nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
+ {2 K& H0 C* k' ]var Clock = xdc.useModule('ti.sysbios.knl.Clock');- O  P6 f' A9 i+ g# b/ f
Timer.timerSettings[1].master = true;3 s, N8 J) r. o4 k5 G( ?
Timer.defaultHalf = Timer.Half_LOWER;8 A, W( g# o3 k# s( i
Clock.timerId = 1;8 H0 k; p9 @$ q4 B2 s2 e; w1 m( x
% D. `" i( @- O  E4 ^4 ^  h( s

3 z7 {6 L/ c) E- ]1 l0 v2 h$ M/*
0 n2 X2 \9 g+ l* o3 _& i7 w6 | *  ======== Miscellaneous Configuration ========* U6 Y* }7 C/ w
*/
# Z4 l( W2 S+ ?$ s& \! y* f- T  n5 ^6 d4 ~! q: h3 ~0 K
/* set default diags mask */
- s; R" w' x& ?8 p. E7 ]var Diags = xdc.useModule('xdc.runtime.Diags');
  `; U/ r4 h4 \0 Y, g& o/ \! svar Defaults = xdc.useModule('xdc.runtime.Defaults');. o3 g. h1 V: S; Q
- j* s9 P: `  e* Z# a
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;! T1 h  \' W5 D3 H+ T) e
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
: q/ ~/ B$ p, Y' m9 o$ L! Y2 g: @Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;  X" r# m' e2 @5 \! R
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
! J+ [, ^+ D2 E( T# Z* N, k  Y, v( `Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */  e" ^* S. Y. E  T* ]5 m6 L3 W
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
/ R# }. w* \! A& ODefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;1 i+ A  Z4 _  `
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;, i2 ]" Z/ i/ g5 _+ d: i3 G6 v7 g$ x! U
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
/ L2 C4 p- \& n. ]- l: N7 v7 M# ?Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;  K7 ~. V9 M8 m
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
+ U$ N7 {* Z! j7 `3 @Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
3 `; X5 L% O# B, V; a/ @* Z; q; sDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;* ?- ?; S, g3 P3 [
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;& B0 e0 y# g: B+ v$ o2 o* I9 l

& C) L$ u8 C/ a/* override diags mask for selected modules */
; j9 P$ q  y# `, V0 W8 ~xdc.useModule('xdc.runtime.Main');
" W# K9 ]& z& v8 I  o+ }* J3 LDiags.setMaskMeta(
# I; ~( H0 @& Q( n/ c& Z2 b* ?- @7 K0 ?    "xdc.runtime.Main",
/ M( I: y- [% V) I: f    Diags.ENTRY | Diags.EXIT | Diags.INFO,
2 q7 U8 ^# ]0 t3 y0 Z: `/ }    Diags.RUNTIME_ON8 @3 Y8 [6 ~: y  S# F
);1 U2 T$ m# f0 V* b( Y# Z. b2 `9 K
2 ^8 h6 n1 |( ?2 k
var Registry = xdc.useModule('xdc.runtime.Registry');1 \* N1 m* Y( m* l
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  R3 k3 K, @3 @
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;" l2 [: Z+ w! p; X; h3 w
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;. G* X' M0 N: x# }5 p! m
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;  n( W. a6 Y" F2 a% C0 q3 {' o

( J9 c/ U3 D2 o. q; n1 |2 O/* create a logger instance */
$ M7 g) `% b+ ^* a8 lvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');7 e- z$ n9 p, P* j
var loggerBufP = new LoggerBuf.Params();+ @! X$ N0 L, |" F  U- ^
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */8 p! {0 z5 g4 T" L' D" L
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
0 |. D; p4 x8 K/ z4 B1 J2 J% o1 f) V/ w7 o: ~4 a; b* E% E' x
var appLogger = LoggerBuf.create(loggerBufP);
) |& c  z1 A. X+ p3 _4 aappLogger.instance.name = "AppLog_Core1";+ C& N, V$ \( F- S" B
Defaults.common$.logger = appLogger;
( L+ I: B; }2 h' u% ~1 |Memory.defaultHeapSize = 0x8192;    # k; u5 t5 G& c" x# V7 P. k
Idle.idleFxns[0] = "&LEDStatus";. {5 E5 N6 F1 U3 J
Cache.initSize.l2Size = Cache.L2Size_32K;
6 }* }* k1 H& N. I) K
) h: d6 m6 K: n, d  E
回复 支持 反对

使用道具 举报

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 */( v/ s# T+ E6 H* s
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. X: I3 e  h) _+ N) M' R2 a) Z8 v
var heapMemParams = new HeapMem.Params();4 N3 w: X# Q( h' p2 H
heapMemParams.size = 0x4000;
' J, |+ i- P( Y7 @# r6 @! f$ Y$ h2 g$ j' f, B" T
var Memory = xdc.useModule('xdc.runtime.Memory');* |% ~! R5 Y) S
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 d  n8 o' x3 B+ ?/ V) c+ Q5 b6 z$ k4 r
我大约calloc  每次共计大小为5K*16bits,
: Y% n/ H+ z1 f. A而默认配置才0x4000、需要改大。! c& j0 |! g# r# t- Q/ l* R

+ I7 {$ N1 H( s4 [) ?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */, Z4 S5 n' D% v' _6 ^" T
Program.heap = 0;
$ g" P4 Y+ z5 I9 R; MProgram.argSize = 100;  /* minimum size */
/ P: {4 J* A0 G2 j- \5 iProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-6 10:11 , Processed in 0.049009 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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