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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构, g" X5 I1 o7 l% G9 B; U1 F  f0 p2 a5 j
3 R. N& G7 E, N) M0 b7 W7 }4 L- P: I
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2562 R8 x5 {: W+ C) x, G4 Z+ }
; A* ]2 b5 f. j
其他程序段。。。。。8 e5 T! Y* N" G$ w2 p

% m& A% A2 k% z, J3 o' J6 q   free(x_d);
3 a7 b; w. a! A6 o; \  h8 r7 G& O) x. u$ g$ j2 c
使用DSP侧单独调试功能,验证动态申请没有问题,( v: K! M: M! L& \8 I+ O

8 S4 _3 y6 @1 c' Y8 C) I6 t; T$ A5 J但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。" w# g1 s+ n" V+ K3 ?

  ~7 K. x: \! h: M3 P! |
5 A) B/ i+ v1 E) _$ U' y  G! V  W6 D3 n# {* O

5 H. Q3 ^* ~1 K- H  p: L  W2 Y
, D- P- |3 ]& ~7 l
) E5 i3 ?5 j: f3 n* j
9 R. a+ V; I- m9 w  _/ r; U
) C: m, t  g8 Z9 F1 n8 V  E( O+ T% i" S! X
+ w/ {% _& [  G
分享到:  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 */8 ?( I. u5 e+ Q. C" `
Program.heap = 0;/ m2 u7 Y' k, r; ^; v
Program.argSize = 100;  /* minimum size */5 M/ c. f8 @) ^+ H2 M: \
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
6 g: }1 O  e" W7 I* {3 Kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 F* u; T% I. x# J' Jvar heapMemParams = new HeapMem.Params();3 \& T' e2 V2 p% T/ c. V" d
heapMemParams.size = 0x4000;
" ~6 T. U4 u1 }, C
( a( w' B; ]" ^3 S' t% k9 |var Memory = xdc.useModule('xdc.runtime.Memory');! S# h; e, L  \5 z  V8 l+ ~1 t
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
) k/ g! r% X( C
4 w/ [5 P8 T/ T2 _& D$ J3 _我大约calloc  每次共计大小为5K*16bits,: {: `0 a5 Z6 L1 R1 C
而默认配置才0x4000、需要改大。
# W! |3 Z- w. j. _6 v
. T/ G+ c% e+ d9 w
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明8 _0 m( _: o& v8 C7 S
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下4 K7 [; }% ]0 M% F6 J8 g
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
; x4 d. o2 G( h. m7 F; ?
! \. y, f& v- ~- ]* S5 o1 }
是不是需要在DSP.CFG中进行配置; h! h& q/ H: L* a7 f
我现在的配置为
$ i7 A% f4 e0 c# B! Z4 e4 p8 K, i; L1 |: T) C2 g. H6 b
/*
7 F8 j3 }; x6 Z! P* U4 R *  ======== Operating System Configuration ========/ T: s: t/ d( t6 R  {
*/
$ S, j% J/ p' b5 p( w& }) ]# L/ F
' ?9 L0 F& ?) s3 E/* no rts heap */# P/ ^! C* E: w1 ~2 \$ s
Program.heap = 0;. k/ ?% @0 F/ }8 u; \" l, ]
Program.argSize = 100;  /* minimum size */
# ~; _  x. j2 J  ~* {% t5 bProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大4 V; `# \1 B4 \  e4 J1 L# z( d

" K9 g8 c: s2 S/* create a default heap */
& R; h' @+ y5 ]! \var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 s4 B3 M% T. r' |var heapMemParams = new HeapMem.Params();
8 R' x" F% @7 I- u7 E' [3 w  M1 U3 PheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大8 x. C( ]( t" Z0 c# u+ g
& Z" w: C( O4 h8 s; f
var Memory = xdc.useModule('xdc.runtime.Memory');
1 V: p, A! g/ y; UMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
% ]7 V/ }& h" ?3 C1 M+ U. g
, D# x) o& r$ v. T2 J  r% D) ^& z/* configure System module */
; g# L1 ~/ {+ x' f5 Pvar SysMin = xdc.useModule('xdc.runtime.SysMin');- J# Q1 c/ X, D5 F. Q( X4 p: d5 x
SysMin.bufSize = 0x1000;( r" {! H7 j7 |9 U
SysMin.flushAtExit = false;9 R0 L8 P1 s+ N/ c
: n' V7 @/ W5 O, N
var System = xdc.useModule('xdc.runtime.System');
; [2 ?& f# ~9 @% I6 g( z! v/ r+ hSystem.SupportProxy = SysMin;
0 a( {) `" ]- B$ K( `# }" P% a' `, S. Q7 W/ Q
/* configure SysBios to use the lower half of Timer 1 */" R5 Z& B8 u7 e4 P* C8 h5 K: J, D
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
7 }  T1 ?5 W7 J/ ]* o1 cvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
3 V# M) D; ~' ?' MTimer.timerSettings[1].master = true;1 Z; W; G( U! ]8 W" I
Timer.defaultHalf = Timer.Half_LOWER;
" N4 i" P: a' b' w4 F# h( RClock.timerId = 1;2 W  {  d& Y' q: M$ j1 M

$ `/ Z" K8 y- N8 g1 W* G; }% b8 k  [+ ~- J* `  z  ~% g, t
/*
5 T$ l7 B4 W# Z( [& {* S *  ======== Miscellaneous Configuration ========
! u& l0 e4 u4 n/ q, } */1 l& i0 s, |, I( @( W
" W. ~  d2 d1 ?7 i7 C) `
/* set default diags mask */
: R0 |' ]) _/ [/ K. @6 ?4 Fvar Diags = xdc.useModule('xdc.runtime.Diags');
' A$ F! S) _2 j) r% z8 C! bvar Defaults = xdc.useModule('xdc.runtime.Defaults');
3 c4 C- ]* P. h2 J2 d6 Q
/ c  G5 m5 p) i6 T. \5 z8 EDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
: D) ~2 f3 d; ]) k( Q5 @Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;) E( j7 ^/ @! I2 o4 ^7 @
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;, s* [! [  p/ [9 {" n8 }
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */& E7 ]1 Q. ^( c  u+ w9 O
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
& F2 h: z# N8 {$ b9 ADefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
6 q. p9 p. y" o9 r9 MDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
0 ?/ R/ r8 V  O5 y1 ADefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
: c- Y  q, X, S2 a. bDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;% G- n3 W: [) t
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
% B( e$ k) d& R* \% H* Q8 e" J$ yDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
) D( d: a& D8 e1 ]+ mDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
# V* f- N! L7 ~9 iDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;9 ?9 `" s& Y: x+ w8 O1 ^; R
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;: k, D, k9 y. A6 j- y0 q
/ o! j3 @1 ~! S
/* override diags mask for selected modules */
, M# l6 f5 h4 |" X& [xdc.useModule('xdc.runtime.Main');
- C" ~9 F2 b% QDiags.setMaskMeta(/ e3 f# s7 ^  S: G) [
    "xdc.runtime.Main",
  {1 p5 x# N9 F/ d4 {    Diags.ENTRY | Diags.EXIT | Diags.INFO,) L& U# s+ Q+ F) E5 o  M
    Diags.RUNTIME_ON0 `/ D+ L8 X5 ?, {, Z, h( O
);; }( R+ o- ~- c7 a4 S
4 G- d6 G4 q6 |2 x, A) \6 L# W: h
var Registry = xdc.useModule('xdc.runtime.Registry');  y3 u3 t4 I6 u$ v
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;" D/ I2 ]- d6 M+ m5 u
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;9 O; T2 ]" c3 v( ?: Y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;% W& K4 c6 T, d# K' l9 w# X' I
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
; \+ m0 Y& ?/ S+ F
/ @! F7 L8 K: h' \: V! o8 I% ?: \/* create a logger instance */( `0 Y. P; `- E3 G" v
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
2 R7 U0 v: O7 |5 D: Cvar loggerBufP = new LoggerBuf.Params();. F/ B7 Z! T: \6 a" G: h) Q
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */2 r' _" ^0 q1 X
loggerBufP.bufType = LoggerBuf.BufType_FIXED;9 Y5 J0 C" Q* X& y- G$ u

$ \9 u" w' r7 T% K  ^, v  Yvar appLogger = LoggerBuf.create(loggerBufP);
5 S4 {; }7 V+ CappLogger.instance.name = "AppLog_Core1";9 t5 w$ p& R( B3 K1 I7 b8 J
Defaults.common$.logger = appLogger;
' @2 I% d. d8 m' u7 t0 L4 {Memory.defaultHeapSize = 0x8192;    & w. V1 a# L) j: [7 Q8 k# i
Idle.idleFxns[0] = "&LEDStatus";
4 s. m+ m' |5 b0 j- QCache.initSize.l2Size = Cache.L2Size_32K;  F+ ~: Q' C  g0 @
" ^: f- c+ @* P" ?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-4 00:58 , Processed in 0.042075 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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