关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构8 R9 c- J  E/ I  E  R8 x3 V. A
9 a4 T1 Y' h& E$ S0 W" r
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
( d* W& p3 s6 _1 @
- H1 W$ q5 s5 d其他程序段。。。。。5 M7 D, F7 l# V

! v- P+ Q8 q# R. o1 [' n5 }   free(x_d);
+ F& Q+ t8 {  }4 Q! V; K
8 b. H" W; g& P' n使用DSP侧单独调试功能,验证动态申请没有问题,
% \! e2 H) Q- x& r6 E; j3 n: ~& ]
; Z8 r6 b4 l2 ?% W$ h4 }* x" J但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
. _6 \7 _- d0 a5 [  f
, R& T+ ~  d4 r% k% P! Q* K

0 G( O' i) C1 E7 W$ i. {+ X0 \
) [# K; b* ]9 ?& s* U" s; I% c4 ~( B9 c, c9 b
, w3 Y4 x" G. C+ Y& J

0 G9 T& [3 f( `
8 f/ k3 N2 |& A# L: }$ f9 D+ F% T+ [
" K& [) ?; M+ `% W  {
! f0 s8 D+ F. X. D4 z0 M- V5 Q; J+ r; q- ^1 v# F4 f
分享到:  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 */  g% s- ?% V7 _/ ?
Program.heap = 0;% K9 q, N' h) Z5 Y) k. J
Program.argSize = 100;  /* minimum size */
( Z, z! ]5 `+ i% @8 \  }: LProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */6 z% S) c" U; `$ f. w4 ^9 x
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  X$ ^4 K1 G1 Z2 B% [5 F
var heapMemParams = new HeapMem.Params();
4 z1 C  T0 q7 x8 s) fheapMemParams.size = 0x4000;# m# N9 j$ z% C9 O) Q
% {, p0 V  W, @6 u
var Memory = xdc.useModule('xdc.runtime.Memory');/ b( T# F7 V! a# b! ^$ Z+ l
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 k; J) e5 E8 z' ^- u8 L. X1 `7 V/ E$ g& T3 k3 h" {" K& l
我大约calloc  每次共计大小为5K*16bits,  F* r, j1 ~1 d
而默认配置才0x4000、需要改大。. z! Q$ a3 M; b3 w- K

' A) j3 U. c0 L  Q
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明9 u# n/ E0 W9 {
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
0 O. \8 E* m* ]0 Q(不过疑惑的是,为何单独DSP仿真就没有问题呢?)- I3 y8 U: ~4 Q5 D! j9 z& V# _  W

0 h+ z2 r3 L( n) d是不是需要在DSP.CFG中进行配置
0 A0 N* L% S8 m% b& X2 q: {我现在的配置为
. l; ?, f- g% I  W( H% ^' o+ ?" [
1 m/ [+ ~3 t% T: |/*' }. e/ T- `; b/ I9 `- D- B1 a! w
*  ======== Operating System Configuration ========: {* M! ^5 L8 }  i2 ]
*/. `6 X2 T( q, ~; b% f

+ H" M" |( ^, U/ z' z; l/* no rts heap */
7 u6 L7 J- E& @! {2 Z9 NProgram.heap = 0;
! W) ~& W: S5 v* Z: ^Program.argSize = 100;  /* minimum size */& {% ~: R  h" @' b
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' Q# J: ]! J0 {9 m8 n" f; R7 @4 L5 u
3 x1 d! C7 ?# s6 X6 h
/* create a default heap */
$ j4 Y8 D. o: O0 C% N" q5 N# fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ z* l6 ?* ~  F, \& }, H$ M3 \var heapMemParams = new HeapMem.Params();
: C2 o+ q5 f' o0 p5 IheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大0 G$ b4 h1 w9 _. k

  j% ~: P+ m6 B1 _2 H2 s) {$ ^! ~
var Memory = xdc.useModule('xdc.runtime.Memory');3 v8 {9 U( w- V" K9 f
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 Z: Z# @9 ]; ~/ i# l( G
, ]; j, p8 h$ K  `& x/* configure System module */
7 M8 L* m1 a7 F- K. ivar SysMin = xdc.useModule('xdc.runtime.SysMin');5 h$ ?! |# P/ I( l0 T5 A, q( v4 ^% b
SysMin.bufSize = 0x1000;/ ]2 y' b- `7 }) D/ v
SysMin.flushAtExit = false;
! W8 E0 U/ \( ~3 u# j* W
( I" r4 U/ |( n# |9 N) L4 Mvar System = xdc.useModule('xdc.runtime.System');7 s) U7 A2 ?- P
System.SupportProxy = SysMin;0 ^3 `" E! X- k/ a+ I6 w, ?
: O3 [$ c8 a7 b* u; _5 ?; C! B3 J) ^, J
/* configure SysBios to use the lower half of Timer 1 */
1 u" _; W2 L* s' fvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');8 k* r- D  P+ c+ ^, w+ H
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
; [2 S7 X# X# j( x; b+ oTimer.timerSettings[1].master = true;
9 T4 Z$ [- Z' e7 @Timer.defaultHalf = Timer.Half_LOWER;
+ J1 i1 {( ]6 qClock.timerId = 1;$ R0 k4 ^5 H& Q/ n) E6 Q& W( c
1 F" N7 H0 Y8 o- f6 |
5 m7 n- _2 A$ @, |, H# X
/*  q7 ~% Q7 Y6 D0 E6 s' R! Z. q
*  ======== Miscellaneous Configuration ========  B3 n7 q3 J3 f, N- }  e
*/
# v8 M6 V* a; I
  _5 i$ W/ x. v/* set default diags mask */
/ ^8 m+ i) L% ^) ^9 `  W0 ^var Diags = xdc.useModule('xdc.runtime.Diags');
2 K( O, f/ y9 fvar Defaults = xdc.useModule('xdc.runtime.Defaults');  y: B! z; J* G8 w/ ^( \

! ^: H: r/ Q9 @5 iDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
5 o5 Y; L) Z5 b6 qDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;5 S$ u  I9 v# }2 U# K$ D
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
: X  q  ?4 Q: `( o6 i* d( M$ nDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */7 Y3 U/ W, x3 v8 X; _
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
# ^: Z& J# |+ v* Z9 W- ADefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
" n" {2 i$ X- m" L: MDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;; B' i5 G+ p5 S( V0 T
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;9 z. p+ X9 d) F; W; z( T
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
0 q+ i  k! M( V: h/ j* ?/ @% JDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;& V* m5 M' }2 O3 P0 m' I
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
# B- a9 o" y6 }$ ]* pDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;6 ?0 B8 t3 w5 H# n( Z4 {& i# ~
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
1 v8 {! Y) g, t. C# Z# rDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
: K: x( f1 Y) q2 i. w
- q6 Z+ v6 P: ?' z7 Z0 D" E2 L/* override diags mask for selected modules */' o! e' z* s$ U' N  F
xdc.useModule('xdc.runtime.Main');3 e2 I  T, M' H0 a0 r* ~* |
Diags.setMaskMeta(+ _9 @) _) A4 ^$ {6 j$ z1 L. c
    "xdc.runtime.Main"," o- h3 K0 n0 c0 D& f6 y4 }: _
    Diags.ENTRY | Diags.EXIT | Diags.INFO,- S; e4 \8 ^" ?) B9 g% w
    Diags.RUNTIME_ON) s3 @! H: T; L& l/ k: {
);
. j& O" p" Y+ T- @+ s: [
5 x; n- x7 L0 f' r9 |7 L6 ~- M* vvar Registry = xdc.useModule('xdc.runtime.Registry');
: F/ e5 P9 m+ p0 h2 S0 Q; ~' qRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
( \  ^/ E3 \5 c: A# WRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;- z9 l% b, G& @7 l+ t
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;& s; U' g) z/ X% u( \- i( {
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
- K- c9 L! K5 E: t2 F- s! M4 H) g" M7 l2 J( n) R% b7 e$ M+ X6 x2 H7 N" V
/* create a logger instance *// N- J* S# J! _6 m- u* V: S* A
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
0 E' J- o9 U) k: M1 fvar loggerBufP = new LoggerBuf.Params();" V; a! P, E1 A3 L% G
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
) r2 z, l, Y1 D( z5 S; k$ C+ _loggerBufP.bufType = LoggerBuf.BufType_FIXED;# L1 E4 F3 b" C4 r+ v7 S
4 j/ x4 F4 A# _& R0 Q
var appLogger = LoggerBuf.create(loggerBufP);
8 _& ~/ r, [0 z$ L' ^  eappLogger.instance.name = "AppLog_Core1";
2 I$ N- m5 o( K" L7 MDefaults.common$.logger = appLogger;
' T1 H+ S' d  c& lMemory.defaultHeapSize = 0x8192;      S. c3 z* r+ l+ U
Idle.idleFxns[0] = "&LEDStatus";
: g  L$ b) l: C6 A2 o; X1 H) |; S) NCache.initSize.l2Size = Cache.L2Size_32K;2 ~; C# x  [, T0 W
  O3 I9 J0 h  B1 v- p. p; t
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-31 13:59 , Processed in 0.042573 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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