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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构/ S/ I$ ]) h3 i# u" q) W
# Z% q0 }7 E  |. o
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
) L; [/ m5 h  M4 Y, l" `0 |2 M$ }
& \' K( B. P5 |" J& [9 X3 g& |其他程序段。。。。。  d$ [( }: w( [. m

# s! b. C+ `0 m$ n   free(x_d);
4 Q9 ~, c* m" L, E
- C/ K4 `9 C0 \$ S6 U* F使用DSP侧单独调试功能,验证动态申请没有问题,; u- I. \! n* N" w2 M% P

0 J6 y( j; F. d9 l+ Z但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。; t& `" q6 W" t
4 H1 y0 L: H4 K( m( W- {

( @) i0 ^) K/ H1 ]" L/ R. s; Q2 g$ o+ W3 S7 P0 o

  M' q1 ]* q+ `5 J$ o; Y
, N5 \+ D) W/ u/ k: P
8 o& s. K+ Z8 o7 a) F+ |
& K* ~$ L' [5 G, ]  t; n: O9 B4 L' Q- g! y0 L7 p) N5 l( I

2 ~4 g- j" g6 d# W& K# h+ e2 N$ T4 N5 d" {. R& X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
! J- z( e3 {6 `6 m我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下* r; I& x5 i$ H" Z
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
$ F& W4 {& E2 |3 V6 T: L" Z9 Y# y2 l
, C% B$ o% K; G
是不是需要在DSP.CFG中进行配置
5 K/ ]2 b) L# ~0 A, J我现在的配置为8 N5 s8 ^, q* b

; C8 Z* h8 f, s# E" O  Y+ M/*0 O/ M# g7 M7 W- Y! g; N* p
*  ======== Operating System Configuration ========
$ o( V; b! y( X- b, U# Y8 C- @ */
$ C2 p! W/ m0 c. O+ j- ~
/ n# z8 _  f9 D4 t/* no rts heap */# j9 y6 i, V4 W4 l, \
Program.heap = 0;# x$ u9 V: B: R' \6 ?
Program.argSize = 100;  /* minimum size */+ `0 Z1 d8 V. T) Q
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大  a8 r$ v- l5 N7 z
! x+ _5 R) {0 N4 |. V2 E
/* create a default heap */) j8 O2 x. m' l$ d' O0 T
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ A! b3 H( F/ U" N, N% `
var heapMemParams = new HeapMem.Params();1 Z& c/ n* t+ D( z" u6 e7 c9 K
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大% c% ^4 v5 [$ A
1 G3 W2 A5 U4 c' s2 s1 ^
var Memory = xdc.useModule('xdc.runtime.Memory');
! T* h8 V: ^" [8 g& lMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
! k9 }; E7 r0 T* ~$ @* o- x$ g" i1 n# ~# n
/* configure System module */% @. M8 `9 T0 @0 y3 M* T  \, w
var SysMin = xdc.useModule('xdc.runtime.SysMin');
/ k: ~4 o% d2 F3 v2 S" Q2 BSysMin.bufSize = 0x1000;/ d0 T+ f; J9 r1 u/ ~3 _
SysMin.flushAtExit = false;0 F" |  d2 ~" o3 }
2 s" D# W; L2 n/ C+ m6 y
var System = xdc.useModule('xdc.runtime.System');3 ?2 U/ E( N) ~- e; w0 P2 N
System.SupportProxy = SysMin;
# Y; u* W8 `/ S1 n8 i7 O( X( @
6 V2 l' v& E- v+ T% r- x: O/* configure SysBios to use the lower half of Timer 1 */
2 G6 B- n  k3 r+ a; z% ]; e7 s9 {var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');6 z" k9 ?+ N1 g' A8 P% |8 s5 d: x5 V
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
' f( b* u7 P% S  q' zTimer.timerSettings[1].master = true;
; O0 U8 M2 L6 p$ FTimer.defaultHalf = Timer.Half_LOWER;
" m3 x/ h3 _/ ^& e$ \Clock.timerId = 1;! O+ C" V, {$ V, ]& z
$ A; s- \3 L  l( N
6 L0 X4 L: F, ?% s& `( ^
/*
' C3 V/ |: Z; j8 D7 S: y *  ======== Miscellaneous Configuration ========7 h& g9 c0 i6 {, {& _0 ]3 R' I6 u/ s
*/& F8 C! o7 m# r! U* q, w0 j
# @6 Q1 I  \; }- ~: z
/* set default diags mask */4 E% x$ R. `2 T8 ^0 |1 J
var Diags = xdc.useModule('xdc.runtime.Diags');! D( U2 |4 D; L
var Defaults = xdc.useModule('xdc.runtime.Defaults');
0 L2 w# b) |9 C8 y- |; b' r% d& L- _. I2 {: X
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
  W/ r  O; L$ F' v0 A9 bDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;/ v7 K6 a7 L3 Y1 o* Q3 x
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 }9 M' W2 [/ Z  K- |- \! W) f
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */  i0 U5 e( t1 c4 M* P8 g8 u3 `
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */! U( K8 r7 z  T, G
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;8 T4 c% N/ g, x/ d
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
7 P. t; Y4 r# q  u, GDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  m9 j  ~; d6 h& P! C1 e% u  R9 aDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;+ m% i+ F, Z% m2 E5 v/ I4 |$ c$ |' m! [
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
6 F4 ^$ j2 R+ @) LDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
! |; r9 @: [7 y* EDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
; C& A& P1 I& n1 \( P# }2 J4 fDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;# V3 l6 e8 O7 R# {
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;* p) Q/ z9 L* W; S# _; d
3 G' n, ^) R0 R! Q4 A% y
/* override diags mask for selected modules *// Q" @* ?; w. E& q; |
xdc.useModule('xdc.runtime.Main');/ e4 Z+ O7 H9 k1 D" `% _- u
Diags.setMaskMeta(
/ ~8 }% t# I& v5 t" K    "xdc.runtime.Main",
( @/ D4 ]. L8 t, U; H    Diags.ENTRY | Diags.EXIT | Diags.INFO,9 Z1 u8 ]% f2 A/ ^; e# a9 }
    Diags.RUNTIME_ON6 K9 l5 X& z" i1 \# V( R$ X
);0 h7 m9 S% A% X, B- i3 D
+ F: `: G# [! z3 I' V# c1 P! |
var Registry = xdc.useModule('xdc.runtime.Registry');& x" a, f% J: N" J# `- R( I  B
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
$ x# G. g9 T5 BRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
) _# t1 v6 f% N( }Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
& Y+ p2 y* k9 e% c8 {- lRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
" {$ s7 i& J& b3 N1 R; x% w2 ~! }4 s! }/ s: `) Q8 T' g
/* create a logger instance */* X  n4 t! N7 E& R8 S
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');# d- C0 v+ q" R& P9 v
var loggerBufP = new LoggerBuf.Params();
( P" v8 @5 J3 u# ^" X0 i9 EloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
' ^0 u; i; C4 N" j3 tloggerBufP.bufType = LoggerBuf.BufType_FIXED;
7 P& o, i+ _6 n! k) r! O% C
9 p. `! ]% o- A; ?' Jvar appLogger = LoggerBuf.create(loggerBufP);- d8 |$ J1 O$ S
appLogger.instance.name = "AppLog_Core1";" M- Z+ b% R# i: _% K
Defaults.common$.logger = appLogger;) m  b- n7 T1 g2 b- o2 `6 B
Memory.defaultHeapSize = 0x8192;   
: U* r. w8 O/ R' Y" iIdle.idleFxns[0] = "&LEDStatus";
7 M2 _0 G! q, c! S4 s9 y* oCache.initSize.l2Size = Cache.L2Size_32K;9 O$ R9 O; m1 V  r8 [: L; x* P
# {' b: E( j$ d) F
回复 支持 反对

使用道具 举报

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 */
5 o5 G, m% q) @$ y+ Rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. h& |) R7 W+ H3 [$ [, \
var heapMemParams = new HeapMem.Params();; u$ v, b* D5 ]
heapMemParams.size = 0x4000;
5 [1 ^- x2 ~- p
+ f) I7 W" R9 fvar Memory = xdc.useModule('xdc.runtime.Memory');# R5 m# L7 A( |: [* P3 V
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);8 m: @3 ~1 H- A% j
6 ?2 r6 Q' J. A% e; c9 [
我大约calloc  每次共计大小为5K*16bits,
0 Z) p5 ^, w& }+ d* s/ j而默认配置才0x4000、需要改大。0 `6 W8 J: w3 T# q- ~1 _8 H

- H& G3 M: I! o4 o! c
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
9 }; p  N. Y, @( y# C8 B0 z1 ?1 cProgram.heap = 0;- ]) Y# `- K) _; }6 Z
Program.argSize = 100;  /* minimum size */
; H+ J, S) a$ j) PProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-1 02:35 , Processed in 0.042032 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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