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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构/ e3 d  i0 [! d* c! w6 }' q) W/ o* `

9 c+ t6 u6 g$ y7 I5 p    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
/ B  C& l: ^1 M+ A( i, `
2 L6 b( e* h! L; K  t8 y其他程序段。。。。。
& N* ^8 |; _" U! N$ X2 ~) o
! x* G. z9 H% x8 O' H' w5 P   free(x_d);& I& P& v. m! `0 ^
  \% K, U; [! r' x1 [
使用DSP侧单独调试功能,验证动态申请没有问题,/ ?/ `7 k/ H. h( w: o

+ Y+ \; ?  M$ [! `5 K2 K( n( ^( E但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。& z7 x6 u% `0 N2 q7 J; j0 E% H
/ v& }7 l( n" V$ a4 M6 N/ i$ \
' X) a# g+ l. J9 B

1 N& P9 [4 n; k' c  T
4 C+ a" e) i9 L! f4 @. X! N4 Z8 k% H$ t- z
+ V. G( j, q0 U- W/ s# z; `
' c4 p: h% }4 w
: b9 C& |( C1 G3 d

1 z2 B1 N$ m1 T% z3 s' ~' x0 m  ]2 Q0 O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
* ^1 Q, X9 X! X8 S: |, H8 `/ F我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下* s$ Q# \  U% o3 n/ u2 V
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
3 s' k! z$ v9 [/ U: c( D6 a! y; z; e

: a. k% U9 H  c1 `9 i0 S是不是需要在DSP.CFG中进行配置
* i7 t$ d% M7 `& l8 P6 x我现在的配置为
+ n! Q3 g7 H+ a: B0 t) k/ r
# s/ L2 c& V' X. n: Z/ Q/*# Y. i7 @9 e- }  r2 N& `+ G- u
*  ======== Operating System Configuration ========
! r, ?! X: t" Z- ~( l# e& A */
" R6 u7 D& b4 v
  e; Q) h% e, d) x/* no rts heap */
' j2 w6 x6 V" y# ~3 @8 l2 aProgram.heap = 0;  u0 C+ o8 H. O! P( O' ?. B6 l
Program.argSize = 100;  /* minimum size */
2 e! P) O0 |+ `Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大: J; G4 R( I# S& }) w4 J
2 a# O" m6 d' y1 n2 G: V
/* create a default heap */
9 R, T/ r+ M, P# ]- K* S; qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, A! d5 {  I( @& s- @
var heapMemParams = new HeapMem.Params();
" x$ x4 A; p& G, Z' A; z% TheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大, R- `. o- C1 D' J8 S2 t
; T. C+ l5 z3 M& Z6 D$ g1 m. F
var Memory = xdc.useModule('xdc.runtime.Memory');
" H2 u, g" k7 ^% x* B5 VMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 n9 i3 z/ Z, X9 ~/ h/ @
. I5 M' h! s& _/* configure System module */
! U- @: C7 a. p* {var SysMin = xdc.useModule('xdc.runtime.SysMin');+ D7 A1 T0 ?* z6 r) y3 a, {* C
SysMin.bufSize = 0x1000;6 X. }" B) [8 |6 i, O! }" p  \
SysMin.flushAtExit = false;
9 x( w4 B7 {4 u% Z+ @( e. w9 E! N: Y  F) v( `' ?
var System = xdc.useModule('xdc.runtime.System');
0 D( k, }8 r* Y+ \( L. j4 B) J% rSystem.SupportProxy = SysMin;
# t1 ]' B- {3 c) H8 Q; q! X- Q5 U# p# H! Y6 K
/* configure SysBios to use the lower half of Timer 1 */
! S- G- {" I9 V* D- G5 G" S* _4 A& Mvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
+ D% O7 r8 x( G1 ?8 cvar Clock = xdc.useModule('ti.sysbios.knl.Clock');% s2 m  m2 [. O) [  G
Timer.timerSettings[1].master = true;! u+ E$ k! |1 c; y8 H
Timer.defaultHalf = Timer.Half_LOWER;' S: s" H8 b- K( c1 Z. m
Clock.timerId = 1;' p0 f/ p& V+ ^& `3 |2 \/ F$ N

( a# _8 r2 p7 y* z" |
/ p. k/ [; I) H+ c; _" n/*( O% ]' U6 u: _0 M: l+ z& o# X
*  ======== Miscellaneous Configuration ========
1 ]/ D5 c  V+ O! A( ]2 w+ X */
( T- f, C5 U( c6 k) b3 F+ H3 L" h& `3 t7 c  Q5 d
/* set default diags mask */
, ?! i0 i' x$ z9 H3 Cvar Diags = xdc.useModule('xdc.runtime.Diags');
6 w* c2 `6 E0 `( k8 `! x; t, u3 Xvar Defaults = xdc.useModule('xdc.runtime.Defaults');
( p% K% M* S4 Q0 ^3 B
1 n% H3 u: ~) v# v$ |# x: C( HDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;+ ^4 I% ^- P0 g2 W& s  g
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+ n! X3 M- V) x+ E- c# _0 gDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
- Q' G6 N' E+ P0 a2 PDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */6 I+ {% r( X) ?8 B" s
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
# b% `6 y% N8 k5 f" {Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;2 f7 P3 P4 Y+ p- B: h1 s
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;6 ^, l/ U) y2 |
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;0 B+ j& n6 l* A0 w
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;* A' p4 u; W( @. V0 t0 ^& K/ o
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;) D9 J) o& D* ~* ]: S" L
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;" v" {0 C7 y7 l. k# }! ~
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;! h5 c3 D5 ~6 {2 r
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
; O# X6 |4 |4 U1 J, c  n" GDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;, a- J; ~5 z0 C' ]* K+ i
* O# N: o& J& f# g9 @6 I
/* override diags mask for selected modules */: S6 a* ?' C3 @( |5 x; P
xdc.useModule('xdc.runtime.Main');. n' t6 k/ S  s; M  f6 Y
Diags.setMaskMeta(3 \8 b+ D7 q) q8 ]2 G
    "xdc.runtime.Main",
8 h6 G: S# V1 O: L3 _# k7 m    Diags.ENTRY | Diags.EXIT | Diags.INFO,' n' }  t( g7 L, r1 j
    Diags.RUNTIME_ON
6 }5 B7 q% z) }4 J# Y/ h' R);
" l: M- B( Z' v; b
# M9 a( }- z+ v- C& Wvar Registry = xdc.useModule('xdc.runtime.Registry');" d& A9 m. n- {
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
7 l1 [% g; `+ w$ f1 n" G2 |Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
# S7 t" F3 C% Q1 O& v6 L; q" LRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
& \3 w5 B! X- DRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
' q" O. t; G& p
/ {$ c  ^( n1 `: c8 m9 c& a/* create a logger instance */, G  ]4 K2 v  s, d; e% ]* P6 j
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 C8 L( p/ n' t. |: {8 K( Ivar loggerBufP = new LoggerBuf.Params();; h; Q/ A0 b1 c% n
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */* j0 `6 w* n( w# [
loggerBufP.bufType = LoggerBuf.BufType_FIXED;. N; g& p* N! ?4 \* w' P

* [6 {- W; g" w8 p1 ^1 }4 yvar appLogger = LoggerBuf.create(loggerBufP);
% c& V/ a  z2 m- Q3 n, M6 e! R0 OappLogger.instance.name = "AppLog_Core1";3 `- h; a, s; V+ e1 a4 p, M$ [
Defaults.common$.logger = appLogger;
8 y; G+ `1 [! s7 @$ TMemory.defaultHeapSize = 0x8192;   
" c7 s8 m. B0 u1 @5 h. ~! gIdle.idleFxns[0] = "&LEDStatus";
/ H+ _% N7 N+ v  T6 D. }Cache.initSize.l2Size = Cache.L2Size_32K;
; V' c: O1 k4 x5 \+ F6 s6 m' n. b/ V% E& Q; k* @5 ?5 V: o' C
回复 支持 反对

使用道具 举报

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 */% [( E5 A2 I0 M/ ^; j* N* [
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: x0 H# v  W9 N$ t8 h) J
var heapMemParams = new HeapMem.Params();
9 f6 `) k4 y5 k9 o1 W7 z) _; GheapMemParams.size = 0x4000;6 ^5 c8 m! I8 J. V( r) ]! g; N

/ ~) V# [+ Y. c6 \' w  r5 rvar Memory = xdc.useModule('xdc.runtime.Memory');
; S! U, V& d2 D' I0 mMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 n+ m$ P' X6 w' g+ V" P
# R; c; |2 Q) f  z6 I; [/ n我大约calloc  每次共计大小为5K*16bits,
2 H( u$ K6 Y- ?/ b( r: T+ E$ U而默认配置才0x4000、需要改大。/ M2 Z) m4 d0 Z6 C' n6 n: j$ i
* }" y* P, k/ w5 q+ J5 u- l! m' q' s% L
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
+ W5 n' f' I+ ^. M9 E- B5 O. B  WProgram.heap = 0;6 ?* v5 h9 u1 ~9 u
Program.argSize = 100;  /* minimum size */2 u5 f$ `3 Q  Q, j- n. D
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-25 01:17 , Processed in 0.042069 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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