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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
* z$ [, b7 l( H/ d' G4 W( U* q6 c& [, @
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256, \( v- j- w# c  A/ E
* a+ a1 g* X( s1 I' I* U: C
其他程序段。。。。。
8 \; T/ Q) f3 e$ e8 Z  _. v  w
. V5 ^8 g0 `+ _2 `# H2 U2 }" z% L; w   free(x_d);/ M- E" F( i: e" W

- G$ ?: [* A5 J9 }2 M; u, J使用DSP侧单独调试功能,验证动态申请没有问题,& i4 z" d# v) ]" s

3 h; c- N5 M2 f7 c# w$ l但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ c5 R0 V! Z( N, L  I/ j

9 ^( L5 m. N8 P. V+ O4 ^; l4 J8 Y7 W0 J" |- ^

( t1 Z3 j! C  A8 b* p7 c5 |' R/ M+ g3 I6 g& P
0 D3 l* T1 [% B3 G% u) T
, k" ]& a' B, e! k6 e

) _6 @# Y$ }: v4 o5 L5 D
/ F: u! U7 l7 H  ~* d/ ?8 p
4 m  \4 ^2 ^& A: H" R7 n5 B% g& e+ y! n" y( u7 f0 r: @+ L
分享到:  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 */
, ?) F; @0 E0 c3 FProgram.heap = 0;
* L! k: W1 A& H' F; |6 _Program.argSize = 100;  /* minimum size */" O0 B5 L6 j& D/ O0 K0 Z- ?# b
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */2 S6 |2 R0 _# b& i6 ~3 s- W
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 W& n' h( P% _  M. l' [var heapMemParams = new HeapMem.Params();/ G* F! B% w. b+ W8 z. b9 |
heapMemParams.size = 0x4000;
' H8 d! ^4 i: \: R6 d+ C
0 M* O' U" P; U! U; l- _; G6 b- Rvar Memory = xdc.useModule('xdc.runtime.Memory');
7 c* e4 v  R, f9 U9 x0 aMemory.defaultHeapInstance = HeapMem.create(heapMemParams);* a. [- h9 d8 M: B
0 v; f- o- r  g7 F% N; M
我大约calloc  每次共计大小为5K*16bits,3 K$ [" }. c; ]% L
而默认配置才0x4000、需要改大。2 }/ T2 e7 P. o7 o

+ k. Q( T  f% [# @0 B6 U
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
" J% w! G# C4 D, W' z. P我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下9 g" r, @2 ^! o
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)% ~) g7 v, D  h. F: Y$ K* G

4 E3 S) s7 u0 j& W0 q' S是不是需要在DSP.CFG中进行配置9 l+ m3 O1 A% _/ G8 O
我现在的配置为
4 _  s# u; _$ V8 y9 z6 P# a. A* N# w0 X; B0 t5 p% e) l4 _# K& `
/*' c. D+ D* V# K% [5 Y8 g. ?5 a
*  ======== Operating System Configuration ========
3 n( E- Y% e- \% ]/ r9 ?! A9 w; h */
% ~5 O; W. m, |" p! Z- _
! d3 R) U. a$ `/* no rts heap */
/ Q2 b7 k7 w; i! d1 h1 n* n, DProgram.heap = 0;$ P5 b% V+ w0 Z8 ~
Program.argSize = 100;  /* minimum size */
$ j. m1 b1 \! ^4 g. t, h  O" MProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大2 @( |& \) ?/ I' E( o; f) u& f. B
( h' Q! `9 v+ `5 p. a6 H" x2 S: N
/* create a default heap */
' b3 O  p2 o- W( |" T0 b% hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. E7 c  \6 W9 l! Z" pvar heapMemParams = new HeapMem.Params();1 B6 x* f5 X9 x9 Y& y) r9 {' V
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
) ?0 T  k9 ~, v0 ]7 s7 o! X
. [0 T8 @& Y7 ^5 U  y( k
var Memory = xdc.useModule('xdc.runtime.Memory');/ d$ ?6 A' x  ^# S1 `
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
& I: H3 r1 H  M7 {+ Z$ @2 w1 ?6 p& k# A  @. r9 v
/* configure System module */
* @8 ?+ Z! ?4 s, J/ ovar SysMin = xdc.useModule('xdc.runtime.SysMin');
8 O5 \$ _+ W3 e* p$ R$ b5 o6 Q5 |SysMin.bufSize = 0x1000;
7 @4 D0 d8 J' x/ G3 a! K) I3 iSysMin.flushAtExit = false;& h$ f* B- J8 |. O( H6 ~

9 {) k8 S8 t: `6 S7 [var System = xdc.useModule('xdc.runtime.System');& `) c( I7 q( ?
System.SupportProxy = SysMin;
5 h5 V; B! `' K7 A& s
9 _& O7 T# ^+ l  @) W/* configure SysBios to use the lower half of Timer 1 */; I1 l) L- j$ c2 x" `
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
1 U  S8 }- i/ z7 ]4 ~- r+ hvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
0 n5 B, U# `$ B$ l0 |5 o! U. N) kTimer.timerSettings[1].master = true;
. v5 q# N- f2 y, @! o! D- e5 t# dTimer.defaultHalf = Timer.Half_LOWER;
- X+ |, p1 q5 z% J! M/ {2 ^  a' b% [Clock.timerId = 1;4 U+ q9 ~7 h' w

! _8 ]9 p" U" c$ Q: G' R5 o7 I: r. H0 j$ d9 L
/*! a! l$ F+ a8 C' O/ u
*  ======== Miscellaneous Configuration ========
% A/ W8 {6 U  b! W7 a! d" L */. H4 z& [9 e5 U6 y
: S# w. L- I) ~: }" @% R
/* set default diags mask */, A2 R9 x( h6 a* Z& C& n
var Diags = xdc.useModule('xdc.runtime.Diags');
. X4 d4 {7 r  D# v( T0 |var Defaults = xdc.useModule('xdc.runtime.Defaults');- P+ D  ~: A: N+ x

# L* P  j0 m, ^& f0 b1 zDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
8 J' r" k6 m8 B1 zDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;& i6 x1 {6 G3 B5 ]- \
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;* O' T, R7 |7 o  d. o1 L* q3 u
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
, {$ ]; O5 ^, }* _- uDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
5 F, F! X& p9 C( J' a: pDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
# h& ]9 {2 k/ Y( N- V& E+ z! mDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;' f' l& T  u$ j7 T$ O/ k4 I
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;1 u& Z9 }* ?: `( @
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;# I% D% n) H* o1 X& L" Y7 R
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;2 p6 {9 B8 c, E8 e
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
& C. E  P6 P! c8 ?& m2 jDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;0 O) z) D" v0 e. W5 ], x  \1 n
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;! k5 ]8 R& x' c
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
! G8 ]( G$ F4 p  g0 ]6 p( Y3 j  S
' H$ q# c4 m3 L# I1 H/* override diags mask for selected modules */  N5 x( P, D0 U3 X5 y) u5 ^) b1 I# [7 E! H
xdc.useModule('xdc.runtime.Main');
) g/ A# f5 F- B1 v/ D8 q1 x' vDiags.setMaskMeta(
; g. U/ c  G/ N) q0 t: t    "xdc.runtime.Main",) ^7 W* d" r1 z1 u9 n9 Y. F3 G4 `
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
& U* z5 |* E# `! z) D' D: W5 e1 g2 Q" D    Diags.RUNTIME_ON
5 u" r  m5 P8 y);8 y5 v2 l# g7 u2 X- D8 y
, ~7 S, U; u5 Y8 ^5 c  j- e" I
var Registry = xdc.useModule('xdc.runtime.Registry');
, H9 o# J- C# TRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
5 z% N3 y! {6 A5 \/ Z# r+ R* f- \Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 U* K; @8 [6 I; L& Q, E- [! dRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;  a9 q) d/ h# y& K5 g& c
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
9 ]' g) ]6 p, V+ y& k+ n5 I( C( [! E' k6 p' l
/* create a logger instance */3 g+ {  a  L# e" o. B8 ~( {
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
$ T. u' L! _. e) yvar loggerBufP = new LoggerBuf.Params();
4 a$ Q$ t1 M* Q2 EloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
% R3 h+ [; Q" K5 |+ N2 D/ gloggerBufP.bufType = LoggerBuf.BufType_FIXED;3 Z) ?) x4 L' ~4 L) o
0 K* _9 i7 _! P
var appLogger = LoggerBuf.create(loggerBufP);9 a8 y- i% c3 @/ V
appLogger.instance.name = "AppLog_Core1";
' e$ z: K  l, G6 D) S* x+ ]Defaults.common$.logger = appLogger;
; r# C3 d  C$ u8 Q& ]3 p) q! t, ?Memory.defaultHeapSize = 0x8192;    - n& v# G9 l5 w# D5 j
Idle.idleFxns[0] = "&LEDStatus";. Q" m! O: @6 J5 S3 H/ m; a
Cache.initSize.l2Size = Cache.L2Size_32K;5 _  i) X" a- k  j) H

: J- o# \0 h! |5 T  v: V3 Z
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-6 17:19 , Processed in 0.043315 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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