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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
/ Y5 G7 m- I3 Z
$ z9 [5 K5 @1 }# g    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
6 m; X8 Z2 ^9 T6 G
5 _( y4 G* ], `: w6 Q( W其他程序段。。。。。4 u* D! W2 e" T9 l% B9 O4 X; e  C

% g5 A  f2 L9 W# O. c  {   free(x_d);
5 ?( |3 x3 y# S# [* n3 P1 v" t. K% G" D  R9 `1 I% Q" \3 q
使用DSP侧单独调试功能,验证动态申请没有问题,
7 R" t: \" z: U2 `
& X2 u# Y5 J$ o- J' `/ {2 i+ D但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
* z% x1 }  d0 q4 v0 V3 ]
) O8 Y! Q% [5 @7 ]+ g- r

* i+ \" ?  k) Z# R( i
: [- A7 B+ d7 Z: ]9 y7 Y
5 o& e! a+ S  A8 X# J
1 l% S6 L; S/ H3 a/ w2 l
- D4 `" ~- W# y0 Z$ S3 z7 j/ w1 k3 c

( ?6 N. N( c% R8 \: N' E. S( D2 J. K
: D* Z& c4 v+ `6 V4 o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
6 d4 n0 n: G) `7 W我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下! B, a- u/ i+ q0 e
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
: b) [4 l$ T9 j# o

3 z; ]$ e5 ]) l6 V+ b. c是不是需要在DSP.CFG中进行配置. M' \8 x  \3 v- O4 s, z
我现在的配置为
- G4 J) t; W" l7 E5 F3 y- P
( E" p% q$ r1 j7 s9 z/ j/*1 I  r' s) ]  m  j0 \
*  ======== Operating System Configuration ========5 Z7 L; x1 ]  L' ]7 v" b1 t
*/
2 P$ D+ j5 @) l! k* O. @
. H, [6 d/ A$ `& m& b* O8 [- C  Y/* no rts heap */
& Q0 n# o8 Z/ C( ?/ qProgram.heap = 0;: e8 A: T8 V$ H% T* A2 h
Program.argSize = 100;  /* minimum size */3 W9 U% a. j# C1 o5 k3 F: R
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大$ _* d" C3 d4 R8 H

3 x( S8 Y; X' x/* create a default heap */- p+ t1 t5 h1 n' A6 |& K
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) }: F+ k; C7 e% A5 c$ L! jvar heapMemParams = new HeapMem.Params();" ^& j4 y8 b8 s1 T" Q
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
. s3 n, }% D# w
1 N) N8 B- |- Z' y. p& Q
var Memory = xdc.useModule('xdc.runtime.Memory');, Z6 h4 y! W4 b" H' u' t
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  ]/ j! W, ^+ a  _- w

