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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构' ?4 F, i4 o7 }$ b- R5 P8 ?
" U7 ~4 H: y6 z
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256+ C0 K7 ?) w& M
7 m8 }3 s+ X9 c7 {
其他程序段。。。。。; H: A7 T# z* J$ @. j. v6 [
+ G& R. I( J8 [' g
   free(x_d);
3 T* H3 ]+ p6 e, d% R) ]: W. V$ X; Q/ F% l- e! s+ p; A8 \
使用DSP侧单独调试功能,验证动态申请没有问题,
4 J4 H( T/ \7 L; }7 c5 u/ |' S  ~2 E9 a- v
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。5 I: Z; H, u+ f5 L# S" ~2 Z
" m& ^6 W. C: O" M. F2 U( p2 v& O

( ~; i/ m# a; V
+ t, m% V/ X$ \; r8 f3 f# C- l4 q5 }! \& |  \8 `
# v" C7 d3 X. Z# M  u& J% @4 f# r
7 k  j6 E7 q' Q1 l) E

9 B) N. f1 e5 L" s- Y- D. m: D0 S. W7 T) }" ^
4 j" B: h, P9 S
" E  a+ M0 u1 }6 t0 u0 n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
* K/ X+ L' M! s) e  u* e我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下$ E. Z" D! e% d# I- H. M5 i% {
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 @4 }% A* y( z1 _: x+ Q2 ^, L
) E' B: |. U3 g( ~
是不是需要在DSP.CFG中进行配置
( d% V( b$ Z% |* Q! B我现在的配置为
* o. W$ V; h7 T) w* R- a6 }
' q! o! D1 R" X! U/*
7 a) t, }5 d6 W7 q, G *  ======== Operating System Configuration ========
% D8 B/ }# D4 [) S */
3 j- J5 b1 S, K/ n, I
; S0 n* Q% T: f& t( p; D/* no rts heap */
# U7 G( O  G5 E; g9 \7 }( `- Q2 QProgram.heap = 0;
* o$ h. ^) P; ^3 p! [$ zProgram.argSize = 100;  /* minimum size */4 w- ]$ m4 ?& D0 U$ a& m) s2 D
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大* P+ I  k  p4 f" a: J7 `

