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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构5 A8 _/ Q% u8 E5 q  V6 G2 l* w

' R) k2 k8 I$ @. N    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
0 p6 v0 D* Z6 l" u3 Z5 \5 e2 F* Y
! {0 h% a  g2 w- _4 ]2 C; b3 u! e其他程序段。。。。。4 D' I( x" F& H; z* }7 d/ j

! l- P- x) |; _! c: o   free(x_d);$ U8 C5 D% `( I+ F; Q- E9 v

" g5 L( s3 k: Q+ R0 C使用DSP侧单独调试功能,验证动态申请没有问题,
1 M# `/ F/ n* a9 o
% u0 t- |* N& g0 @但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。% [' z8 b8 O! M/ M

( G& F% \7 b0 `7 j' i; v3 D6 V; a+ i- E/ h( ], {
3 K0 T1 q5 e! m+ ~, d/ J
5 A5 n  q+ p0 j3 I1 X) \7 Z
: o- ^( y. a& C$ H

' {% s1 j- N' ?7 {- N; ?$ O# U" ?( D9 O1 n/ w
* h4 a" d+ a: G8 e

: X& l/ O0 n  u, y7 \7 e- u
1 L7 M1 N9 Q; q* z0 \; l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
# E5 h+ i# [* c/ |& |) @我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
. h  i* X; e; X1 _; a(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 K( x2 j+ X, K; t2 H7 b* D2 C& }/ Z
3 s  t$ I( |+ g: _
是不是需要在DSP.CFG中进行配置
8 n4 t1 B( Q1 w; S3 p+ d7 b我现在的配置为+ E- y: [$ ^2 N3 t5 A

' Y" `; H4 h  }9 T/*# o) P4 G0 y0 m
*  ======== Operating System Configuration ========  n% t$ C3 g7 j( n+ a4 ~. e& H
*/
" v+ N- m1 o7 }) e4 M0 D
: W8 T+ t' w! G3 ^/* no rts heap */
, r* [$ ?( k- i+ }" U. bProgram.heap = 0;
( Z! }4 ]! z0 d( |  B. L! VProgram.argSize = 100;  /* minimum size */
% Y; J. `7 `6 X. \Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大+ P, f/ O) @9 Z. }% F2 J$ F; w