. `" V% u! X+ H+ N9 U/ z4 @/* configure System module */
* r9 x2 r+ t' M! w$ svar SysMin = xdc.useModule('xdc.runtime.SysMin');0 ~" L& ?# f, ~# f' Z3 N1 P. H4 D
SysMin.bufSize = 0x1000;
6 p, Q( c+ @& E- S3 Q8 T4 r/ GSysMin.flushAtExit = false;
+ j! T6 c' M& N% Q1 P8 t
& V+ w1 L" f8 w9 y8 W" v5 H9 Mvar System = xdc.useModule('xdc.runtime.System');
3 n8 J# }* R% }/ P8 c3 MSystem.SupportProxy = SysMin;
! H. r2 K" c9 j+ j& `4 R! J; x5 H! H7 g5 j  [
/* configure SysBios to use the lower half of Timer 1 */1 d# P: M6 M) [' P
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');' ^; R# P; K# ~2 }$ v
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
" K1 b2 K. x) G2 s" M: i" fTimer.timerSettings[1].master = true;
& U% J% u% ^  l8 KTimer.defaultHalf = Timer.Half_LOWER;+ P! }8 Y7 T+ Y
Clock.timerId = 1;
2 Q, W! ?% W! H+ ]9 [* M9 u2 J& w2 s5 b$ d: I7 @' U; a3 U
+ k* o8 e. ^' x1 T/ b
/*' D! @- P$ W0 Y9 X% `2 t
*  ======== Miscellaneous Configuration ========
; y$ ~; |6 k" o9 V+ B" A* s5 m) o */
1 B1 ~$ Y5 w! l& }& _5 S8 W1 E7 Q+ R' X' w0 f$ e& ?5 t8 x6 u( L' g
/* set default diags mask */
8 @8 t( ]1 H' S, Z: ^8 z6 a: ~$ ^var Diags = xdc.useModule('xdc.runtime.Diags');
# W& S) y* a8 v9 \: N+ Q1 t0 J  E) Svar Defaults = xdc.useModule('xdc.runtime.Defaults');
7 t$ v- l7 J2 l' I  n$ |: ?
; E8 R' L$ c& gDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;& T! a/ B: d4 y/ k* y
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
, V$ E3 K% s, \/ TDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
, E: |& Y1 d% ~( s) S# TDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */2 Q0 r* \3 g. l4 D4 ?% A
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */4 x, v, ^* ~) y7 r
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;- h9 a+ t0 }% @8 C" w
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
6 c, r/ J6 b  R+ {0 iDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
" p+ G& a" N6 q4 k( Y( M/ o- nDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
$ U1 @3 _7 A6 F. ^) U6 q' f. rDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;8 w! s& ~, k+ Q: a
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;* z( p% d8 }" T* q8 K! a' d
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;* {4 h. o, G$ X9 _
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;# l# k; Q4 V: e3 E  S9 ^% t& M
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
% {# b; w$ W3 m, u7 C6 b! S( }4 h% K& `0 @) w" [. c. L0 q
/* override diags mask for selected modules */& h! M, q9 S- M/ h+ s
xdc.useModule('xdc.runtime.Main');( ~4 f4 @1 v, x2 |! }/ H0 O# T1 i
Diags.setMaskMeta(
# r% P+ B) l/ ]& j    "xdc.runtime.Main",
% X1 v9 D" }# v5 ^- m    Diags.ENTRY | Diags.EXIT | Diags.INFO,9 H% O3 C5 A  ]/ O
    Diags.RUNTIME_ON
' b9 T% ]+ f& \6 D/ j);/ r7 x% R/ \/ p# h/ K

. f( w  A) D/ d: @, f; s- @var Registry = xdc.useModule('xdc.runtime.Registry');
3 O. }3 ~. ]' d6 F) hRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;5 |+ P' t) z3 x7 e: Z5 [2 L
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;  @" S6 c; E" x" s
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;% r# s' h5 E& s8 V
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;& |: h! `/ Y! ?# P% T/ W. K" S
: r. s" d* r4 P4 b! C
/* create a logger instance */
3 q+ t! r2 @, k  ]var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');2 T0 Q: C$ C! l% {9 K: x
var loggerBufP = new LoggerBuf.Params();( G0 {( U3 Q) ^4 L' t+ v
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */" S7 c# p, A* K* K4 x8 N
loggerBufP.bufType = LoggerBuf.BufType_FIXED;1 H7 g# r$ q4 o) o
! \0 h/ G! ~( p2 j) a$ Q" r  E; E, f
var appLogger = LoggerBuf.create(loggerBufP);
: P" i+ m' E. w8 i8 C! S  t! LappLogger.instance.name = "AppLog_Core1";
0 h2 W# L, p- i6 v* gDefaults.common$.logger = appLogger;
. y6 s. ^: O- b* n$ IMemory.defaultHeapSize = 0x8192;   
0 T8 d" k$ q8 x: r- ~6 [% I! y' aIdle.idleFxns[0] = "&LEDStatus";
# R5 r4 K: r* h) qCache.initSize.l2Size = Cache.L2Size_32K;- @! D6 P1 n# l! f) y7 |+ F
; p' c, G# S9 ~* B# G) r
回复 支持 反对

使用道具 举报

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 */. w8 _5 P3 b, l) U3 n
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. X0 @* `) x/ r: H& _
var heapMemParams = new HeapMem.Params();
) R1 z' B0 P# F* H7 u" GheapMemParams.size = 0x4000;
4 B5 t- l3 E2 E3 \$ Y' f" r5 |5 |  W- N/ L, k
var Memory = xdc.useModule('xdc.runtime.Memory');9 L1 }8 j9 p# D
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
- Y; ~* ~2 X# `% f5 c  ~/ c/ |9 Q7 i3 ~) W) m( E8 ~. k
我大约calloc  每次共计大小为5K*16bits,
3 c/ e) x2 t5 }3 L9 n2 D! ?而默认配置才0x4000、需要改大。
" C- Z& `9 @6 ]# r7 K5 n- ~( N& `7 O
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
' B5 O, f2 @$ [1 [$ \, QProgram.heap = 0;' L# z" D" g; H0 m9 S. q
Program.argSize = 100;  /* minimum size */
# Q2 f7 b* S2 sProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-11 02:52 , Processed in 0.040899 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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