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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
4 p" ?2 J9 ~7 b- X! g
: S' g2 M, X* U    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256- X1 p( `) W5 d+ O
5 M% K* y6 P& j# V% J% N* |5 l
其他程序段。。。。。7 `" P; z( S: v0 U2 d( t

6 D8 c1 d  w7 \, _, l1 X   free(x_d);
# ?+ ]: n0 C/ C$ Y& \+ A3 z6 S% T; t6 a4 k9 M. i! ~
使用DSP侧单独调试功能,验证动态申请没有问题,7 {0 A( l! i4 R' J4 p$ D
5 G; }- W: w' R* R7 Y5 e
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。" c& c- z/ P" X8 @9 D

: {$ i! z% u$ q
, V7 R+ L$ y/ o  J% l& H; {
7 U. f; t; ]2 a- K- E2 K2 {4 W% g1 B: D' W( ~# ?

; u; P9 O$ k& y6 N- w) x  h3 W7 a% \4 n, x- C5 O4 X& n
/ c) u+ Q" l- a8 ]* l+ ]
4 {/ {) ]9 q8 b9 W, U
8 H" O6 L, Z8 \' ^' y6 ~0 m
0 \: n9 Y2 g& M7 y& A6 B* _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
% P# ~: a+ S7 W6 bProgram.heap = 0;4 [, t  p2 w* J. X1 _5 C) q) o9 S1 [
Program.argSize = 100;  /* minimum size */2 E$ Q) R+ o. B% _) H
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
, t1 g0 }+ g" L- ^var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: |( {3 K8 P0 g; a& {
var heapMemParams = new HeapMem.Params();8 Z( y& `8 ?0 E/ o# ]1 ^. |: ^4 h
heapMemParams.size = 0x4000;  r( B2 P5 j8 t

  p2 E! r: z- m5 N) bvar Memory = xdc.useModule('xdc.runtime.Memory');0 G! M) K; G( X, L
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);5 i! y; u  K/ U: N" c. ?: d
, q% D1 D) `& O9 i5 w$ L
我大约calloc  每次共计大小为5K*16bits,
: Z1 x1 p! V2 w- T而默认配置才0x4000、需要改大。
' b* u8 \' D* ?' I. R/ u& z- F! C% X8 k; m' Q- C
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
5 ?* Z* r. G) u* w我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下- l7 E5 |8 H! m* a
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
' I2 R' K8 N* z9 e- v( e  B

+ P) m+ Q9 O& l: c( ?是不是需要在DSP.CFG中进行配置
7 W% g- r3 @- V5 h: f  O我现在的配置为* E" N9 _% t/ _, o8 }

) _3 ?& G; U1 f; R$ N$ M: `/*
1 m% Y! B7 q% q *  ======== Operating System Configuration ========
7 |3 Q: a: @% N! ~* u4 M */# D! H0 Y3 L, i  p( k. @
# M. ~8 \3 D' L6 t
/* no rts heap *// f" W7 _- c) L+ h9 z4 K
Program.heap = 0;
# @1 t8 y4 i( R" _/ N9 j4 wProgram.argSize = 100;  /* minimum size */
5 F2 Y. }4 m8 }0 U8 b0 B# D' yProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
( M1 v3 o! C& E  _( d% q" w( O* v+ T! m( p) `6 h& N: L
/* create a default heap */. S$ v  S" H+ O" V) \) m; @2 L3 u
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 S6 ^7 i1 F! ]* ~0 lvar heapMemParams = new HeapMem.Params();, d- j$ a6 Q* |$ n
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
: z/ s% x4 ]* l# x- u& o/ x) A
var Memory = xdc.useModule('xdc.runtime.Memory');4 ]2 [: l0 e" J8 N/ D$ I
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
( N* O; z) }; B, Q2 x' s, G6 S, {
  g  J$ {, C0 q4 Q! r: G. t/* configure System module */
9 b6 i" R* Q- U" {1 ^8 h6 u* O, Jvar SysMin = xdc.useModule('xdc.runtime.SysMin');6 t4 W: t9 n7 V+ @
SysMin.bufSize = 0x1000;
+ s8 x/ M; q. H; B2 M, ^! T. W# I8 XSysMin.flushAtExit = false;, a1 q' p: T) F( n/ L

/ b& M" A' g% C3 jvar System = xdc.useModule('xdc.runtime.System');
% ~, _; e& G/ r# z  x* OSystem.SupportProxy = SysMin;
& u4 a7 b+ i2 x& {! L5 t
) b* w! q* t( G" A) P: c- H/* configure SysBios to use the lower half of Timer 1 */( `% ~: k5 t( z  a
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
9 x- o2 U$ i1 b* U) x) h2 E6 fvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
- G: M1 g, `: m$ D) BTimer.timerSettings[1].master = true;
& c( x# ^9 x% `3 U$ iTimer.defaultHalf = Timer.Half_LOWER;
0 ?' z: u1 [( t5 M, v$ |- h2 YClock.timerId = 1;5 Z5 v- C  F4 Y+ Y& j3 d1 C

" \  P7 E# C) d2 v$ `5 ?' M' x& v
. n. d$ q, O% ~0 U* b/*
/ m( }7 ?8 Y4 r3 o *  ======== Miscellaneous Configuration ========
7 ?, A% [7 l- M" S */$ d$ A, G3 t1 S; `7 s

6 w) [0 M* V9 D3 v8 r/* set default diags mask */3 L; ?( Q1 j$ b3 R, |8 U
var Diags = xdc.useModule('xdc.runtime.Diags');4 d# ]* E. i# v4 k( U; U6 w
var Defaults = xdc.useModule('xdc.runtime.Defaults');1 D# N1 l4 N2 @) P- r; c$ w! S

! d3 y  z/ {6 e7 _) G' h2 F1 UDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;2 Z, A: y8 [0 _. Y
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
9 L1 A% o0 x/ z  ~. b" ]8 ADefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;" |2 g$ u$ F  }
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
$ H8 i7 C& G: b" `) u9 YDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 @- b; _; u+ ODefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; {9 H# r( {& ^* T/ j1 u  V* N8 ODefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;6 }" w. h& I' K: D. {0 n
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
2 Q! }! v2 E1 r: M9 }Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;6 {/ t; ^- T. E3 a% _, |
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;. f/ t3 `% B" l
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;& o( g2 f, q4 N' ~' A# Y: J) S
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
3 b6 l, R$ z9 F# E0 d7 J* g" F% tDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
* O5 U# }8 O2 q+ qDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;7 I  ]" S- w5 h+ k$ _' Z) N' Z1 F

; l$ O+ V6 ~* G3 G- G2 l/* override diags mask for selected modules */2 n- [. e3 u- p7 O
xdc.useModule('xdc.runtime.Main');
3 X! K( j, e* l3 s' ~; [! lDiags.setMaskMeta(1 C& {8 S; v1 D7 G+ _5 G
    "xdc.runtime.Main",; \$ M9 Q( a/ s8 _+ y3 v+ z6 g
    Diags.ENTRY | Diags.EXIT | Diags.INFO,4 l7 o, L* Q- d+ b! R! \6 M
    Diags.RUNTIME_ON
7 X4 e7 @$ T5 N9 o+ `- J5 });
  P" R. n: G& N9 \# [" w' R3 k7 n, p1 R) T+ d+ H7 V
