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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构+ Z0 O: y& x9 Z  T

* K& p! \( }$ p* K; q    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
- d) x  u3 ?, T: N
1 F$ y7 z' x! p1 @/ C) u" D其他程序段。。。。。
( {6 ]$ y- T! M4 ?
+ f5 i( c2 ?8 j" d5 ?$ @   free(x_d);
5 q( x1 U7 {  l2 T3 T; }0 q0 |) E, f& Y0 I0 m, C; ]
使用DSP侧单独调试功能,验证动态申请没有问题," d; `& V" z! C- n* i& {3 c
( t3 A5 H. `8 Q0 L1 _1 `
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
; E. S1 S$ |3 L4 @# [5 q

9 N3 r5 G2 L/ _! e1 ^  k3 Q8 N/ s! G+ d- J) k) a0 ~0 C: M; z
" u# }- A8 p! D- X3 W
0 I- E/ V2 a# f  u& B$ Z1 s
% C* V6 w+ [0 G3 m

: P8 b* k+ ~- F9 R* F: e, J% j
- C  P5 p' W& d3 \2 u! F- n6 I! S- l% }! G

" O" d& ~, {2 T9 `! e) i4 v6 |' h7 R6 I& e' \9 K$ [! ?& ^  a
分享到:  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 */! \, r" V6 t$ y4 r" }) w
Program.heap = 0;
7 `) m0 R( i1 L# l! J& ^Program.argSize = 100;  /* minimum size */
0 V0 J+ w8 H+ m1 B- qProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */$ U4 O& y" q" l
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" S1 ?# |9 X% |5 `" \var heapMemParams = new HeapMem.Params();
# [2 }6 b2 J% \% m7 T: o2 N) y" FheapMemParams.size = 0x4000;
* m, U8 M- Y5 P* y3 \1 J8 O2 l2 z
var Memory = xdc.useModule('xdc.runtime.Memory');
/ p- d; |. M8 b, f) K% _Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 j/ j; X# G! J- i; U
# i! o3 [0 x2 S我大约calloc  每次共计大小为5K*16bits,
* K3 n2 h+ p+ q3 f6 n而默认配置才0x4000、需要改大。4 h- Q& b8 F* D2 @' f

3 A+ }2 S: S2 z( D
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
* d' G' M2 }9 x6 X4 a. g我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下9 E; S7 n  m2 u3 W  \$ o5 M  V
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)" I& c* _) [! Y1 P- X1 q  l

  t: l; g" A- q& w7 z# j3 O是不是需要在DSP.CFG中进行配置
