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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
  P3 g$ E* P. J* G% ?3 C, S9 v7 z1 N4 j) M
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
! Z; \2 Q1 m7 h* P: ^# m8 n5 n: I0 p
其他程序段。。。。。+ e& S* W% N: j1 Z; R" o) P% V

- Y% i* p0 f2 V) x' z   free(x_d);
6 M- N( Y0 k6 e( U, t  m3 s' m3 R
使用DSP侧单独调试功能,验证动态申请没有问题,3 N9 L  C* ^5 H0 O- N
! m* A" H: F! J
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
2 y: `3 g) `7 V6 a& ?* j
9 m5 t5 i. W8 r$ m! e5 O3 `) d
$ K$ A# y) Y4 M
/ Y( A, Q. i% p
1 d/ |$ c  Y! a; N

9 ]' Z  d" l2 V2 Z$ U" R' \5 ~' ?9 G/ G( E% ^( y6 }! q
. T1 n' {1 f' j6 N2 O
( L, v" L* z3 T8 D
; f: B% O$ j+ _6 B0 M$ ?

% H( Z4 e- ]5 Q3 |8 F% j6 M4 l* {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明% A+ q9 N) v$ d4 a
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
' E, `! j' r/ g+ G/ n% ~) j(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
3 F. Q7 k/ m+ R2 K5 y

/ ]. }3 \# _- q9 h是不是需要在DSP.CFG中进行配置
# H4 _- g1 y. G: \. i我现在的配置为
! y6 s  e5 i) A8 ^+ [" p: K4 x# P
8 ~) |. S, w/ N8 x/*! V: c4 a: |+ Z; s# R  a. }
*  ======== Operating System Configuration ========1 l# D9 `6 D3 H$ X
*/4 C* O  p6 p: L0 h$ Q- S

2 l/ T( T9 u7 F8 g/* no rts heap */) x  K! F3 e' L. V
Program.heap = 0;
9 m6 n- E  c- E: _" ^1 R; lProgram.argSize = 100;  /* minimum size */
! X# V8 H0 L8 yProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
  c! v% S4 S* c* ]  b4 B$ @0 }8 g3 O6 C& P$ u
