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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构- F4 O4 s" @  G! V7 U6 M
+ ]% U4 I: v- E+ M4 N9 P
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
5 H/ T' v0 B) o: ]5 w1 G
( L  r% O/ p: }; n其他程序段。。。。。
% _$ Z- s; L  v. G. H. N( E
2 x; }& U  B- {% J6 K9 [: ?! T   free(x_d);
4 o4 Z, C! t0 G2 j$ G# z6 c
1 [/ r- n- H+ i$ B! p/ u使用DSP侧单独调试功能,验证动态申请没有问题,9 S2 q; A+ J- s

; ^; p2 S6 Q3 O但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。1 y" W& L' `2 q! ?

% ]. v2 p! c- j& z& Y+ Z) a
! Z  m9 [; h8 f( m
" F* Q  l& o8 r+ D5 o" C6 k- o. q. U0 O- q. V) @
+ |% ]* h8 x# s& |2 U: O4 J

0 R: @( F* [+ \& z" P2 t6 [5 v, g9 W/ q* Y0 X$ [

$ r- @9 j6 c8 x$ w- {- q# U' x; J4 f% d5 ]- W) U8 L( i: E

7 S- A& K* y5 n) ?9 F) h% e
分享到:  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 */
; x4 B/ u- ^& p& \# v5 XProgram.heap = 0;
* D9 m8 x. ~2 s% W! F' a! ZProgram.argSize = 100;  /* minimum size */9 p; [, |1 `) |
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
1 V# b3 ~4 I$ i7 ^7 e6 Q  Ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: s" o( v! t% x  i% D& j% |var heapMemParams = new HeapMem.Params();
$ {/ j* R- [3 D. ?heapMemParams.size = 0x4000;
3 b3 }+ [; S, g6 z) A/ a' ~3 }& c! L$ n9 b, R% {8 V) d& E
var Memory = xdc.useModule('xdc.runtime.Memory');; E5 B; u- F" h
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);) W, G0 Y6 X2 H7 W, A) J

7 |: k8 C/ A) E% F9 a6 X我大约calloc  每次共计大小为5K*16bits,
* d4 P9 j1 y3 Q& S+ f3 `- O而默认配置才0x4000、需要改大。& L: j7 L% G7 e  r. s
$ u+ G0 g0 `& b/ T8 ]" R. S
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明& u" S, K$ ]2 ~- S& }5 s
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: G0 V, [( v& ]9 {2 @: c* i/ d6 y- Y(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
0 u; b# V2 n: D; I2 L

! }! A2 c* ^. o% P' }/ O是不是需要在DSP.CFG中进行配置
: O8 J- G( v. _  w: i7 ^4 K我现在的配置为$ ~% d5 k% g# k$ e+ S' A5 i7 b
4 v* I" t% W% Y( K0 N
/*
, C% t0 D2 |, h. a8 P# A' z% J) M *  ======== Operating System Configuration ========
! X) _% H2 {& S2 U2 G+ f: ` */
& v# R1 L3 |# y+ T
3 }4 O/ ]+ K' c/ |/* no rts heap */: v( o! I3 H* c- P
Program.heap = 0;9 ]2 b- V! V+ P- ?5 K
Program.argSize = 100;  /* minimum size */
% u1 F9 \5 d3 {5 eProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
+ J" |4 ]# M5 M! V, n5 T2 r- i
% s, M, d8 H  u( v" S2 F7 {7 {/* create a default heap */
+ M: @; i- y% O/ u: w5 k: j& Vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 f7 ]: Z7 \' p* [% ?& h  L' D
var heapMemParams = new HeapMem.Params();
' x" {! @& M: x) ]. m% `* F) wheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大4 y% f8 A' x  V. l

5 P* ~8 }6 }8 |' b/ j4 c1 S, x
var Memory = xdc.useModule('xdc.runtime.Memory');- x1 [" B! h3 ?  e. q$ @
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);: z. ]; R, l" f4 H+ n3 |; B) l/ R