9 R1 ]* Q5 g7 `* G/* create a default heap */
6 V' m# Q, H$ {var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- c2 G+ {* r4 F0 J) Bvar heapMemParams = new HeapMem.Params();
& H$ `9 g/ \7 \heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大* T/ {/ m; F" L/ V% G
+ D8 n9 p8 ^1 ^6 G5 k8 G$ O  Y
var Memory = xdc.useModule('xdc.runtime.Memory');0 M! @0 [/ K7 e0 G8 R( T
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' c1 U; X) Q4 m% @: a9 p

4 ~5 r" v. W' a5 E/* configure System module */: ]/ r2 H0 w; V
var SysMin = xdc.useModule('xdc.runtime.SysMin');
( l9 s8 ?; E8 J5 LSysMin.bufSize = 0x1000;
8 K6 v' t& u1 f, `SysMin.flushAtExit = false;0 c( I1 `( f; g
1 c# b# s* k  ?* D# U5 S$ n+ \
var System = xdc.useModule('xdc.runtime.System');8 x' _5 o0 ]( F
System.SupportProxy = SysMin;
- x" {& p  [% O, i, o. n7 Z( Y1 k0 S* ?; }
/* configure SysBios to use the lower half of Timer 1 */
! }: L5 G% ~* D1 ?$ ivar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
8 k7 p( q( N& yvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
: d( w8 x& ^# I  r/ PTimer.timerSettings[1].master = true;
$ W: P0 S# Y2 w2 s9 n: eTimer.defaultHalf = Timer.Half_LOWER;
) |; `8 L1 W4 W% ]& z3 ^Clock.timerId = 1;
1 b! Y( v% r" V; ?; u# E
/ `) s7 G& Y* s2 S: |6 e
+ }$ r( @$ S/ |& p9 S# h" w. B/*
# h, G# k( W' d *  ======== Miscellaneous Configuration ========6 W- ]" A$ S, r9 Q" u) y
*/
" O' V- r: J& O4 k/ `, w( d* M/ P. V
! t' \) s  i- u; E7 K/* set default diags mask */# ?' r. L7 m1 f, ?7 t: d( T2 V
var Diags = xdc.useModule('xdc.runtime.Diags');
$ w1 O* R9 C6 G. o" ]+ F4 I5 K( vvar Defaults = xdc.useModule('xdc.runtime.Defaults');
7 y% X6 k" A; F! o- \
0 v4 i' P3 j1 R: m1 aDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;% M+ J) p* y9 V+ g" e
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
8 ^1 G9 q% M" e: \, GDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
3 u2 R5 E5 P: \2 |8 l8 v. `2 p8 PDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */) ]% F8 `' V' x! G  a
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */+ }! k: X3 {( W, {3 P
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;9 n( u& o# t# B( v5 L
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;6 s  l5 V  F8 L. A
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- R0 t8 C) D" o5 v
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
( B: Z! C, F" G- ]8 F/ XDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
$ H. g1 @2 ?. [( y7 a" k* z' E) r' uDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
3 M' ^: K" X! f5 ]! {Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
, y' b% Y4 q7 [3 M  }2 C1 qDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
2 U7 E5 [# d" s) BDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;$ S% k2 Y3 Q" A5 S" r$ ~

# [5 G$ ~" t2 z) a* l6 N7 N# V3 Y' r/ k/* override diags mask for selected modules *// \1 X( v: c5 U- t
xdc.useModule('xdc.runtime.Main');0 {) r) @, T& _! |9 S! A) S
Diags.setMaskMeta(
- t4 c7 d( `! m0 D" V    "xdc.runtime.Main",
% C# d  Y. V+ Y5 ^$ `$ @, R    Diags.ENTRY | Diags.EXIT | Diags.INFO,
) i( f6 d! x# q% u    Diags.RUNTIME_ON7 W' A; F/ H' d3 r, s
);1 j. a# L. j* X6 k
+ C+ ?0 B9 y( @
var Registry = xdc.useModule('xdc.runtime.Registry');
* F) C/ R2 G$ l9 G0 I9 z# TRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;- _+ {. r: L4 d
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
2 O3 K/ c( H( W/ o0 T, LRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;0 N0 ]% j: ?) e- i6 b9 w
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
0 B/ L6 R1 J+ {' P+ [# J4 U( ?# D% ^( X5 a$ V. K! s# w& a
/* create a logger instance */% G# m% h2 {% C* G
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');% l( X7 m) x6 d+ f
var loggerBufP = new LoggerBuf.Params();, e* D* @  a8 R, }3 R
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */" Z0 R# o0 V6 R/ h& ?
loggerBufP.bufType = LoggerBuf.BufType_FIXED;4 m. B" N+ N9 ]) G

/ l6 N4 U1 ]  h8 Xvar appLogger = LoggerBuf.create(loggerBufP);2 d# l- B$ p6 R+ p# N
appLogger.instance.name = "AppLog_Core1";$ a$ o" N( r6 V9 v: ^
Defaults.common$.logger = appLogger;! e. v8 V' ~/ t! ]; r
Memory.defaultHeapSize = 0x8192;    : z6 a5 r7 J) Q- y) \. A
Idle.idleFxns[0] = "&LEDStatus";6 w/ K$ `; O2 R' G% r- Y
Cache.initSize.l2Size = Cache.L2Size_32K;
0 f8 ^% m" m% v* j! O; p7 E7 \6 D9 h: 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 */
9 I0 X; }* U5 Q# U1 G7 Rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) w( C( L7 n" h
var heapMemParams = new HeapMem.Params();
. U6 v5 R9 `  W6 TheapMemParams.size = 0x4000;; M  U" G8 \- e& @" y" B7 H
  {, m, a/ I( }% y7 ?; ^
var Memory = xdc.useModule('xdc.runtime.Memory');' r* O, w2 I" N4 j
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 f) F$ J( L. W0 B2 v' _: L. d8 N+ E6 L
我大约calloc  每次共计大小为5K*16bits,
) h( b, F5 O# P' t" ~5 f/ ^0 V: \而默认配置才0x4000、需要改大。8 D6 {; f# _* R) u2 i. N2 y

( G+ ~8 M8 p6 \$ D$ s4 {
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */* W/ j; u* t: k- o+ y, b
Program.heap = 0;
# L- }; b$ F& d, m. f7 w& bProgram.argSize = 100;  /* minimum size */
- h+ k) u7 B) _. O3 c' 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-12 09:49 , Processed in 0.041989 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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