7 w) x; |$ b% r: z! H- ?/* create a default heap */
$ [8 u# G1 ?  {- o; [4 x2 gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& j- l$ I- @* G/ Z0 c, K
var heapMemParams = new HeapMem.Params();
! {4 ]9 ?* v9 ?" f$ VheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大8 a# m: r, G  a8 N6 D
9 y& f5 @3 Y% @7 P  e  s: `+ h
var Memory = xdc.useModule('xdc.runtime.Memory');! V2 v% U) j7 G
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* G' b- f6 h# h+ @0 p1 ]6 _- l! }

6 v; q" V& M- E7 v$ _/* configure System module */
. }0 R* ~1 N& U2 a* U8 Q( v8 dvar SysMin = xdc.useModule('xdc.runtime.SysMin');
: @, L" }7 X) z: O: Z4 BSysMin.bufSize = 0x1000;
6 |) I+ r: s; O0 x- E" s/ ^/ w" N7 OSysMin.flushAtExit = false;
! R% R6 L( @: n% H8 P& V* l% x/ r6 e6 }
var System = xdc.useModule('xdc.runtime.System');( }2 Q2 s# J3 s' q
System.SupportProxy = SysMin;
# ^: z) J. L7 x, E. F8 f2 p
5 O, _. g) J2 q. Y/* configure SysBios to use the lower half of Timer 1 */( p$ z  V9 U4 F- h! H; q5 C
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');. b/ {) r! h4 F) ^' r3 i0 p
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
4 q$ o" O' }# z$ |3 xTimer.timerSettings[1].master = true;
: A5 ~+ k* e* p7 E& B6 STimer.defaultHalf = Timer.Half_LOWER;
# B4 H6 [& v, K5 F, P0 G3 RClock.timerId = 1;
5 n; ~! s  R5 b  a: i  h' L+ L" L# u
1 |' x8 a& l: j% T
/*
. P8 i* e- I4 c) | *  ======== Miscellaneous Configuration ========+ s& w# I! |" r& q* A9 I+ l, c: d, E
*/& O3 e+ F( K1 b; Q9 c
: y9 A: w" S  p- R2 v4 k7 C  L
/* set default diags mask */. r1 ~: M2 j4 p3 ?( c- u
var Diags = xdc.useModule('xdc.runtime.Diags');9 k3 E1 s. g, e
var Defaults = xdc.useModule('xdc.runtime.Defaults');/ @) W4 Y2 R9 Q: ^6 \8 ?$ ^
+ L, y: z8 K' t5 H# @  K0 u: w0 q
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
/ S7 `- w/ M, e* z- rDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;2 M1 H0 Q) n# Y- ?
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;5 X) t$ O/ H* a; i6 J
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */0 ^' f% k/ R) D, d5 \6 Y# }' c
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */2 L% D$ U) a7 d4 m
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
6 z) L; V8 f; @' z& u6 Y" XDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
% b! ]. q3 |! h+ A& eDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
. b; A* i9 O% m, U& ]( tDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;2 i: B) x! u0 X
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;+ i2 |6 H$ E# f
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
  v6 b- c( l% [7 A  s, U. NDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
$ f* ]/ S4 B* f8 WDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
6 h8 f7 v2 K7 L0 dDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;# P6 O8 d3 s1 f2 M, ~6 ^$ @
- ~) i, l+ l1 M) s: v8 o- d
/* override diags mask for selected modules */
$ e2 O! q7 m* m. [% h/ _9 ^xdc.useModule('xdc.runtime.Main');3 f, y3 |* V) |+ q! R1 l0 r
Diags.setMaskMeta(
% k9 z9 g' T; A4 c0 G& f    "xdc.runtime.Main",
, q( Z2 x; _* h    Diags.ENTRY | Diags.EXIT | Diags.INFO,
( f# V& Q0 }: B/ z    Diags.RUNTIME_ON
8 ?& M! P3 ^1 w4 f8 y3 l6 ~);  I+ s  X0 b# }4 q/ C' ?

5 i6 u8 n9 n! t4 m" Evar Registry = xdc.useModule('xdc.runtime.Registry');' }) J2 o0 A7 X7 r
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;$ q/ z! L9 U% R4 W
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;8 t1 J! e# H5 I! @  N% ]- G: N: U
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;  k( ?; d* n& ^, r  b) R( r% s
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;3 Z9 Y9 {% `1 [, K
6 b+ z% S9 @8 ?# X( u8 H, K& h: k
/* create a logger instance */
. k0 u8 G7 @0 O9 v3 L& `" Q) W/ Jvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');+ g) N; g& o+ u2 G
var loggerBufP = new LoggerBuf.Params();" V% f$ G. T5 m% k# G$ E0 h
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
4 x; m  E2 J  l7 W. T/ b/ s5 KloggerBufP.bufType = LoggerBuf.BufType_FIXED;( H) w+ @$ L+ ?( q' j+ M

/ Q2 M# Z. r" V4 k' z$ J9 ?" v9 Svar appLogger = LoggerBuf.create(loggerBufP);
+ |+ s+ X$ v' `0 p% X: [" u3 _appLogger.instance.name = "AppLog_Core1";! f) V. Y7 @& q5 g% j' g
Defaults.common$.logger = appLogger;5 Z. o" Y# Y% k1 x( H% ^  N
Memory.defaultHeapSize = 0x8192;   
( }4 L" ~% W9 d! B' X2 B# CIdle.idleFxns[0] = "&LEDStatus";
, R$ b2 o& U* ^Cache.initSize.l2Size = Cache.L2Size_32K;
( g' p0 P- H5 u; B
5 m# `' k  \8 ^+ l
回复 支持 反对

使用道具 举报

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 */9 a  {. R8 y0 L
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 Y$ I% _. e3 N- J
var heapMemParams = new HeapMem.Params();
! q1 a3 }& P  d7 j1 eheapMemParams.size = 0x4000;: S: y/ i7 g: r& [$ U
  \! ]* [; G$ B2 `
var Memory = xdc.useModule('xdc.runtime.Memory');
1 [8 Q) A" C; E4 R  h, zMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
" R! R  s& g* w0 z" g/ V" O
2 e# x( G2 l/ m4 M& ?2 ~, q7 s我大约calloc  每次共计大小为5K*16bits,
7 q, a/ W4 ^% q+ K" u' j! a而默认配置才0x4000、需要改大。# |! _% s3 W) u2 S8 x% f
1 v" d2 j5 M1 H+ m
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */. o1 ]: N3 q! n& Q2 L
Program.heap = 0;! C4 D4 B0 x  l9 w( p
Program.argSize = 100;  /* minimum size */
- P# e5 Q  V% l* F% ~% A: s8 z. xProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-17 02:36 , Processed in 0.047332 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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