2 Y9 E6 {, z) Y3 T我现在的配置为( O5 H% @6 j. f! J6 u4 U
3 J  O1 C  N3 }! `' T0 L
/*, k: F- `8 O( ?: \. Q; E
*  ======== Operating System Configuration ========
( J! G  d& w8 W" |; R6 p */
8 g8 D) b, G. O$ R& M2 I+ {+ m  R* C1 v& W( v. |, |
/* no rts heap */
% ]9 s; E" ?# ZProgram.heap = 0;# ?: k* U; T4 \, V# h  p4 E! c6 D2 u
Program.argSize = 100;  /* minimum size */
! M# j  M0 m) w( ^Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大* s# L+ h/ Q: @, k

3 v  E. [. Z- g, i& c& b8 q/* create a default heap */
5 a* p; w& j3 M0 E) Lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: X# a& z% b  C- ]; l6 X8 e
var heapMemParams = new HeapMem.Params();; L0 H2 a) R6 v) \( K& ?$ \
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大" V) C5 C$ W# O+ s* ^; G

+ r" C$ H" ~: m% y2 @
var Memory = xdc.useModule('xdc.runtime.Memory');
7 C2 O; v" e2 o* o+ g4 p" P$ iMemory.defaultHeapInstance = HeapMem.create(heapMemParams);# h  A6 Y, ]  [" Q. j

/ j4 d! s% ~3 z6 b% s/* configure System module */
" i# u( t# M) y+ Xvar SysMin = xdc.useModule('xdc.runtime.SysMin');; a6 F. |4 ]: B
SysMin.bufSize = 0x1000;
" ?9 x2 ?" d. p) F' v1 T1 `- |SysMin.flushAtExit = false;. E1 s! r( B+ l$ H) e# B
$ d2 H$ }: a( g! G$ S% `
var System = xdc.useModule('xdc.runtime.System');9 X3 J& r  }: `8 f( E
System.SupportProxy = SysMin;; r; W$ o3 k9 B; d0 Z
9 n, h* }9 z! M6 l
/* configure SysBios to use the lower half of Timer 1 */( k5 v6 i3 |0 R8 U% x! l
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');! g! A; b7 p7 W
var Clock = xdc.useModule('ti.sysbios.knl.Clock');9 ?- G# Q- ^0 i- [& J
Timer.timerSettings[1].master = true;+ u0 {- O( g0 `+ x
Timer.defaultHalf = Timer.Half_LOWER;( h' _9 h6 B1 Z; B5 O: L7 S. D! R- w
Clock.timerId = 1;
1 A# d7 d# A6 V8 C4 J1 D9 N9 E. Y  {

! F" k  m# ^5 P9 I/*4 k: Z) ~5 x; |5 J
*  ======== Miscellaneous Configuration ========" R  e! n1 {  C# T2 K
*/
7 [" u+ H/ Q, b! I) M
7 w. F: W1 b: _/ N# h: D/* set default diags mask */, D3 e1 H1 s. X& t" ]
var Diags = xdc.useModule('xdc.runtime.Diags');' m2 ]% k' C& [8 V6 }
var Defaults = xdc.useModule('xdc.runtime.Defaults');9 t3 k7 X2 N. J; z9 l
% [5 N/ W& s- E: k0 Y# a- b
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;* c' T3 ~) Y( A. r/ b3 ]: V
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
# T; z3 Y' j  G( Z, ?6 `* ^7 xDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
4 l( W: O" `9 _8 w# G+ g) w# WDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
4 {1 ]8 h& Y  c9 U0 L' tDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
+ \: ]+ k6 @' g1 g1 h! I  d1 EDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
9 e. W4 S; @, O$ o$ mDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;' C0 B) Z& j& ?: {, _+ X. n  K4 u- R
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;. F+ ?- J: G9 X$ F  X" E
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
( N0 {9 ~9 C; A1 pDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;0 I% i  k! x( _. P3 R
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;" J; c: V% F0 r) U9 ?$ p! J" `
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;8 M+ J, g" Q9 X$ H
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
/ v6 l" p) k  X4 @. K1 j: oDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
4 {9 q  V/ l% T! r& [( k; D, }6 j8 M4 P* a$ Y
/* override diags mask for selected modules */
$ i) G2 {* o; q, p9 Y' bxdc.useModule('xdc.runtime.Main');
. E2 y) U) e8 x' K2 G' f8 F$ yDiags.setMaskMeta(
& m/ }2 t/ r8 c( ?# X, X; j$ l    "xdc.runtime.Main",
' G0 U0 N/ K) v; z$ T    Diags.ENTRY | Diags.EXIT | Diags.INFO," l9 h  P/ G) A) l+ s
    Diags.RUNTIME_ON8 A0 F+ N7 N" y2 j# e$ U* o
);. n% h; O/ \8 I9 R% j3 e
  O& J" t, _/ ]1 a5 ~) }5 `) _3 X
var Registry = xdc.useModule('xdc.runtime.Registry');
1 p. x8 U$ e% x# n7 pRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;0 R4 P: Z" g; C  C1 G
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
5 P6 ]( A) f+ }( YRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;0 d9 o5 G/ Y, T
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
' _% g4 @+ v& k6 Y, C8 z0 @! {3 w2 E4 @- c1 ?$ y6 r
/* create a logger instance */
$ ^( n: J. _! K# ~5 }var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
7 I7 ?: o8 \" T/ mvar loggerBufP = new LoggerBuf.Params();
5 K9 D* Q' ~: K! B( [loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
6 t8 T1 D# v3 d1 K4 X2 b; I) s  Q; nloggerBufP.bufType = LoggerBuf.BufType_FIXED;& g" E: S5 S: F8 d: F8 z) a

. D3 [* l, z5 N* |var appLogger = LoggerBuf.create(loggerBufP);0 ?: M% |2 S* Z7 |3 h
appLogger.instance.name = "AppLog_Core1";
5 z4 r: }& t* c! g+ wDefaults.common$.logger = appLogger;" i; I; H0 N/ Z7 B3 Z# a  o
Memory.defaultHeapSize = 0x8192;   
$ V& x" u7 }( M! FIdle.idleFxns[0] = "&LEDStatus";$ F5 ?) d4 T2 q6 W6 o
Cache.initSize.l2Size = Cache.L2Size_32K;
4 a# A  f8 S$ J7 ~
$ U) v, H: `+ R; Q$ k1 y
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-9 18:54 , Processed in 0.043489 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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