* a5 B- ~! A. }% g/* configure System module */. [2 I* V( G5 |8 [+ L* G5 u
var SysMin = xdc.useModule('xdc.runtime.SysMin');
3 l: {) g7 `  B' qSysMin.bufSize = 0x1000;
9 V) j% u. R8 q( xSysMin.flushAtExit = false;5 _  A$ i; {1 n% R5 h1 R5 u& G

4 y- @9 e( l. ]- ~var System = xdc.useModule('xdc.runtime.System');
- o/ r+ ]8 v8 I6 \. @System.SupportProxy = SysMin;
: P- |7 z3 p/ w1 E8 I7 W2 [
3 O0 \" b0 B7 s9 e- G# \/* configure SysBios to use the lower half of Timer 1 */
" l; u' ]  K* svar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
5 G4 }; X- E- Yvar Clock = xdc.useModule('ti.sysbios.knl.Clock');7 j) b4 W$ c# s5 Y# v" n- i
Timer.timerSettings[1].master = true;  B/ D' q7 P! V( O
Timer.defaultHalf = Timer.Half_LOWER;  [8 b5 u7 |; u- O: n2 i$ s1 X2 H
Clock.timerId = 1;
$ u7 ~; u- f$ ~$ {$ E+ U- n; K' [: y
4 O9 b" c9 p6 e- }  V& I1 H  Y* j* i% D. W" Y: M$ V2 Q
/*8 G9 x1 u' U! \
*  ======== Miscellaneous Configuration ========
6 B. a$ F3 P" s* k# q */
) A* v. f5 y! H/ j0 x1 F5 Q2 j) Q% F2 f- L5 T
/* set default diags mask */
5 J1 E4 n2 x  p" {! J7 M, e% Kvar Diags = xdc.useModule('xdc.runtime.Diags');
4 O2 U. W; a7 s  p2 A+ g& avar Defaults = xdc.useModule('xdc.runtime.Defaults');
6 R5 V$ C1 X9 b  D6 n2 N6 ~1 k( w4 M& L8 [$ U! j( y+ [
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;1 E) j- H1 ?% l8 Q$ {
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;4 ]" E' u# C, @$ X% D  G
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;6 z3 x, X  R' Q0 h& c* P
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */% ~. c6 N# }! U. Z$ z7 V9 y* N
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
* p4 L  C& W6 J8 C5 }& z" eDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;/ i5 O: v% ~2 g. U6 l% J$ ^
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;  x- t8 |4 y3 b/ I2 k# M' l
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;5 j" I4 W( u+ C# S! h& e3 r& S
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 f% [: f& T/ Z& u: c  f
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;( w, E) T* G; D* d, U9 {
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;# D% p5 V7 a2 z" M# s  h8 \# P& F3 [
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
7 D# b$ b9 B" {# MDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;$ }3 Q" f0 }' X6 y4 p* q
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;+ m0 o1 o: v# d# p' }  n. C- x

$ F4 c. S( g& `& f. J/* override diags mask for selected modules */! ^% |! b) [4 v4 m8 U, x% j+ `0 s
xdc.useModule('xdc.runtime.Main');
$ ~1 w% L  {6 S& IDiags.setMaskMeta($ E' l  J' b4 a" S( J
    "xdc.runtime.Main"," G" g9 _9 K; Q* D5 L2 S) ^& ?9 I) ^
    Diags.ENTRY | Diags.EXIT | Diags.INFO,$ o, I1 S% o! m* V% W
    Diags.RUNTIME_ON
. D1 T9 B, K7 e* B  x& q( c);% F- |, p1 c' e+ ?3 V

: o  U4 ], D4 B, C$ Ivar Registry = xdc.useModule('xdc.runtime.Registry');
6 R5 @2 H" H: V3 m. m3 |) P; uRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;& |' T. _: i2 ]* C2 |
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;* n1 @% h/ ]/ p* Q5 m% }, U
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;1 k- e# L, p! e; l( K, T/ c
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
" r3 W# r: {* p+ }. o5 T: E2 T4 A; H- r" A1 O6 J/ D- B
/* create a logger instance */
; e5 H& ~+ U( M" K9 Lvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');( W0 h8 `6 z* v9 H$ K. @
var loggerBufP = new LoggerBuf.Params();
/ G5 P! w3 w5 nloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */& [( e) C; R& g& ^
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
2 e& w1 b1 q3 v0 I, J+ o. |% ~
: u! M+ O7 a; Q" r0 e8 nvar appLogger = LoggerBuf.create(loggerBufP);
. C9 u8 K. h2 [appLogger.instance.name = "AppLog_Core1";
% u# V0 s" `1 [3 [: B9 SDefaults.common$.logger = appLogger;3 S. `+ ~- w+ M& `
Memory.defaultHeapSize = 0x8192;   
! d8 j$ T0 u8 e; ~' EIdle.idleFxns[0] = "&LEDStatus";& B. K# y5 F; k5 i* y9 X# L
Cache.initSize.l2Size = Cache.L2Size_32K;  o$ U# |  P! O

( J1 ^. `+ N$ |7 @2 G
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-9 13:42 , Processed in 0.043797 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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