var Registry = xdc.useModule('xdc.runtime.Registry');
, S' F! Z3 F9 }/ M7 N! ~Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;3 U8 ]  v3 p/ I) J  E) `. C0 d
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;9 u6 {# H3 p. m/ C8 L
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;2 e+ k8 O. u* ]) C4 t3 v, i0 k% f1 f
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
8 w: f+ Q7 X+ A5 {9 }0 [  X
* b0 g5 }' l/ t7 v& Q. M/* create a logger instance */3 \' ~# z9 ^* Q9 @7 v; U
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');6 \3 Q' [$ T& x2 ^( d
var loggerBufP = new LoggerBuf.Params();9 V' }( }! Y  E$ S% B
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
2 G5 e8 H7 A& q2 i' mloggerBufP.bufType = LoggerBuf.BufType_FIXED;& n5 T) T8 ]* a) m. x

4 R8 Q1 m4 `& O% w( ]var appLogger = LoggerBuf.create(loggerBufP);3 a9 U! b9 d% M5 j( h
appLogger.instance.name = "AppLog_Core1";
. ?( o" ~% D5 s1 I  r6 @- D7 CDefaults.common$.logger = appLogger;0 T( n/ H/ M! _: l+ F- Y; n
Memory.defaultHeapSize = 0x8192;    0 k4 T3 Y" [* K' N1 r
Idle.idleFxns[0] = "&LEDStatus";8 F+ g7 D% P6 k% U9 ~! [
Cache.initSize.l2Size = Cache.L2Size_32K;4 E  n0 X6 |5 X: E; R
( w! r- Q! b" m# n1 T- J% o6 V
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-15 17:02 , Processed in 0.044947 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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