/* create a default heap */, V9 B# {+ `. J7 n8 X7 J2 T* r
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 w/ s" V5 b: a
var heapMemParams = new HeapMem.Params();
* i% e3 W$ M  ~/ [; N: `( XheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
6 ^! c" O) b- L& o; J5 h4 H
9 s0 b2 b2 v8 h% c& y6 w( S* R
var Memory = xdc.useModule('xdc.runtime.Memory');
) e' p/ P  E4 ~4 }( @! uMemory.defaultHeapInstance = HeapMem.create(heapMemParams);$ o# d; d/ d7 J1 {3 s
* n' k  F5 g8 O" Y* t
/* configure System module */
: P5 ]. i! Y, Y7 t. T$ cvar SysMin = xdc.useModule('xdc.runtime.SysMin');
  ^, G* `; I! c# m# RSysMin.bufSize = 0x1000;
( H8 [8 I# J4 e& eSysMin.flushAtExit = false;
) t7 {/ z; q( |( ?0 t6 R2 e( y5 L$ `) p
var System = xdc.useModule('xdc.runtime.System');
5 x8 `+ _9 }! i7 F( ?, A$ F7 sSystem.SupportProxy = SysMin;9 Q  R1 S% d0 E" _! w. S

7 Q1 g1 I; J7 }. l/* configure SysBios to use the lower half of Timer 1 */
1 {( @. i1 c: ivar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
+ M# C1 K, e9 O+ E2 s3 ~8 Fvar Clock = xdc.useModule('ti.sysbios.knl.Clock');" s' s9 e* _. z, {9 f& d9 s; I6 g8 {
Timer.timerSettings[1].master = true;
+ T( m3 p! `0 Q& l" yTimer.defaultHalf = Timer.Half_LOWER;
" u, D7 n0 F0 L) kClock.timerId = 1;
. h8 k$ b3 ]" r6 ]# w: Y9 z$ R5 B8 J4 v, z
, c. W# x  x, l: b# Q
/*# r/ l7 s$ s% k0 _
*  ======== Miscellaneous Configuration ========2 ^- |( [# \  E' t7 u3 f/ Y; m: S
*/
& m: {7 \# v; i" X; {& _4 [; q0 {+ t- G9 a0 e' c* P+ M
/* set default diags mask */- q$ ~; y7 v7 g# a6 `4 k
var Diags = xdc.useModule('xdc.runtime.Diags');
! n! T  U6 {( o; g# Jvar Defaults = xdc.useModule('xdc.runtime.Defaults');
. B1 a' ~8 A6 H' |( s5 b5 Z/ b$ K8 T$ X' Q+ L+ z9 P
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;4 W9 [7 r, `, |4 X
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;$ x. j: n" K! y2 j
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;  y+ F$ M. `% a, Y; j
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
1 Y9 ?4 ?9 S  cDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */& d: A0 ~( w# j, c4 N
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;0 `3 D- w/ U: K6 ?( `3 K0 d
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;' H7 _9 ]* ]' O' [
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
$ f6 E- @' G" o1 D2 K/ G' qDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 S! h" m9 s7 c  k: ^  O' b  `
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: E" e3 M+ B# ]Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
3 n0 Q3 ~' b# d6 W7 d9 d2 C' `2 d' gDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;3 d8 Z9 q, U0 L7 r/ J7 u( \" v
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;2 O1 l* K) b0 V) x7 Y* t1 X
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;! Q4 G& T9 }+ H# [9 W1 L

- o; C, ~6 L( H' O& o/* override diags mask for selected modules */7 Z# N" H& ]/ S+ H& n
xdc.useModule('xdc.runtime.Main');9 Q$ I9 ?- A! e5 }8 ~. T1 L
Diags.setMaskMeta(
4 Z- a5 N6 m6 ]7 @, t2 _    "xdc.runtime.Main",4 C/ w8 z" V" A. \
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 K4 X7 m8 ]- a8 Y  L    Diags.RUNTIME_ON; G# }. c5 X5 i  E
);
0 w5 ~- g+ w6 V" a6 d
. s+ N2 _2 f5 f. Dvar Registry = xdc.useModule('xdc.runtime.Registry');
% v  ]- F. ~- e+ z; |6 s# hRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  C2 \0 P' Q7 I. ~
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;4 U8 C. o9 i& T8 p! e1 A
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
& Z, Z) p0 V4 s: `% l& R! aRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
5 X4 f3 v& D& B; O5 P9 Z& ]" s( T2 a3 T" }1 Z
/* create a logger instance */
5 f( J6 l9 L, k  e7 P$ c$ ]. {var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');0 y5 ^  L- L, ?. `- b+ o
var loggerBufP = new LoggerBuf.Params();8 |; A$ J% {& r. m0 ~5 D  s
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */$ z" G5 ?3 p2 `/ e0 A  Z
loggerBufP.bufType = LoggerBuf.BufType_FIXED;+ g) x! z" u( T- T% M1 ~: z+ p7 P
7 {% @$ [' B$ @' a% T
var appLogger = LoggerBuf.create(loggerBufP);; W3 m- n& P" @. S; Q  M8 ?
appLogger.instance.name = "AppLog_Core1";
2 g$ i" M$ w8 b. l/ zDefaults.common$.logger = appLogger;; N! @# S# g8 L8 i; Y
Memory.defaultHeapSize = 0x8192;   
9 U! p/ V; D9 G2 v2 LIdle.idleFxns[0] = "&LEDStatus";
- Q( X; K, m3 i9 ^Cache.initSize.l2Size = Cache.L2Size_32K;
3 A, I+ k0 z, D' D2 d" `: K( a) P+ H2 X( f* {. 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 */
6 S/ Y  d) f5 p  ^! xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* Y+ g, H7 @% Y( b+ ]
var heapMemParams = new HeapMem.Params();
. i3 G; @( ?5 N( X8 P. j1 h/ U0 OheapMemParams.size = 0x4000;' Z8 X) t  _: |- r% {6 y% S1 m: |
8 m, f+ t/ N& F* T$ C) E
var Memory = xdc.useModule('xdc.runtime.Memory');! b# |8 A3 ~% j9 q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ h' A% J6 A( O% M2 t
1 P5 O5 t! v. R# E- [$ N& c- @' I我大约calloc  每次共计大小为5K*16bits,
0 v/ o2 s8 F4 k9 B而默认配置才0x4000、需要改大。% H2 a/ `1 b0 c, x, w

' j- u4 l. X. f. \4 X* t4 o2 e  P
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
1 k7 c) ]# A& c* y6 vProgram.heap = 0;. r$ e* |9 r. S" g5 `: [
Program.argSize = 100;  /* minimum size */3 G  s5 o6 K" b9 `
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-26 04:00 , Processed in 0.044136 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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